PHP Magic Quotes快速修复

时间:2010-11-23 18:56:12

标签: php security sql-injection

我的Magic_Quotes一直在进行,直到今天我才看到它正在被摧毁。如果我把它关闭,我可以逃避所有用户输入(无论是否在我的数据库中使用)。我绝对不能回头重写我的所有数据库查询以使用mysql_real_escape_string()。

我可以循环遍历所有$ _GET,$ _POST和$ _SESSION并应用mysql_real_escape_string()吗?

4 个答案:

答案 0 :(得分:3)

mysql_real_escape_stringmagic_quotes_gpc是两回事。魔术引号不会使您的输入足够安全,无法进行SQL查询。

无论您是否喜欢,应该转换所有数据库查询以使用正确的转义机制,否则您的应用程序会因SQL注入等安全问题而处于开放状态。

你不能直接在$ _GET,$ _POST等上直接应用mysql_real_escape_string,因为如果除了SQL之外还需要其他任何东西(如表单验证等),它可能会搞砸你的输入数据。 / p>

答案 1 :(得分:2)

将其关闭。与被黑客入侵的痛苦相比,手工重新编码的痛苦,与案件相比,相形见绌。

答案 2 :(得分:1)

See here click

这是我使用的方法。如果您使用case方法切换,只需连接index.php文件。 第二种方法,您需要添加到每个页面。

  
      
  1. 的index.php?页=家
  2.   
  3. index.php?page = two ...
  4.   

第二种方法每页添加代码

  
      
  1. 的index.php
  2.   
  3. contact.php
  4.   
  5. product.php ....
  6.   

推荐:简单页面查询案例/开关

// Magic Quotes Fix
if (ini_get('magic_quotes_gpc')) {
    function clean($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                $data[clean($key)] = clean($value);
            }
        } else {
            $data = stripslashes($data);
        }

        return $data;
    }           

    $_GET = clean($_GET);
    $_POST = clean($_POST);
    $_REQUEST = clean($_REQUEST);
    $_COOKIE = clean($_COOKIE);
}

答案 3 :(得分:0)

是的,您可以,但不要忘记您也可以通过GPC发送数组。 ?var[1]=data。应该注意的是,magic_quotes_gpc已被删除了,这是有充分理由的,我打赌很多啤酒,你的应用程序很容易被sql注入。

if (!get_magic_quotes_gpc()) {
    function my_escape(&$value, $key) {$value = mysql_real_escape_string($value);}
    $gpc = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    array_walk_recursive($gpc, 'my_escape');
}