最近做了一套關于XSS跨站腳本攻擊的題目,有些收獲。
有句話說得好:最好的防守就是進攻。
這句話用在網絡安全上十分恰當 —— 隻有我們熟悉怎樣攻擊别人,才能更好更清晰的知道怎樣防禦攻擊。
那麼,讓我們來看一下怎麼攻擊别人吧[/壞笑]
目錄:
-
- 什麼是XSS
- XSS簡單入門
- 深入XSS跨站攻擊
什麼是XSS
XSS是指惡意攻擊者利用網站沒有對使用者送出資料進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去。使别的使用者通路都會執行相應的嵌入代碼。進而盜取使用者資料、利用使用者身份進行某種動作或者對通路者進行病毒侵害的一種攻擊方式。
XSS英文名是Cross Site Script(跨站腳本),為了與樣式CSS區分,是以簡稱XSS。
XSS簡單入門
那麼知道原理了,到底怎樣操作才能實作XSS跨站攻擊呢。
其實沒想象中的那麼難上手,根據
<script>
标簽可以放在頁面任意位置的特點。
假如有這樣一個情況:
//服務端代碼
function render($input) {
return '<div>' + $input + '</div>';
}
前端輸入内容會被
<div>
包裹後,傳回給前端。那麼我們輸入什麼才可以進行一次XSS攻擊呢。
很簡單,我們可以直接輸入
那麼頁面就會直接彈出‘1’,alert會中斷使用者程序,使用者體驗極差。就順利達到通過input框送出一段腳本代碼,有使用者通路頁面就會自動彈出‘1’。
整個流程大緻是這樣:
- 有個表單域:
。<input type="text" name="content" value="$input">
是使用者輸入的資料;$input
- 使用者輸入
,送出後将會彈出一個‘1’警告視窗,接着将資料存入資料庫;<script>alert(1);</script>
- 等到别的用戶端請求這個留言的時候,将資料取出顯示留言時将執行攻擊代碼,就會顯示一個‘1’警告視窗。
深入XSS跨站攻擊
經過剛才的例子,可以看出我們所要做的很簡單,就是想方設法執行
<script>
腳本内容就行了。但實際情況往往不向上述例子那麼理想,因為前段表單輸入通常是有驗證的。那麼我們怎樣才能跳過各種各樣的驗證呢?
(本文不涉及使用者資料竊取等内容,僅通過實作
alert(1)
來講解XSS跨站攻擊)