2013-05-11 73 views
-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); 
    } 
} 

当我尝试这个函数可以防止sql注入和xss吗?

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

的[对 - 最终洁净的安全功能(http://stackoverflow.com/questions/4223980/the-ultimate-clean-secure-function) – 2013-05-11 19:39:57

回答

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 --> 
+0

感谢名单,我没有重复的”不要说sqlinjection == xss! ....反正干净功能(几乎9行)的第一部分是观察数据你是说,不会这样做吗? – max 2013-05-11 19:46:52

+1

我的意思是选择正确的过滤器取决于上下文。没有适用于任何情况的魔术功能 – 2013-05-11 19:48:28

0

可以此功能防止SQL注入和XSS的?