Php 启用SSL认证(HTTPS)后HTTP附加GET输入两次

Php 启用SSL认证(HTTPS)后HTTP附加GET输入两次,php,c++,http,https,Php,C++,Http,Https,我们已经用最新的技术栈升级了我们的托管平台,其中包括从7.0版到7.3版的PHP更新,并启用了SSL认证 在升级之后,我们的一个用户身份验证方法失败了,它一直在工作,直到主机平台升级 这是PHP代码的副本-codecheck.PHP <html> <body> <?php $header = "Content-Type: application/json"; header($header); $code = $_G

我们已经用最新的技术栈升级了我们的托管平台,其中包括从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>
以下是平台升级后的codelist.txt结果(使用PHP 7.3版)

这里是代码值与“代码”文本本身一起重复,因此比较时“代码”的值不匹配

以下是我在ssl_访问日志文件中看到的内容,ssl_访问日志-20190629:79.1.200.79---[29/Jun/2019:07:46:24+0100]“GET/codelist.php?code=ae21250db8b20cac3b7016e6d36a63de5846d537f032ed841a3e5c9121202cf4?code=AE21250DB8B2CAC37016E6D36A63DE5846D537F032ED841A3E5C91202CF4 HTTP/1.1“200 19”-“注册”

从这个日志文件中,我可以看到对服务器的所有GET请求都会两次附加数据

我想会是这样的

example.com/?code=123456789 但并非如此 example.com/?code=123456789?code=123456789

我对PHP和HTTPS非常陌生,请帮助我解决这个问题。多谢各位

这里有一个更新:

正如所建议的,问题似乎更多的是SSL重写

这是来自桌面应用程序的代码,该应用程序将在其中与服务器连接并检查代码

C++:

这是通过桌面应用提交的日志

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版本0.01”

我可以通过web浏览器模拟相同的请求,如下所示

这是通过web浏览器提交的日志

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将有助于解决此问题,但这是桌面应用程序无法解决的问题

所以我们必须从服务器端进行修复,但我们的托管公司似乎并不完全理解这个问题

他们从过去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=10http/1.1“200-”-“curl/7.58.0”

他们确认,这似乎与您的本地软件设置有关,因为这似乎仅在“通过浏览器提交请求后,HTTP get数据不会附加两次,但通过其桌面软件提交请求时,HTTP get数据会附加两次”的情况下才会出现


我想问的是,从下面的curl输出本身,我可以看到当使用http发出请求时,代码被附加了两次,这是否有任何线索来发现问题所在

地点:

如何解决PHP升级错误: 事件后,如何查找、诊断和修复显然由PHP更新引起的错误

1)。

2)检查更新导致的对
php.ini
文件的更改。

根据您的系统和升级方法,
php.ini
文件可能会被调整,甚至是一个新的默认文件。看看这是否适用于你。你需要回顾和探索发生了什么变化。还可以手动将您的保留/备份
php.ini
与当前/新的实时备份进行比较

3)进进出出
(最好从最老的到最新的进行)。

4)并在该文本(它是looong)中搜索在步骤(1)中发现失败的功能。


针对您的具体情况;您的代码质量非常低(您在发送HTML代码之后发送HTTP HEDER),因此问题很可能是由PHP将一个已经存在的错误从E_WARNING升级到E_error或类似错误引起的

通过在脚本或
php.ini
中图灵并读取生成的错误日志,最容易修复低质量代码

祝你好运


更新 即使有了这个SSL日志,我也可以看到代码的值两次,并将相同的值写入文件。我希望它类似于
example.com/?code=123456789,而不是
example.com/?code=123456789?code=123456789

您有两个
的符号表示您应该探索设置
code=
值的代码,请使用此信息更新您的问题,如何设置代码

您的问题可能与HTTP主机路由、Apache、Nginx等有关,您的HTTP主机可能是双重加载的,首先是HTTP页面,然后再重定向到HTTPS页面,并附加原始查询字符串,从而附加两次

我认为以上一项或两项是你的问题所在

更新2:

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;
}

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
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
<link href="//fonts.googleapis.com/..." rel="stylesheet" type="text/css">
Content-Security-Policy: upgrade-insecure-requests;