为了防止在执行查询之前的SQL注入攻击(包括INSERT攻击)我正在使用mysql_real_escape_string
。
问题是,如果要输入的数据中包含特殊字符,MYSQL似乎在插入时将斜杠插入数据库。
然后,当我在网页上显示该字段时,会出现斜杠。
理想情况下,我不希望在dbase表中的特殊字符之前加斜杠,因为在显示数据等时需要进行大量的持续维护以删除斜杠。
无论如何都存储在数据库中而不包括反斜杠?
作为一个例子:
$field = "bob's data";
...establish database connection
$field = mysql_real_escape_string($field);
$sql="INSERT INTO table (field) VALUES ('$field')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
将“bob的数据”放入数据库中。
无论如何都要以不同的方式处理它,以免最终在数据库中出现斜杠?
注意:我知道做qureris的首选方法是使用参数化查询或pdo但由于各种原因,在这个实例中不能这样做,因为它是巨大的遗留网站。
提前感谢您提出任何建议。
答案 0 :(得分:0)
我认为你可以在处理任何GET,POST,COOKIE或REQUEST对象之前使用类似的东西。
function removeMagiQuotes()
{
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
}