2013-06-05 6 views
0

Я делаю ajax-вызов POST-строки на сервер хостинга, который я арендую с Namecheap.com. Я не могу показаться POST, который содержит фрагментированные теги HTML, такие как <b><b, <tag><tag<tag. Когда я это делаю, я получаю ошибку 403 Forbidden. Я пробовал то же самое, используя функцию escape от Underscore.js, но результат был тот же.Невозможно POST-строки, содержащие фрагментированные теги HTML

Вот код, который я использую.

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

Что произойдет, если вы попытаетесь получить доступ к странице с помощью своего браузера? 403 еще? Это похоже на проблему с правами на файл, попробуйте изменить файл perms на что-то вроде 755 или то, что соответствует вашей цели. – DaGardner

+0

Вы пробовали URL-кодирование содержимого с помощью 'encodeURIComponent'? –

+0

Я всегда получаю доступ к нему через браузер. Я изменил разрешение файлов на 755, но не повезло. 'encodeURIComponent' тоже не работал. – CookieMonster

ответ

1

Вы почти наверняка сталкиваетесь с какой-то неразумной «защитой» функции вашего веб-хостинга. Обратитесь в службу поддержки.

+0

Похоже, что это так. Это очень грустно. Я свяжусь с командой поддержки. Кстати, будет ли какая-нибудь работа вокруг? – CookieMonster

0

Для тех, кто имеет ту же проблему, I исправлено (см. EDIT) это путем двойного выхода текста, как в _.escape(_.escape('<b><b')). Это приведет к выводу &amp;lt;b&amp;gt;&amp;lt;b.

Сэм Деуфель также предложил мне использовать кодировку base64. Я думаю, это тоже сработает.

EDIT: Я обнаружил, что заявления JavaScript, такие как alert() или document.write() также не могут быть вывешены через AJAX на хостинг серверов Namecheap. Так что двойной выход из него не всегда работает. Использование base64 или подобных методов, вероятно, лучше.

Смежные вопросы