web常见攻击七–夸站脚本攻击(XSS)

我是在dvwa(Damn Vulnerable Web App)上学到的这些东西,我把dvwa安装在了我的免费空间上,有兴趣的可以看看。DVWA

想要用户名和密码的可以联系我:sq371426@163.com

dvwa 用的验证是google提供的,详情见google CAPCTHE

跨站脚本攻击就是用户在类似留言本上发布html/js代码,当浏览此留言时,脚本就会执行。

我们来看完全没有防御的代码

<?php 

if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ 

 $isempty = true; 

} else { 
         
 echo '
<pre>'; 
 echo 'Hello ' . $_GET['name']; 
 echo '</pre>

'; 

}

?>

对数据直接输出,如果用户发布”

<script>
alert('楼主是SB');
<script>

,就惨烈 了。

下面代码修复了这个漏斗

<?php

if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){

 $isempty = true;

} else {

 echo '
<pre>';
 echo 'Hello ' . str_replace('<script>', '', $_GET['name']);
 echo '</pre>

'; 

}

?>

用str_replace将html标签替换掉,这样就可以有效防止xss攻击了。可是用户就是要发布script呢?

我们来看下面这段代码

<?php 
    
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ 
     
 $isempty = true; 
         
} else { 
     
 echo '
<pre>'; 
 echo 'Hello ' . htmlspecialchars($_GET['name']); 
 echo '</pre>

'; 

}

?>

用htmlspecialchars($_GET[‘name’]),这样就可以将html标签当做文本输出了。

"<script>
alert('楼主是SB');
<script>
JackSun

JackSun

I'm a coder.

You may also like...

3 Responses

  1. yoki says:

    建议使用bae和sae,空间现在不兴了

  2. yoki says:

    建议使用bae和sae,空间现在不兴了

  3. it新手 says:

    可是bae和sae有限制

Leave a Reply

Your email address will not be published.