2010-11-02 83 views
1

我们的网站使用PHP版本5.2.14在PHP中使用get_magic_quotes_gpc版本5.2.14或同等PHP版本6

最近我们的托管服务提供商可能改变魔术引号defenition,我想出了建议的解决方案[代码波纹管]

  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']) . "'"; 
. . . 
+0

remove'return(addslashes($ s));'你将会是o.k.并且不要忘记正确处理SQL查询的数据。 – 2010-11-02 12:43:16

+0

为什么我应该删除“返回”? – Atara 2010-11-02 12:58:22

+0

,因为addslashes在这里没有用处。应该有数据库特定的操作,而不是输入特定数据 – 2010-11-02 15:17:11

回答

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); 
} 
+0

谢谢,我将添加“function_exists()”。但是PHP 6中的等效代码是什么? – Atara 2010-11-02 13:00:19

+0

在PHP 6中,这段代码没有意义。魔术引号将被删除。他们将被关闭。 – pltvs 2010-11-02 13:12:45

+0

这有点旧,但是...这段代码是不正确的。当magic_quotes_gpc被启用时,'magic_quotes_sybase'只会覆盖'magic_quotes_gpc'转义方法。当'magic_quotes_gpc'没有启用时,'magic_quotes_sybase'在这方面没有效果。因此,您应该只检查是否启用了“magic_quotes_gpc”,而不是是否启用了“magic_quotes_sybase”。 (如果启用'magic_quotes_sybase'并且'magic_quotes_gpc'不是,则GET/POST/COOKIE数据不会自动转义。) – MrWhite 2015-05-06 09:18:43

1

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

使用该网页上的例子之一,并与addslashes取代stripslashes。但是,您的解决方案可能有效。尽管在启动时只需使用$_GET = array_map("addslashes", $_GET);就会更快并且不那么容易侵入。更好的是在其上使用mysql_real_escape_string而不是addslashes。 (但是你的数据库连接必须已经建立,才能正常工作)。

另外我想推荐你这个:http://sourceforge.net/p/php7framework/wiki/input/ - 因为它允许你渐进地改写你的应用程序使用$_GET->q["fieldName"](不太安全)magic引用的字段,或简单$_POST->sql["fieldName"](更安全)的编码字段。
您甚至可以使用$_REQUEST->sql->always()为所有正常的$_REQUEST["fieldName"]访问启用默认过滤器。虽然这可能是一些应用程序的矫枉过正。

+0

另一种magic_quotes,呃? -1 – 2010-11-02 12:44:22

+0

@Col。弹片:是的,但不完全。它并不妨碍使用最笨的可能的过滤器。但它使用特定于上下文的更合适的过滤器来减轻*。 – mario 2010-11-02 12:52:01