【DVWA】XSS

对于一个简单的输入框,基本上学过html编程的人都知道怎么写,但要是不做一些过滤,你可能会遭遇到黑客的XSS攻击,黑客可以在你的网站上挂载一系列的Javascript脚本,很有可能就此让访问你的网站的人cookies泄漏,如果你这输入框还和你的数据库关联,那问题更大。

在DVWA的XSS(Reflected)中就展示了一个很简单的XSS。如图,就只有一个输入框,在输入框中输入东西,点击submit,网页就会出现反馈:

这个网页的代码也和大家想的一样,非常简单,一得到参数就会将东西反映出来:

<?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,这个网页就会弹一个窗,如下图所示:

显然,黑客在攻击的时候肯定不会写弹窗,当然是写些有害的脚本。

所以,我们要对网站所有有输入的地方进行防范。在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注入》(https://my.oschina.net/u/3776619/blog/1805225)的内容。在DVWA的XSS(Stored)模块,就是一个很好的综合例子,大家有兴趣可以继续研究。

猜你喜欢

转载自my.oschina.net/u/3776619/blog/1806473