我需要一个只显示授权用途的页面。所以我打算使用会话。 只有一个用户,密码不会改变。所以我打算做这样的事情
<?php
session_start();
if(isset($_POST['password']) )
{
if($_POST['password']=="myhashedpassword" )
{
// auth okay, setup session
$_SESSION['user'] = $_POST['username'];
// redirect to required page
header( "Location: index.php" );
} else {
// didn't auth go back to loginform
header( "Location: loginform.html" );
}
} else {
// username and password not given so go back to login
header( "Location: loginform.html" );
}
?>
我想知道这种方法的安全性。我不需要完全安全......希望它公平。
答案 0 :(得分:3)
总的来说,我认为这会令人不悦,但并不是完全没有安全感,因为他们没有看到明文密码。它消除了有人访问数据库以获取哈希值然后尝试强制它的需要。所以更容易一点。
此外,如果($ _ POST [&#39;密码&#39;] ==&#34; myhashedpassword&#34;),这将无效,因为您正在将散列密码与帖子中的明文密码进行比较。所以你真的需要做
if( hash_algo($_POST['password']) == "myhashedpassword" ){//stuff}
我的建议是将此作为普通身份验证执行,或者为有权访问该页面并检查该页面的用户帐户添加标记。
答案 1 :(得分:3)
我不愿意这样做的三个原因:
$_POST['password']
)与常量字符串进行比较。即使常量字符串经过哈希处理,您的密码也不会,因此您现在可以有效地将哈希值作为密码处理。 Pass the hash。==
to compare hashes in PHP会导致不可预测的结果。答案 2 :(得分:2)
永远不要硬编码密码。一些原因是: