所以在畸形,我有了这个href
图片链接:PHP - 网址被重定向
http://www.app.com/link?target=www.target.com¶m1=abc¶m2=xyz
这是像这样处理(我用laravel):
function out (Request $request) {
$url = $request->target;
$qs = $request->except('target');
if (!empty($qs)) {
$url .= strpos($url, '?') !== false ? '&' : '?';
$url .= http_build_query($qs);
}
return redirect($url);
}
大多数时间,这工作。然而,最近,我们遇到了一个问题,其中param1
和param2
被附加到URL中,看似无限循环,导致我们遇到了414 Request URI too long
错误。
的问题是,它发生如此随意,我真的不知道在哪里检查,因为我的return
语句之前加了检查。
if (substr_count($url, 'param1') > 1) {
$file = storage_path() . '/logs/logger.log';
$log = "[ " . date("d-m-Y H:i:sa") . " ] [ {$request->ip()} ] - {$url} \n";
file_put_contents($file, $log, FILE_APPEND);
}
而且它还没有记录一次命中。即使在我们的测试人员遇到错误之后。
是否有可能接收应用程序以某种方式打破了URL? 我应该寻找哪些信息?你以前见过这样的问题吗?
难道是http_build_query
可能会导致这种情况,并且我的检查器不能按预期工作(但是,我测试了它并记录了我的测试URL)。
任何关于此事的帮助都会很大。
你能给我们一个无限循环URL的例子吗?你为什么选择使用http_build_query?你只有param1和param2或更多? – borracciaBlu
无限循环URL几乎就是'www.target.com?param1=abc¶m2=xyz¶m1=abc¶m2=xyz¶m1=abc¶m2=xyz¶m1=abc¶m2=xyz ...'等等。有时我有更多,其他时间我有更少。 – clueless
你在http或https下运行吗? – borracciaBlu