PHP标头重定向 - 为什么PHP官方开发团队无法使其更安全?

时间:2018-04-03 12:00:34

标签: php redirect

我们使用header();重定向用户。

这也常用于日志系统中。

我已经看到很多新的PHP开发人员使用 Code 1 ,但是因为你可以bypass the header redirect这是非常糟糕的安全代码。

问题:我很好奇知道为什么官方PHP团队无法将exit()添加到header()内部?

如果他们添加了它,那么header()在默认情况下也是明智的....但是目前我们需要添加exit() ....

代码01

if(if logging is fail){
   header("Location: http://example.com/erro.php");
}

代码02

if(if logging is fail){
   header("Location: http://example.com/erro.php");
   exit();
}

2 个答案:

答案 0 :(得分:3)

设计功能时使用的核心原则是单一责任原则。这意味着函数必须执行一个操作并且做得很好

header函数遵循此原则。 设置标题。它并不关心接下来会发生什么,这不是它的责任。这就是函数header从不结束脚本的原因。

如果您愿意 - 您可以创建自己的功能:

function setLocationAndExit($location) {
    header('Location: ' . $location);
    exit();
}

并在任何地方使用它。

答案 1 :(得分:0)

因为有时您可以使用header()而无需重定向,但可以稍微调整一下您的请求。

例如,您可以对您的服务器说'嘿,请不要将我的页面放在缓存中"对于您希望在未记录的情况下无法访问的路由。以Laravel为特色:

<?php

namespace App\Http\Middleware;

use Closure;

class DisableCache
{
    public function handle($request, Closure $next)
    {
        header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");

        return $next($request);
    }
}

?>