CSRF
- 含義
CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站指令碼(XSS),但它與XSS非常不同,XSS利用站點內的信任使用者,而CSRF則通過偽裝來自受信任使用者的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。
- 場景模擬:
- a欠b 1000元錢, 在銀行轉賬給b, a的瀏覽器執行的操作是:
http://www.bank.com/transfer.php?from=a&money=1000&to=b
- 這個時候,c想要攻擊a,他執行了下面的程式碼
http://www.bank.com/transfer.php?from=Alice&money=9999&to=Cathy
當然,結果是失敗的,瀏覽器會記住a的session_id,而c通過瀏覽器的cookie帶過去的session_id當然不是a的,所以失敗。 - 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>
複製程式碼
- 只要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使用者將程式碼植入到提供給其它使用者使用的頁面中。
- 場景模擬
-
反射型xss攻擊 正常傳送訊息:
http://www.test.com/message.php?send=Hello
接收者將會接收資訊並顯示Hello
非正常傳送訊息:http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>
這時接收者的視窗就會彈出foolish
彈窗。 以上,只是簡單的示例,實際上,xss攻擊可以做得更加複雜,竊取使用者賬號密碼也是正常的 -
存貯型xss攻擊 在輸入框裡填寫
you are foolish!
那麼表單裡要傳送的的input框就會變成這樣<input type=“text” name=“content” value="you are foolish!">
不做任何過濾的話,這個會當成正常資料入庫 當要用到這個資料,從庫取出來的時候,就會出現you are foolish
的彈窗。
SQL隱碼攻擊
- 含義
所謂SQL隱碼攻擊,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程式,將(惡意的)SQL命令注入到後臺資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。比如先前的很多影視網站洩露VIP會員密碼大多就是通過WEB表單遞交查詢字元暴出的,這類表單特別容易受到SQL隱碼攻擊式攻擊.
- 場景模擬
- 和存貯型xss攻擊的例子本質上是一樣的
- 假如現在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
登入成功。