2

全部,

有一个文字区说

 <input type="submit">

如果用户给出的输入为,

 here is my name  and my mail id is "a@x.com" 

当数据发布在服务器端时,数据会被接收,因为这是我的名字,我的邮件 ID 是 \"a@x.com\"

在双引号后面添加反斜杠。现在如何在提交之前对数据进行编码。我在服务器端使用 php..

谢谢。

4

5 回答 5

3

这是 magic_quotes_gpc 的作用——删除它只需在 php.ini 中禁用它或使用 stripslashes($your_var);

尽管请记住这是 php 的一个(糟糕的)安全功能,但是在将数据存储到数据库时,您应该使用相应的转义函数来防止 sql 注入,并且在显示用户发布的数据时,您的清理功能应该防止 xss 注入.

于 2010-02-14T20:13:24.243 回答
2

看起来该指令magic_quote_gpc已在您的服务器上启用:

当 magic_quotes 打开时,所有 '(单引号)、"(双引号)、\(反斜杠)和 NUL 都会自动使用反斜杠进行转义。


如果您无法在服务器配置中禁用它,一个解决方案是:

  • 检测是否启用
  • 如果是,请从输入中删除转义,使用stripslashes

关于这一点,您可以阅读禁用魔术引号部分。


当然,您必须在使用之前正确地转义您的数据;例如,在将其注入 SQL 查询之前。

于 2010-02-14T20:14:14.787 回答
2

如果您的网络托管服务提供商不允许您在 php.ini 文件中禁用它,您也可以在 PHP 中去掉魔术引号。将此代码放在您的 PHP 脚本之上:

    if (get_magic_quotes_gpc()) {
        function stripslashes_deep($value) {
            $value = is_array($value) ?
                     array_map('stripslashes_deep', $value) :
                     stripslashes($value);
            return $value;
        }

        $_POST = array_map('stripslashes_deep', $_POST);
        $_GET = array_map('stripslashes_deep', $_GET);
        $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
        $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
    }
于 2010-02-14T21:57:10.890 回答
1

在 php.ini 中禁用 magic_quotes 或stripslashes($text)在 PHP 中使用来删除斜线。

于 2010-02-14T20:13:50.403 回答
1

您的系统上可能启用了魔术引号。这可不是什么好事

于 2010-02-14T20:15:08.937 回答