这个函数能阻止sql注入和xss吗?

时间:2013-05-11 19:33:06

标签: php mysql security xss sql-injection

 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,预备语句,sqli和.....是不可能的

2 个答案:

答案 0 :(得分:0)

  

这个函数可以阻止sql注入和xss吗?

没有

答案 1 :(得分:0)

不,它不是,并且SQL注入!= XSS。

在将数据插入数据库之前,需要转义数据以防止SQL注入。我建议您使用PDOprepared statements代替*_real_escape_string

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

<p> <?= $untrustedData; ?> </p>                      <!-- <- strip tags -->
<a name="<?= $untrustedData; ?>"> trusted data </a>  <!-- <- htmlspecialchars -->