对于一个简单的输入框,基本上学过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)模块,就是一个很好的综合例子,你们有兴趣能够继续研究。网站