PHP - 重定向期间URL格式不正确

时间:2017-04-12 20:29:00

标签: php laravel laravel-5.1

所以,我有一个包含此 trainTask <- makeClassifTask(data = no_out_pso,target = "response_grade") Clslearn = makeLearner("classif.xgboost", predict.type = "prob") Clslearn = makeMulticlassWrapper(Clslearn, mcw.method = "onevsrest") Clslearn = setPredictType(Clslearn, "prob") rdesc = makeResampleDesc("CV", iters = 3) r = resample(Clslearn, trainTask, rdesc, measures = list(mlr::acc, mlr::multiclass.au1p, mlr::multiclass.au1u)) print(r) 的图片链接:

href

这样处理(我使用laravel):

http://www.app.com/link?target=www.target.com&param1=abc&param2=xyz

大多数时候,这都有效。但是,最近,我们遇到了一个问题,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错误。

问题在于它是随机发生的,我真的不知道在哪里检查,因为我在414 Request URI too long声明之前添加了一个检查器。

return

它没有记录一次点击。即使我们的测试人员遇到了这个错误。

接收应用程序是否有可能以某种方式破坏URL? 我应该注意哪些信息?你之前见过这样的问题吗?

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); } 是否可能导致此问题,并且我的检查工具无法按预期工作(但是,我测试了它并记录了我的测试网址)。

任何有关此事的帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

假设并发出http_build_query:

嗯,您可以尝试的一种尝试是在没有$request->excepthttp_build_query的情况下重写代码。 如果您没有任何特殊原因可以使用http_build_query我建议您使用$request->input

$ request-&gt;输入的示例:

function out (Request $request) {
    $url = $request->target;

    $param1 = $request->input('param1', '');
    $param2 = $request->input('param2', '');

    if (!empty($param1) || !empty($param2)) {
        $url .= '?';
    }

    if (!empty($param1) && !empty($param2)) {
        $url .= 'param1=' . $param1 . '&param2=' . $param2;
    } else {
        $url .= !empty($param1) 'param1=' . $param1 : '';
        $url .= !empty($param2) 'param2=' . $param2 : '';
    }

    return redirect($url);
}

解决方案有点冗长,但有了这个,你应该确保100%不是生成冗余的代码。

荒谬,遥远的可能性:

我要尝试的第二件事是检查你的日志系统。例如,如果您在apache下运行,则应该在access.log下(或/var/log/apache2/下使用nginx)有一个名为/var/log/nginx/的文件。

在那里,您应该拥有所有http请求的历史记录。

也许有一些带有多个参数的有线请求可能来自一个奇怪的IP地址。 如果是这种情况,则表示某些公司出于安全原因正在监控和测试网站(可能带有奇怪的参数) 如果是这种情况,我想你是在http下,你应该切换到https。

无论如何,使用新代码,您应该确保代码并能够调查系统的任何其他部分。