我遇到了一个非常奇怪的错误,我不知道发生了什么。
我使用一个名为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
包含未编码的单引号,而$ .ajax默认使用application/x-www-form-urlencoded
。但是,如果我将变量的名称更改为其他名称,例如text
,然后就不会发生错误。
我在Linux上的XAMPP和我的生产服务器(我从Namecheap.com租用)上测试了这个。错误只发生在后者中。两个服务器都在使用Apache。
所以我认为变量名有一些意义,但我没有听说过通过服务器配置对JavaScript变量名实施这种限制的方法。或者也许是由别的东西完成的。这里发生了什么?我是否应该停止打扰并选择其他变量名称?
答案 0 :(得分:0)
这将是一个SQL注入防护过滤器,位于Apache之前或作为模块安装。检查您的.htaccess
文件以确保您没有任何内容,然后与您的托管服务提供商联系。
答案 1 :(得分:0)
不是“适用于AJAX”,不,但可能适用于您发布的任何应用。也许您有一个全局身份验证层,尝试在任何页面上识别username
/ password
对(这是一个坏主意),或者,正如Dark Falcon所说,您在Web服务器上安装了一些东西水平。在这里阅读服务器错误日志会很有帮助。