【发布时间】:2017-09-08 19:07:30
【问题描述】:
所以,我有一个包含href 的图片链接:
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 还是更多?
-
无限循环 URL 几乎是
www.target.com?param1=abc&param2=xyz&param1=abc&param2=xyz&param1=abc&param2=xyz&param1=abc&param2=xyz...等等。有时我有更多,有时我有更少。 -
你是在http还是https下运行?
标签: php laravel laravel-5.1