Почему какой-то текст не может быть отправлен через форму? - PullRequest
0 голосов
/ 06 июля 2018

Отправка следующей формы заканчивается одним символом #, показанным в браузере MS Edge (Microsoft Edge 42.17134.1.0, Microsoft EdgeHTML 17.17134), и мы можем ожидать, что конечный результат должен быть OK!. Ожидаемый результат показан в других популярных браузерах. Обтекание формы с правильным скелетом HTML5 с помощью Doctype и т. Д. Не помогает. Почему какой-то конкретный текст не может быть отправлен через форму? Ну, строго говоря, это возможно, если я не коснусь $_POST или я не хочу включать этот метатег на мою веб-страницу, куда отправляется форма. Я могу получить доступ к почтовым данным через php://input, и все в исходном виде, но это не решение. Проблема была обнаружена в моей собственной структуре управления контентом, где некоторые теги (включая метатеги) отправляются через форму в скрипт PHP.

<?php
if(isset($_POST['test'])){
    echo "OK!";
} else{
    echo '
        <form action="/" name="template" method="post" accept-charset="UTF-8">
        <textarea name="test"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></textarea>
        <input type="submit" />
        </form>
    ';
}
?>

Естественно, что исходный код сохраняется и в UTF-8. Пожалуйста, отведите меня от этого пути, если я делаю что-то запрещенное или потенциально неправильное. В конце концов, я хочу отправить полный раздел заголовка HTML методом POST.

Вот мои вопросы:

  1. Почему текст, включающий <meta charset="UTF-8" />, не может быть отправлен должным образом методом post? Здесь не возникает вопросов об обработке данных с помощью PHP-скрипта.
  2. Есть ли причина искать проблему не в исходном коде, а в установке веб-сервера? Но если да, то почему он работает с другими браузерами?
  3. Могут ли HTTP-запросы по какой-то причине существенно отличаться, что может вызвать описанную проблему?
  4. Откуда приходит # Это может быть веб-сервер или браузер Edge?

Я использую XAMPP 7.2.4 в Windows 10.

1 Ответ

0 голосов
/ 06 июля 2018
  1. Не все должно быть разрешено отправлять с формой пользователем, но любой тег не является причиной для отказа от браузера или сервера httpd.
  2. Веб-сервер может отклонить какой-либо запрос, особенно по загруженному модулю mod_rewrite с неправильной конфигурацией,
    1. ... но какой смысл писать # вместо сообщения об ошибке.
  3. Основной страх состоит в том, что HTTP-запросы могут отличаться, может быть, какой-то механизм против XSS случайно что-то поймает? Но, как показала жизнь, проблема здесь была как-то связана с кешем, языком контента по умолчанию и сохраненными куки.

Исходная проблема вопроса касается только XAMPP <=> MS Edge и не имеет ничего общего с PHP-скриптами или кодировкой UTF-8. В сообществе установлено, что метатег с набором символов должен использоваться в качестве механизма безопасности, но чего не следует ожидать, так это того, что этот метатег может потенциально повлиять на показ содержимого сайта или просто #. Следует подчеркнуть, что похожая проблема заключается в том, что не появляется с другими тегами. Простейший случай, когда сценарий можно повторить, - это метод GET, отправляющий данные формы даже в файл HTML.

http://127.0.0.1/?data=%3Cmeta+http-equiv%3D%22%22+%2F%3E

У других приличных установок сервера Apache таких проблем нет (я пробовал apachelounge в Windows и установки Apache в разных дистрибутивах linux). Поэтому я утверждаю, что воспроизведение проблемы может быть затруднено и может зависеть от конкретной установки.

Самое простое решение заключается в использовании другой версии XAMPP или другой реализации сервера httpd .

Тем, кто мне любопытен, до сих пор не объяснено, почему на сервере XAMPP возникает проблема с запросами только от MS Edge. Типичный HTTP-запрос

GET /?data=%3Cmeta+http-equiv%3D%22%22+%2F%3E HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

, кажется, не имеет ничего необычного. Существует очевидная разница User-Agent с MS Edge

GET /?data=%3Cmeta+http-equiv%3D%22%22+%2F%3E HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134
Accept-Language: pl-PL
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Host: 127.0.0.1
Connection: Keep-Alive
Cookie: PHPSESSID=*********

и Cookie , и Accept-Language : только pl-PL. К моему удивлению, оказалось, что очистка данных браузера решила мою проблему.

...