我正在处理几页来管理来自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("<", "", $content);
$content = str_replace(">", "", $content); //In case someone try to type html entities instead of html code
//INSERT DATA IN DB
在我显示先前保存在db中的数据的页面上我使用:
echo html_entity_decode($contentFromDb);
这够了吗? 是否有一系列测试要证明其有效性?
非常感谢
答案 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变量中的数据,就可以使用新值重复此操作。