【发布时间】:2011-04-06 10:07:15
【问题描述】:
我通过检查我的会话值来保护我的页面。如果会话无效,除了更改标题位置之外,是否有更安全的方法来保护我的页面???我做对了吗???
我在每一页的顶部都有以下内容:
<?php
session_start();
//VERIFY LOGIN
$validkey = 'br1ll1ant)=&';
if ($_SESSION['valid'] != (hash('sha256',$validkey)) && $_SESSION['tokenconfirm'] != hash('sha256',$_SESSION['tokenID'])) {
header("location:/login/");
};
?>
【问题讨论】:
-
为什么要在会话中放置散列值?用户不能直接访问它们;我想他们无论如何都会提前知道这些值。那么有什么意义呢?
-
附注:实际上您的 header() 调用不符合 RFC。应该始终使用协议和主机名指定一个有效的 URL。关于会话中的哈希:我发现这是一个很好的做法,因为这样攻击者可以在不知道密码的情况下读取会话文件。 (攻击者可以通过其他错误适当地读取系统上的任意文件 - 以防万一!);)
-
在会话中散列密码仍然不会改变密码以明文形式存储的事实。如果一个漏洞允许攻击者查看临时会话变量(通常是世界可读的),那么同一个攻击者应该能够读取 Web 根文件(通常是世界可读的),包括包含密码的 PHP 源代码。跨度>
-
实际上,Location 标头不保护任何东西。虽然脚本终止确实如此。注意 knittl 的回答。大师的方法是另一种方式。
标签: php session login header location