Php exit()和header()函数对系统安全性的可靠性

Php exit()和header()函数对系统安全性的可靠性,php,location,exit,Php,Location,Exit,好的,我这里有一些代码: <?php session_start(); if (!isset($_SESSION['blah'])) { header('Location: foo.php'); exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset = 'utf-8' /> <title>Check Login</title> </head&g

好的,我这里有一些代码:

<?php session_start();
if (!isset($_SESSION['blah'])) {
header('Location: foo.php'); exit();

}
?>

<!DOCTYPE html>
<html>
<head>
<meta charset = 'utf-8' />
<title>Check Login</title>
</head>
<body>
// members only content here
</body>
</html>

检查登录
//这里只有会员的内容
因此,我找到了一种简单易行的方法,可以使用header或exit语句进行重定向(通过根据if-else语句的值回显特定文档),但是使用header要比在herdoc中回显整个网页干净得多。(我也知道我应该使用HTTPS来增加安全性)

我有两个问题

  • 浏览器对
    位置
    标题的支持有多广泛?我知道我不能通过阅读类似的问题来单独使用它,但我也不介意知道

  • 另外,使用php的
    exit()
    函数维护系统安全性的可靠性如何?它总是有效的吗?或者当安全真的很重要的时候,我应该只响应一个HEREDOC吗


  • 事实上,现在存在的任何浏览器都支持
    位置
    ;但是,您应该注意随它一起发送的状态代码(第三个参数为
    标题
    )。有关选择哪种代码的更多信息,请参阅;303看起来更正确,但302得到了更好的支持

    exit()
    的可靠性实际上取决于服务器的可靠性。如果执行PHP代码,
    exit()
    将始终中止执行并将结果发送到浏览器。但是,配置错误的Web服务器可能会直接公开PHP代码,而不是执行它。说明如何缓解此问题

    至于以下规格,则表示:

    除非请求方法是HEAD,否则响应的实体应该包含一个简短的超文本注释,并带有指向新URI的超链接


    您可以通过不使用
    exit()
    而使用
    die(“”)
    来实现这一点。

    世界上*每个*浏览器都支持
    位置
    标题。它是第一个HTTP规范的一部分。所以是的,它总是有效的。至于
    退出
    是否安全。。。什么意思?它在该点停止执行。。。。我不知道这与系统安全性有什么关系?所以我猜exit()会阻止服务器发送特定页面的其余部分,这是万无一失的。我现在正在看退出的PHP规范,这将清除一大堆内容。请注意,尽管大多数(所有?)浏览器都支持
    Location
    头中的相对URI,如您的示例所示,但HTTP规范要求它是绝对的。