0

我正在处理几个页面来管理来自文本区域的数据,用户可以使用这些数据通过基本编辑器所见即所得来编写一些内容。在这个 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

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

echo html_entity_decode($contentFromDb);

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

非常感谢

4

1 回答 1

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 变量中的数据即可。

于 2012-05-27T03:06:46.087 回答