过滤网址后我需要mysqli-> real_escape_string吗?

时间:2013-08-07 12:48:59

标签: php session get mysqli

我问这个问题因为我还不太确定filter $ _GET变量是否足以阻止mysql注入,所以起初我有一个过滤函数

function filter_url($url)
{
  if (is_array($url))
  {
    foreach ($url as $key => $value)
    {
      // recurssion
      $url[$key] = filter_url($value);
    }
    return $url;
  }
  else
  {
    // remove everything except for a-ZA-Z0-9_.-&=
    $url = preg_replace('/[^a-zA-Z0-9_\.\-&=]/', '', $url);
    return $url;
  }
}

我打电话之前每次都有$_GET=filter_url($_GET);

$filter_case =isset($_GET['product_ID'])?"and product_ID={$_GET['product_ID']}":"";

我需要$mysqli->real_escape_string($_GET['product_ID'])吗?如果我仍然需要暗示它,什么样的SQL注入将超越我的查询方法?

此外,重要的是做$mysqli->real_escape_string($_SESSION['member_ID'])我正在考虑是否有人可以操纵他的$_SESSION变量?

1 个答案:

答案 0 :(得分:0)

这个问题本质上是错误的。

在SQL查询中添加字符串文字时需要$mysqli->real_escape_string 在这种情况下,您需要此函数,无论字符串来源或验证如何。 In任何其他情况(即字符串不在查询中或不作为SQL字符串)这个函数绝对没用。

这就是使用预备语句(本机或模拟)的必要原因。