get_magic_quotes_gpc()和mysql_real_escape_string - 安全性

时间:2013-07-19 07:56:53

标签: security function mysql-real-escape-string

我正在练习php,我在解释函数以逃避危险的sql字符时感到困惑。我想知道它是如何工作的,特别是第二个if中的$ value。我很安静地让我了解实际的功能流程。

function quote_smart($value, $handle) {

   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }

   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value, $handle) . "'";
   }
   return $value;
}

2 个答案:

答案 0 :(得分:1)

代码的作用基本上是什么;

  • 首先,当且仅当在服务器中启用magic_quotes_gpc时,它才会删除{{3}}的效果。它不应该是因为magic_quotes已经被弃用了一段时间(并且完全在新的PHP版本中删除)。

  • 其次,它将$value的所有非数字值括在单引号中,并使用mysql_real_escape_string转义该值以避免在值字符串中使用SQL注入。

使用最新版本的PHP,此方法根本不存在,因为永远不应启用magic_quotes_gpc,并且您将使用不PDOMySQLi参数化查询需要逃避他们的价值观。

答案 1 :(得分:0)

此功能不会“逃避危险的sql字符”。它将$value格式化为正确的mySQL文字。但它错了,

  • 因为它处理get_magic_quotes_gpc()而不应该处理function quote_string($value, $handle) { return = "'" . mysql_real_escape_string($value, $handle) . "'"; }
  • 并且它有一些魔力,试图格式化数字或字符串
  • 并且它旨在直接格式化插入查询的值,而不是通过占位符。

正确的版本必须是

{{1}}

并且它应该仅用于处理占位符

虽然必须在引导程序文件中处理魔术引号,但对于所有输入值,不仅仅是进入查询的引号,但仅出于兼容性目的。