-3
 function clean( $value ) {

        if(function_exists( "mysql_real_escape_string" ) ) {

            if( get_magic_quotes_gpc() ) { $value = stripslashes( $value ); }
            $value = mysql_real_escape_string( $value );
        } else { 


            if( !get_magic_quotes_gpc() ) { $value = addslashes( $value ); }

        }

    $value = strip_tags($value);
    $value = htmlentities( $value, ENT_QUOTES, 'utf-8' );
    $value = htmlspecialchars( $value , ENT_QUOTES , 'utf-8' );

        return $value;
    }


if(isset($_GET))
{
    foreach($_GET as $k=>$v)
    {
        echo clean($v);
    }
}

当我尝试

http://localhost/test.php?act=add_credit&rid=975&total=%22%20onmouseover%3dprompt%28929649%29%20bad%3d%

我明白

 add_credit975" onmouseover=prompt(929649) bad=% 

这意味着onmouseover=prompt(929649)陷入低谷...听起来很愚蠢,我无法直接访问该网站...有人只是给了我一个网页并要求我确保其安全。

并且使用 pdo ,prepared statements , sqli 和 ..... 是没有问题的

4

2 回答 2

0

这个功能可以防止sql注入和xss吗?

不。

于 2013-05-11T19:40:30.227 回答
0

不,不是,而且 SQL 注入!= XSS。

在将数据插入数据库之前,您需要对数据进行转义以防止 SQL 注入。我建议您使用PDO准备好的语句而不是*_real_escape_string.

为防止 XSS 攻击,请在将数据作为 HTML 发送到屏幕之前对其进行转义。通常,您在从数据库中获取它之后执行此操作。在大多数情况下strip_tagshtmlspecialchars就足够了。例子:

<p> <?= $untrustedData; ?> </p>                      <!-- <- strip tags -->
<a name="<?= $untrustedData; ?>"> trusted data </a>  <!-- <- htmlspecialchars -->
于 2013-05-11T19:40:55.917 回答