剥离标签,删除其他字符和mysql_real_escape_string就够了吗?

时间:2012-05-27 02:53:27

标签: php strip-tags

我正在处理几页来管理来自textarea的数据,用户可以通过基本编辑器WYSIWYG来编写一些内容。在这个textarea我很少标签。 我想知道以下过程是否足以保护自己免受垃圾邮件和与SQL查询注入等相关的其他隐患。

我的步骤

function string_db ($value) 
{ 
   $value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value; 
   return mysql_real_escape_string($value); 
} 

$content = string_db(trim($_POST['conten']));
$content = strip_tags($content, '<p><a><b><u><i>'); // The 5 tags allowed
$content = str_replace("&lt;", "", $content);
$content = str_replace("&gt;", "", $content); //In case someone try to type html entities instead of html code

//INSERT DATA IN DB

在我显示先前保存在db中的数据的页面上我使用:

echo html_entity_decode($contentFromDb);

这够了吗? 是否有一系列测试要证明其有效性?

非常感谢

1 个答案:

答案 0 :(得分:2)

您应该使用PHP的PDO功能。使用此方法可以创建预准备语句,这有助于消除SQL注入漏洞。

$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
$STH = $DBH->("INSERT INTO table (col1, col2, col3) values (?, ?, ?);");

# assign variables to each place holder, indexed 1-3  
$STH->bindParam(1, $col1var);  
$STH->bindParam(2, $col2var);  
$STH->bindParam(3, $col3var);  

# insert one row  
$col1var = "My first value"  
$col2var = "Value 2";  
$col3var = "Someone's 3rd value";  
$STH->execute();  

# insert another row with different values  
$col1var = "My first value; Query 2"  
$col2var = "Value 2 -- of the second query";  
$col3var = "Someone's 3rd value;#This one has weird characters";  
$STH->execute();  

在上面的示例中,我们连接到数据库并将数据库句柄设置为$DBH。然后我们准备查询并使用未命名的占位符(? s)。接下来,我们将PHP变量绑定到未命名的占位符。最后,我们设置变量并执行查询。只需更改PHP变量中的数据,就可以使用新值重复此操作。