Low level
- <?php
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Feedback for end user
- echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
- }
-
- ?>
Medium level
- <?php
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Get input
- $name = str_replace( '<script>', '', $_GET[ 'name' ] );
-
- // Feedback for end user
- echo "<pre>Hello ${name}</pre>";
- }
-
- ?>
High level
- <?php
-
- // Is there any input?
- if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
- // Get input
- $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
-
- // Feedback for end user
- echo "<pre>Hello ${name}</pre>";
- }
-
- ?>
Impossible level
- <?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
- echo "<pre>Hello ${name}</pre>";
- }
-
- // Generate Anti-CSRF token
- generateSessionToken();
-
- ?>
通过以上的代码典型可以看到,在medium和high的防止法子上,仍然是黑名单式的过滤,并且思索的很狭窄,只是过滤了<script>标签,medium中直接硬编码的黑名单最不行取,别说换标签,直接巨细写绕过;在High级别内里,通过正则,停止了<script>标签行使的也许,可是可以或许触发js的标签远不止这一个,任意一个<img src=1 onerror=[xss]>如都是可以绕过的。可以想到基于黑名单的计策是很轻易疏漏的,不行取。在impossible中,直接对输入举办htnlspecilchars()编码转换,杜绝了xss。
(2) 存储型
留意下面的代码只是方向于处事器对用户的输入不颠末验证处理赏罚就直接入库,导致下次取出揭示到前端的时辰呈现xss。代码没有包括从数据库取出的操纵部门。由于只要从用户获取到数据后举办了严酷的验证处理赏罚,就可以停止存储型xss,以是最终缘故起因不是从数据库取出部门,以是DVWA省略掉了。出于篇幅缘故起因,在DVWA的存储型的裂痕复现中的缺陷细节和反射型相同,都是标签,正则过滤不全。就不再赘述,现把impossible代码类型列出:
- <?php
-
- if( isset( $_POST[ 'btnSign' ] ) ) {
- // Check Anti-CSRF token
- checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
-
- // Get input
- $message = trim( $_POST[ 'mtxMessage' ] );
- $name = trim( $_POST[ 'txtName' ] );
-
- // Sanitize message input
- $message = stripslashes( $message );
- $message = mysql_real_escape_string( $message );
- $message = htmlspecialchars( $message );
-
- // Sanitize name input
- $name = stripslashes( $name );
- $name = mysql_real_escape_string( $name );
- $name = htmlspecialchars( $name );
-
- // Update database
- $data = $db->prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' );
- $data->bindParam( ':message', $message, PDO::PARAM_STR );
- $data->bindParam( ':name', $name, PDO::PARAM_STR );
- $data->execute();
- }
-
- // Generate Anti-CSRF token
- generateSessionToken();
-
- ?>
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|