2012-02-05 55 views
0

这样就够了吗?安全的php变量插入到数据库之前

function cleanVar($str1){ 
if(get_magic_quotes_gpc() == 0){ 
    $str1 = addslashes(htmlspecialchars($str1)); 
} 
$str1 = stripslashes($str1); 
$str1 = htmlspecialchars($str1); 
$str1 = strip_tags($str1); 
$str1 = mysql_real_escape_string($str1); 
$str1 = str_replace("script","",$str1); 
$str1= str_replace("body","",$str1); 
$str1 = str_replace("select","",$str1); 
$str1= str_replace("insert","",$str1); 
$str1= str_replace("update","",$str1); 
$str1 = str_replace("on","",$str1); 
$str1= str_replace("<","&l",$str1); 
$str1 = str_replace(">","&",$str1); 
$str1 = trim($str1); 
return $str1; 
} 
+0

这是*方式*太多。请参阅[最终清除/安全功能](http://stackoverflow.com/q/4223980) – 2012-02-05 16:08:07

+3

'mysql_real_escape_string'就足够了。 – Gumbo 2012-02-05 16:08:21

+0

@Gumbo和谁高举他 - 这是虚假陈述。说到消毒,应该是逃避**和引用** – 2012-02-05 16:09:15

回答

3

如果可能,请使用PDO &准备好的语句。它处理这一切为你,并确保你不丢失任何数据(有一些古怪与带标签)

+1

问题中的代码似乎试图处理XSS以及SQL注入。准备好的语句(或者说,绑定参数)不会有帮助。 – Quentin 2012-02-05 16:12:27

+0

问题是“安全的php变量插入到数据库之前。”我没有从代码中推断出还需要做些什么。 – 2012-02-05 17:16:25

-1

望着OWASP预防床单这几乎涵盖是

& --> &amp; 
< --> &lt; 
> --> &gt; 
" --> &quot; 
' --> &#x27;  &apos; is not recommended 
/--> &#x2F;  forward slash is included as it helps end an HTML entity 

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

SQL注入也包含在此中。

此外,它有点奇怪,以取代实际的SQL语句,它可以成为一个问题,如果你要保存你的数据库中的实际单词。

1
$str1 = str_replace("script","",$str1); 
$str1= str_replace("body","",$str1); 
$str1 = str_replace("select","",$str1); 
$str1= str_replace("insert","",$str1); 
$str1= str_replace("update","",$str1); 
$str1 = str_replace("on","",$str1); 

会发生什么事是你申请此功能包含字符串:“这是对伊拉克局势升级的注释”。你会消除太多的信息。

PDO很棒,你应该考虑从过时的mysql库切换到它。

+0

不是PDO,而是调用它的参数化查询。 PDO没有垄断他们,但却让你做错了。我也很好奇,你自己使用PDO吗? – 2012-02-05 16:18:20

+0

我已经使用了mysql多年,但最近我转向了http://xpdo.org/,这是一个由PDO支持的ORB。 – OptimusCrime 2012-02-05 16:19:41