【DVWA】XSS

對於一個簡單的輸入框,基本上學過html編程的人都知道怎麼寫,但要是不作一些過濾,你可能會遭遇到黑客的XSS攻擊,黑客能夠在你的網站上掛載一系列的Javascript腳本,頗有可能就此讓訪問你的網站的人cookies泄漏,若是你這輸入框還和你的數據庫關聯,那問題更大。php

在DVWA的XSS(Reflected)中就展現了一個很簡單的XSS。如圖,就只有一個輸入框,在輸入框中輸入東西,點擊submit,網頁就會出現反饋:html

這個網頁的代碼也和你們想的同樣,很是簡單,一獲得參數就會將東西反映出來:數據庫

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
	// Feedback for end user
	$html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?>

但你們有沒有想過,要是name這個參數是<script>XX</script>,那麼網頁的html就會變成:編程

<pre>
	Hello<script>XX</script>
</pre>

那黑客是否是想在XX中寫任何腳本都行?也就是在輸入框中,寫入<script>XX</script>就行,好比,寫入<script>alert(1)</script>再點擊submit,這個網頁就會彈一個窗,以下圖所示:cookie

顯然,黑客在攻擊的時候確定不會寫彈窗,固然是寫些有害的腳本。session

因此,咱們要對網站全部有輸入的地方進行防範。在php中集成了一個很好用的函數htmlspecialchars(),能夠幫咱們過濾如同<script>這類有害字符。在DVWA的impossible也就是這樣作的,以下的代碼:函數

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
	// Check Anti-CSRF token
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

	// Get input
	$name = htmlspecialchars( $_GET[ 'name' ] );

	// Feedback for end user
	$html .= "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>

固然若是你的輸入框的字符,以後還要進數據庫的,那還要考慮到《【DVWA】SQL注入》(http://www.javashuo.com/article/p-ulirjpqm-ec.html)的內容。在DVWA的XSS(Stored)模塊,就是一個很好的綜合例子,你們有興趣能夠繼續研究。網站

相關文章
相關標籤/搜索