@1kbfree
        
        2018-10-06T16:37:59.000000Z
        字数 1514
        阅读 1765
    渗透 代码审计
在之前分别讲了Dvwa的Xss测试的
Low、Medium、High等级,这节课就深入的来讲impossible如何防御的( 其实之前文章也有讲过,不详细,这节课就深入的来讲解一下 )
老套路,直接看源码:
<?php// Is there any input?if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$name = htmlspecialchars( $_GET[ 'name' ] );// Feedback for end userecho "<pre>Hello ${name}</pre>";}// Generate Anti-CSRF tokengenerateSessionToken();?>
{% note danger %} 
这段代码中的checkToken()函数是用于防御Csrf攻击的,先不用管,我们先来看看这个htmlspecialchars()函数 
{% endnote %}
htmlspecialchars — 将特殊字符转换为 HTML 实体
| 字符 | 替换后 | 
|---|---|
| & (和号) | 成为 & | 
| " (双引号) | 成为 " | 
| ' (单引号) | 成为 ' | 
| < (小于) | 成为 < | 
| > (大于) | 成为 > | 
先看一段代码简单的代码:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Demo</title></head><body><?php$name = $_GET['name'];?><h1>你好,<?php echo $name;?></h1></body></html>
访问http://127.0.0.1/myphp/demo.php?name=1:

访问http://127.0.0.1/myphp/demo.php?name=<img src=x>:

可见,这个是存在Xss的,那么我们用htmlspecialchars函数来过滤~
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Demo</title></head><body><?php$name = $_GET['name'];$name = htmlspecialchars( $name );?><h1>你好,<?php echo $name;?></h1></body></html>
继续访问http://127.0.0.1/myphp/demo.php?name=<img src=x>:

看到这里,你们就会好奇了,为什么会直接把输入的内容输出出来,而不是以代码被解析?我们打开审查元素看一看(F12)

我们可以发现这里是把<变成了<,把'>'变成了>,从而导致了代码只会原样输出而不会当成代码来编译
如果你还困惑的,我再给你看一段代码:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Demo</title></head><body><h1>你好,<img src=x></h1> <!-- 注意看这里 --></body></html>
访问http://127.0.0.1/myphp/demo.php:

Xss反射型部分撒花完结~
