无法POST包含碎片HTML标记的字符串

时间:2013-06-05 22:56:55

标签: ajax apache post underscore.js

我正在进行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上测试了这个,但这没有发生。为什么会这样?

2 个答案:

答案 0 :(得分:1)

您几乎可以肯定会遇到Web主机的某种拙劣的“安全”功能。联系他们的支持人员。

答案 1 :(得分:0)

对于任何有相同问题的人,我通过双重转义_.escape(_.escape('<b><b'))中的文本来修复(参见编辑)。这将输出&amp;lt;b&amp;gt;&amp;lt;b.

Sam Deufel也建议我使用base64编码。我认为这也会奏效。

编辑:我发现也不允许在Namecheap托管服务器上通过ajax发布alert()document.write()等JavaScript语句。所以双重逃避它并不总是有效。使用base64或类似方法可能更好。