1

我们的网站使用 PHP 版本 5.2.14

最近我们的主持人可能改变了魔术引用的定义,我想出了建议的解决方案 [下面的代码]

  1. 这个解决方案适用于 PHP 5.2.14 版吗?
  2. 当我们升级到 PHP 版本 6 时我应该改变什么?
// Code:

function fHandleQuotes($s) {
  if (get_magic_quotes_gpc())
    return ($s);
  return (addslashes($s));
}

. . .
// Usage:

. . . 
$query = "UPDATE myTable SET myField = '" . fHandleQuotes($_POST['fieldName']) . "'";
. . . 
4

2 回答 2

2

在 PHP 6 中,magic_quotes 将被删除!
现在你可以使用这个功能了。

if(  ( function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc() ) || ini_get('magic_quotes_sybase')  ){
    foreach($_GET as $k => $v) $_GET[$k] = stripslashes($v);
    foreach($_POST as $k => $v) $_POST[$k] = stripslashes($v);
    foreach($_COOKIE as $k => $v) $_COOKIE[$k] = stripslashes($v);
}
于 2010-11-02T12:30:46.483 回答
1

阅读本文以及为什么不应该使用魔术引号: http:
//php.net/manual/en/security.magicquotes.disabling.php

使用该页面上的示例之一并替换stripslashesaddslashes. 但是,是的,您的解决方案可能有效。$_GET = array_map("addslashes", $_GET);尽管在启动时只使用一次会更快且干扰更少。更好的是使用mysql_real_escape_string而不是在addslashes其上。(但您的数据库连接必须已经建立才能正常工作。)

此外,我想向您推荐这个垃圾邮件:http: //sourceforge.net/p/php7framework/wiki/input/ - 因为它允许您逐步重写您的应用程序以$_GET->q["fieldName"]用于(不太安全的)魔术引用字段,或者只是$_POST->sql["fieldName"]用于(更安全的)编码字段。
您甚至可以使用默认为所有正常访问$_REQUEST->sql->always()启用过滤器。$_REQUEST["fieldName"]尽管对于某些应用程序来说这可能是矫枉过正。

于 2010-11-02T12:29:46.803 回答