-1

为了在执行查询(包括 INSERT 查询)之前防止 SQL 注入攻击,我正在使用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());
  }

将“鲍勃的数据”放入数据库中。

有没有办法以不同的方式处理这个问题,以免在数据库中出现斜线?

注意:我知道执行 qureris 的首选方法是使用参数化查询或 pdo,但由于各种原因,在这种情况下不能这样做,因为它是一个巨大的遗留网站。

提前感谢您的任何建议。

4

1 回答 1

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);
}
}
于 2013-08-30T02:07:46.897 回答