0

我遇到了一个非常奇怪的错误,我不知道发生了什么。

我正在使用一个名为的变量进行 POST ajax 调用password如下的变量进行 POST ajax 调用。

JavaScript

$.ajax({
    type: 'POST',
    url: '/test.php',
    data : {
        password : '123\''
    },
    dataType: 'text'
})
.done(function (response) {
    console.debug('success');
})
.fail(function (err,textStatus,errorThrown) {
    console.debug('fail');
});

PHP

<?php

$password = $_POST['password'];
echo $password;

?>

这将失败并出现 403 Forbidden 错误。我认为这是因为该变量password包含一个未编码的单引号,并且 $.ajaxapplication/x-www-form-urlencoded默认使用。但是,如果我将变量的名称更改为其他名称,例如text,则不会发生错误。

我在 Linux 上的 XAMPP 和我的生产服务器(我从 Namecheap.com 租用)上对此进行了测试。该错误仅发生在后者中。两台服务器都使用 Apache。

所以我认为变量名有一定的意义,但是我还没有听说过任何方法可以通过服务器配置对 JavaScript 变量名进行这样的限制。或者也许它是由其他东西完成的。这里发生了什么?我应该停止为此烦恼并选择不同的变量名吗?

4

2 回答 2

0

这将是一个位于 Apache 前面或作为模块安装在 Apache 中的 SQL 注入预防过滤器。检查您的.htaccess文件以确保您没有任何东西,然后与您的托管服务提供商讨论它。

于 2013-06-05T14:19:20.743 回答
0

不是“用于 AJAX”,不是,而是可能用于您发布到的任何应用程序。也许您有一个全局身份验证层,它试图识别任何页面上的username/password对(这是一个坏主意),或者,正如 Dark Falcon 所说,您在网络服务器级别安装了一些东西。在这里阅读服务器错误日志会很有帮助。

于 2013-06-05T14:26:22.760 回答