【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)模块,就是一个很好的综合例子,你们有兴趣能够继续研究。网站

相关文章
相关标签/搜索