2013-06-05 29 views
0

我遇到了一个非常奇怪的错误,我不知道发生了什么。是否有任何保留/特殊变量的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包含未编码的单引号,$ .ajax默认使用application/x-www-form-urlencoded。但是,如果我将变量的名称更改为其他名称,例如text,那么错误不会发生。

我在Linux上的XAMPP和我的生产服务器(我从Namecheap.com租用)上测试了这一点。错误只发生在后者。这两个服务器都使用Apache。

所以我认为变量名有一些意义,但我没有听说过任何通过服务器配置对JavaScript变量名实施这种限制的方法。或者也许它是由别的东西来完成的。这里发生了什么?我应该停止为此而烦恼并选择一个不同的变量名称吗?

+0

这听起来像是其中一台服务器上的安全过滤器(用于传入请求)。 – SLaks

回答

0

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

0

不是“for AJAX”,不,但可能适用于您发布的任何应用程序。也许你有一个全球认证层,它试图识别任何页面上的username/password对,或者像黑鹰一样,你可以在Web服务器级别安装一些东西。在这里,阅读服务器错误日志会很有帮助。

相关问题