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和.....是不可能的
答案 0 :(得分:0)
这个函数可以阻止sql注入和xss吗?
没有
答案 1 :(得分:0)
不,它不是,并且SQL注入!= XSS。
在将数据插入数据库之前,需要转义数据以防止SQL注入。我建议您使用PDO
和prepared statements代替*_real_escape_string
。
要防止XSS攻击,请在将数据作为HTML发送到屏幕之前转义数据。通常在从数据库中获取后执行此操作。在大多数情况下,strip_tags
和htmlspecialchars
就足够了。例子:
<p> <?= $untrustedData; ?> </p> <!-- <- strip tags -->
<a name="<?= $untrustedData; ?>"> trusted data </a> <!-- <- htmlspecialchars -->