我们已经用最新的技术栈升级了我们的托管平台,其中包括从7.0版到7.3版的PHP更新,并启用了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>
下面是代码列表的结果。平台升级前的txt(使用PHP 7.0版)
65cafead50f6d205d66f90c74f1683344ca86c8cc60fc0370c278ecb880da5c8
6e85e436538335da64f6e9172bd4191686e591aa390cca69acb9346668a48bd5
下面是代码列表的结果。平台升级后的txt(使用PHP 7.3版)
774cad9dd07761fe79db8baa9370a3dd84abca558c73c1f46b39e7c996a26d70?code=774cad9dd07761fe79db8baa9370a3dd84abca558c73c1f46b39e7c996a26d70
f10bb27fb82b0d539d3607012655012764c60794cc656aa6912eccc16d927a82?code=f10bb27fb82b0d539d3607012655012764c60794cc656aa6912eccc16d927a82
因此,当代码本身的值与代码的值进行比较时,代码本身的值不匹配。
以下是我在ssl_访问日志文件中看到的内容,即ssl_访问。log-20190629:79.1.200.79---[29/Jun/2019:07:46:24+0100]“GET/codelist.php?code=ae21250db8b20cac3b7016e6d36a63de5846d537f032ed841a3e5c9121202cf4?code=ae21250db8b20cac3b7016e6d36a63de5846d537f032ed841a3e5c9121202cf4 HTTP/1.1“200 19”-“注册”
从这个日志文件中,我可以看到对服务器的所有GET请求都会两次附加数据。
我想会是这样的,
实例com/?代码=123456789
但并非如此
实例com/?代码=123456789?代码=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-Matic ver 0.01”
我可以通过web浏览器模拟相同的请求,如下所示,
https://www.mywebsite/codecheck.php?code=10
这是通过网络浏览器提交的日志,
27.62.66.34---[30/Jun/2019:21:46:28+0100]“GET/codecheck.php?code=10http/1.1”200-““Mozilla/5.0(Macintosh;英特尔Mac OS X 10_14_5)AppleWebKit/537.36(KHTML,像Gecko)Chrome/74.0.3729.169 Safari/537.36”
你可以看到这两个请求的区别
http
vs
https
.
当请求来自桌面应用程序时,使用http将代码数据附加两次。
看来,将桌面应用程序更改为
https
将有助于解决这个问题,但这是我们不能用桌面应用程序做的事情。
所以我们必须从服务器端转发修复程序,但我们的托管公司似乎并不完全理解这个问题。
从过去三天开始,他们一直在分析这个问题,并提出了一些解决方案,比如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=10http/1.1“200-”curl/7.58.0”
他们确认,这似乎与您的本地软件设置有关,因为这似乎只在“通过浏览器提交请求后,HTTP get数据不会附加两次,但通过其桌面软件提交请求时,HTTP get数据会附加两次”的情况下才会出现
我想问你们的是,从下面的curl输出本身,我可以看到当使用http发出请求时,代码被附加了两次,这是否有任何线索来发现问题所在?
地点:
https://www.mywebsite/codecheck.php?code=10?code=10