CSRF, XSS, Sql注入原理和處理方案

CSRF

  • 含義

CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。php

  • 場景模擬
  1. a欠b 1000元錢, 在銀行轉帳給b,  a的瀏覽器執行的操做是: http://www.bank.com/transfer.php?from=a&money=1000&to=b
  2. 這個時候,c想要攻擊a,他執行了下面的代碼http://www.bank.com/transfer.php?from=Alice&money=9999&to=Cathy 固然,結果是失敗的,瀏覽器會記住a的session_id,而c經過瀏覽器的cookie帶過去的session_id固然不是a的,因此失敗。
  3. c又想了一個方法, 寫了一個網頁, 訪問方法是:www.c.com/choujiang.p…, 用抽獎來吸引a, choujiang.php的代碼是:
<html>
<body>
<form method="get" action="http://www.bank.com/transfer.php">
    <input type="hidden" name="from" value="a">
    <input type="hidden" name="money" value="1000">
    <input type="hidden" name="to" value="c">
    <input type="button" onclick="submit()" value="活動抽獎">
</form>
</body>
</html>
複製代碼
  1. 只要a點擊了http://www.c.com/choujiang.php, 就會在本身的瀏覽器頁面顯示一個抽獎按鈕。  若是a剛給b轉帳完畢, 又點擊了這個抽獎按鈕, 就至關於a的瀏覽器發起了以下請求: http://www.bank.com/transfer.php?from=a&money=1000&to=c 這時, 銀行後臺服務器從http的cookie中識別出確實是a在轉帳給c, 是合理操做。可是,a並不知情

XSS(能夠分爲反射型xss攻擊存貯型xss攻擊

  • 含義

XSS攻擊全稱跨站腳本攻擊,是爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。html

  • 場景模擬
  1. 反射型xss攻擊 正常發送消息: http://www.test.com/message.php?send=Hello 接收者將會接收信息並顯示Hello 非正常發送消息: http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script> 這時接收者的窗口就會彈出foolish彈窗。 以上,只是簡單的示例,實際上,xss攻擊能夠作得更加複雜,竊取用戶帳號密碼也是正常的前端

  2. 存貯型xss攻擊 在輸入框裏填寫you are foolish! 那麼表單裏要發送的的input框就會變成這樣 <input type=「text」 name=「content」 value="you are foolish!"> 不作任何過濾的話,這個會當成正常數據入庫 當要用到這個數據,從庫取出來的時候,就會出現you are foolish的彈窗。web

SQL注入

  • 含義

所謂SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意的)SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。好比先前的不少影視網站泄露VIP會員密碼大多就是經過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊.sql

  • 場景模擬
  1. 和存貯型xss攻擊的例子本質上是同樣的
  2. 假如如今php的登陸代碼是這樣的 $sql = "select * from user where username = 'a' and pwd = md5(123456) 而後在前端密碼的輸入框裏填寫' or 1 = 1#,那麼sql語句就會變成$sql = "select * from user where username = '' or 1 = 1#' and pwd = md5(123456) #在sql的意思是註釋,後面的sql不會再執行 因此,$sql = "select * from user where username = '' or 1 = 1 登陸成功。
相關文章
相關標籤/搜索