exit()和header()函数的可靠性用于系统安全性

时间:2014-03-29 22:24:18

标签: 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>
<body>
// members only content here
</body>
</html>

所以,我发现使用头文件或退出语句进行重定向(通过根据if-else语句的值回显特定文档)是一种万无一失的方法,但使用头文件比回显更清晰heredoc中的整个网页。 (我也知道我应该使用HTTPS来提高安全性。)

我有两个问题。

  1. 浏览器对Location标头的支持有多广泛?我知道我不能通过阅读类似的问题来单独使用它,但无论如何我都不会介意。

  2. 此外,使用php exit()函数维护系统安全性的可靠性如何?它是否总是有效,或者当安全​​真的重要时,我应该回应HEREDOC吗?

1 个答案:

答案 0 :(得分:1)

现在几乎所有现有浏览器都支持Location;但是,您应该注意随之发送的状态代码(第3个参数为header)。有关选择哪些代码的详细信息,请参阅rfc2616 sec10; 303似乎更正确但302更好地支持。

exit()的可靠程度,取决于您的服务器的可靠性。如果执行了PHP代码,exit()将始终中止执行并将结果发送到浏览器。但是,错误配置的Web服务器可能会直接暴露您的PHP代码而不是执行它。 This comment解释了如何缓解此问题。

至于遵守规范,rfc2616 sec10说:

  

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

您可以不使用exit(),而是使用die('<a href="foo.php">You are redirected.</a>')来实现此目的。