Мы обновили нашу хостинговую платформу с помощью новейшего технологического стека, включающего обновления 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