HTTP добавляет вход GET дважды после включения SSL-сертификации (HTTPS) - PullRequest
0 голосов
/ 30 июня 2019

Мы обновили нашу хостинговую платформу с помощью новейшего технологического стека, включающего обновления PHP с версии 7.0 до 7.3 и включенную сертификацию SSL.

После обновления один из наших методов аутентификации пользователя не прошел, он работал до обновления платформы хостинга.

Вот копия кода PHP - codecheck.php,

<html>
<body>
<?php 
        $header = "Content-Type: application/json";
        header($header);

        $code = $_GET["code"];

        $codelistFile  = "./codelist.txt";
        $codeList = file( $codelistFile, FILE_SKIP_EMPTY_LINES);

        $codelistOutput = sprintf('%s%s', $code, "\r\n" );

        file_put_contents( $codelistFile, $codelistOutput, FILE_APPEND); 
?>
</body>
</html>

Вот результат codelist.txt до обновления платформы (с PHP версии 7.0)

65cafead50f6d205d66f90c74f1683344ca86c8cc60fc0370c278ecb880da5c8
6e85e436538335da64f6e9172bd4191686e591aa390cca69acb9346668a48bd5

Вот результат codelist.txt после обновления платформы (с PHP версии 7.3)

774cad9dd07761fe79db8baa9370a3dd84abca558c73c1f46b39e7c996a26d70?code=774cad9dd07761fe79db8baa9370a3dd84abca558c73c1f46b39e7c996a26d70
f10bb27fb82b0d539d3607012655012764c60794cc656aa6912eccc16d927a82?code=f10bb27fb82b0d539d3607012655012764c60794cc656aa6912eccc16d927a82

Здесь приведено значение кода, повторяемого вместе с самим текстом «кода», следовательно, значение «кода» не совпадает при сравнении.

Вот то, что я вижу в файлах журнала ssl_access, ssl_access.log-20190629: 79.1.200.79 - - [29 / Июнь / 2019: 07: 46: 24 +0100] "GET /codelist.php?code=ae21250db8b20cac3b7016e6d36a63de5846d537f032ed841a3e5c9121202cf4?code=ae21250db8b20cac3b7016e6d36a63de5846d537f032ed841a3e5c9121202cf4 HTTP / 1.1" 200 19 "-"«Регистрация»

Из этого файла журнала я вижу все запросы GET к серверу, которые дважды добавляют данные.

Я ожидаю, что это будет что-тонапример,

example.com /? code = 123456789, но не как example.com/?code=123456789?code=123456789

Я новичок в PHP и HTTPS, пожалуйста, помогитевыяснить проблему.Спасибо.

Вот обновление:

Как и предполагалось, проблема больше связана с перезаписью SSL,

Вот кодиз настольного приложения, к которому приложение будет подключаться и проверять код с сервером,

C ++:


CString RegistrationServer::Uri( CString page, CString code )
{
    CString sServer;

    sServer.Format("http://www.mywebsite,com/%s?code=%s", page, code); 

   //Here page=codecheck.php and code = 10;

    return sServer;
}

Вот журнал при отправке через настольное приложение,

27.62.66.34 - - [30 / Jun / 2019: 21: 55: 51 +0100] "GET /codecheck.php?code=10?code=10 HTTP / 1.1" 200 - "-" "Hack-o-Maticver 0.01 "

Я могу смоделировать тот же запрос через веб-браузер, как показано ниже,

https://www.mywebsite/codecheck.php?code=10

Вот журнал при отправкечерез веб-браузер

27.62.66.34 - - [30 / Jun / 2019: 21: 46: 28 +0100] "GET /codecheck.php?code=10 HTTP / 1.1" 200 - "- "" Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 74.0.3729.169 Safari / 537.36 "

Вы можете увидеть разницу в обоихзапрос http против https.

Когда запрос приходит сюдаВ настольном приложении данные кода добавляются дважды с использованием http.

Похоже, что изменение настольного приложения на https поможет решить проблему, но мы ничего не можем сделатьс настольным приложением.

Таким образом, мы должны ретранслировать исправления со стороны сервера, но наша хостинговая компания, похоже, не совсем понимает проблему.

Они продолжают анализировать проблему с последних 3 дней и предлагают некоторые исправления, такие как исправления вызовов googleapi, но это не помогает исправить нашу реальную проблему.

Я не уверен, что япропуская некоторые лучшие фразы / термины, чтобы лучше объяснить им эту проблему.Пожалуйста, дайте мне знать, если есть лучший способ объяснить проблему нашей хостинговой компании.

Если ничего не получается, могу ли я попросить их удалить сертификацию SSL?

Еще одно обновление:

Вот ответ от нашей хостинговой компании:


Мы сообщили об этом нашим инженерам, и они подтвердили, что это происходит только при вызове http, а не https.Вам нужно использовать https сейчас, так как вы включили SSL.

Latitude-E6540:~$ curl -I http://www.mywebsite.com/codecheck.php?code=10 
HTTP/1.1 301 Moved Permanently
Server: nginx/1.15.8
Date: Mon, 01 Jul 2019 11:03:47 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: https://www.mywebsite.com/codecheck.php?code=10?code=10
Strict-Transport-Security: max-age=15768000

Наши инженеры провели несколько тестов, и им не удалось выполнить репликацию, если они настроены на https.

Latitude-E6540:~$ curl -I https://www.mywebsite.com/codecheck.php?code=10 
HTTP/1.1 200 OK
Server: nginx/1.15.8
Date: Mon, 01 Jul 2019 11:03:35 GMT
Content-Type: application/json
Connection: keep-alive
Strict-Transport-Security: max-age=15768000

Вотжурнал с сервера,

213.171.217.184 - - [01 / Jul / 2019: 12: 03: 35 +0100] "HEAD /usage7.php?code=10 HTTP / 1.1" 200 - "-" "локон / 7.58.0"

Они подтвердили, что это выглядит как нечто с вашими локальными настройками программного обеспечения, так как это происходит только в случае «после отправки запросов через браузер, данные HTTP GET добавляются не дважды, а когда они передаются через их рабочий стол». программное обеспечение, данные HTTP GET добавляются дважды "


То, что я хотел у вас спросить, это ниже, сам вывод curl, где я вижу, что код добавляется дважды, когда выполняется запрос с http. Имеет ли это какой-либо ключ, чтобы определить, где находится проблема?

Расположение: https://www.mywebsite/codecheck.php?code=10?code=10

1 Ответ

2 голосов
/ 30 июня 2019

Как устранить ошибки обновления PHP:

Пост-событие, как найти, диагностировать и исправить ошибки, явно вызванные обновлениями PHP?

1) Проверьте своискрипты для ошибок PHP .

2) Проверьте изменения в файле php.ini, вызванные обновлениями.
В зависимости от системы и метода обновления, php.ini файл может быть скорректирован или даже новый по умолчанию один. Прочтите примечания по миграции , чтобы узнать, относится ли это к вам.Вам нужно будет просмотреть и изучить, что изменилось.Также вручную сравните ваш зарезервированный / резервный php.ini с текущим / новым живым.

3) Прочитайте заметки PHP Migration для каждой версии, которую вы обновили до до
(лучше всего делать от самых старых доnewest).

4) Прочитайте соответствующий PHP Changelog (s) и найдите в этом тексте (он слишком длинный), чтобы найти функции, которые, как вы обнаружили, не работают на шаге(1).


Для ваших конкретных случаев;Ваш код имеет очень низкое качество (вы отправляете HTTP-заголовки после отправки HTML-кода), поэтому проблема может быть вызвана обновлением PHP существующей ошибки с E_WARNING до E_ERROR , или похожие.

Код низкого качества легче всего исправить, включив error_reporting(E_ALL); в сценарии или php.ini и прочитав полученные журналы ошибок.

Удачи.


Обновление

Даже с этим протоколом SSL я могу видеть значение для кода дважды и одно и то же записанное в файл.Я ожидаю, что это будет что-то вроде
example.com/?code=123456789, но не как
example.com/?code=123456789?code=123456789.

Знак, который выиметь два ? означает, что вы должны исследовать код, который устанавливает значение code=, пожалуйста обновить ваш вопрос с этой информацией, как устанавливается код?

Ваша проблема может быть связана с маршрутизацией на вашем HTTP-хосте, Apache, Nginx и т. Д., Возможно, ваш HTTP-хост выполняет двойную загрузку, сначала страницу HTTP_, а затем перенаправляет на страницу HTTPS с добавленной исходной строкой запроса, добавляя ее дважды.

Я думаю, что одна или обе из перечисленных выше проблем лежат в вашей проблеме.

Обновление 2:

Комментарий от Thi :

Вот что ответила моя хостинговая компания: «Согласно нашим инженерам, причиной логов является то, что веб-сайт делает http (а не https) вызовы в Google API для CSS и других вещей. Они посоветовали, что вам нужночтобы убедиться, что любой код, которыйотносится к http переключается на https. "- На всех наших html-страницах есть строка ниже, и мы изменили ее на https, но это не помогло <link href="fonts.googleapis.com/…" rel="stylesheet" type="text/css">

Это относится к тому, что я упоминал выше о проверке маршрутизации вашего сервера на HTTP иПротоколы HTTPS.

Solutons:

1) Обновите все ваши исходящие ссылки до https:// (или просто //) так:

<link href="//fonts.googleapis.com/..." rel="stylesheet" type="text/css">

всегда будет надежно подключаться, если загружен надежно.

2) Использовать политику безопасности содержимого (CSP) Обновлять незащищенные запросы , чтобы сделать это;заставить все http:// ссылки на вашем сайте быть превращенными в https:// ссылки браузером клиента.

В вашем .htaccess или эквивалентном файле:

Content-Security-Policy: upgrade-insecure-requests;

Однако небезопасные вызовы сторонних ресурсов НЕ будут причиной добавления блока кода к вашему URL.дважды .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...