我正在进行ajax调用,将一个字符串POST到我从Namecheap.com租用的共享托管服务器。我似乎无法发布包含一些支离破碎的HTML标记的动作,例如<b><b
,<tag><tag<tag
。当我这样做时,我得到403 Forbidden错误。我使用Underscore.js中的转义函数尝试了相同的操作,但结果是一样的。
这是我正在使用的代码。
的JavaScript
$.ajax({
type: 'POST',
url: '/test.php',
data : {
pass : '<b><b' // pass : _.escape('<b><b') gives the same result
}
})
.done(function (res) {
console.debug(res);
})
.fail(function (err,textStatus,errorThrown) {
console.debug('failed');
});
PHP
<?php
$password = $_POST['pass'];
echo $password;
?>
我在我的本地机器上的XAMPP Linux上测试了这个,但这没有发生。为什么会这样?
答案 0 :(得分:1)
您几乎可以肯定会遇到Web主机的某种拙劣的“安全”功能。联系他们的支持人员。
答案 1 :(得分:0)
对于任何有相同问题的人,我通过双重转义_.escape(_.escape('<b><b'))
中的文本来修复(参见编辑)。这将输出&lt;b&gt;&lt;b.
Sam Deufel也建议我使用base64编码。我认为这也会奏效。
编辑:我发现也不允许在Namecheap托管服务器上通过ajax发布alert()
或document.write()
等JavaScript语句。所以双重逃避它并不总是有效。使用base64或类似方法可能更好。