目标
一个简单的登录页面,只检查用户凭据,如果它在数据库中更正,则允许用户登录并检查其他页面,如果已经提供了sessoin,则允许用户在其他页面中执行任何操作将其重定向到用于身份验证的登录页面。
连接已设置且工作正常:
会话已经开始:
用于检查输入和echo变量的简单检查功能:
function Check_Param($val){
$value1=addslashes($val);
$string1=htmlspecialchars($value1);
$string2=strip_tags($string1);
return $string2;
}
现在用户将通过表单进行身份验证并运行此功能以检查他是否可以登录页面并传递$ _session ['username'] AND $ _session ['password'] AND $ _session ['level']下一页并存储到浏览器告诉获取destroy命令。
public function auth($name = '', $password = '', $level=''){
$sql = "SELECT COUNT(*) FROM dab_users WHERE `name`=:name AND `password`=:password AND `level`=:level ";
$result = $this->conn->prepare($sql);
$passme = hash_value(Check_Param($this->password));
$result->execute(array(
":name" => Check_Param($_POST['name']),
":password" => Check_Param($_POST['passwrod'),
":level" => Check_Param($_POST['level'])
));
$num = $result->fetchColumn();
if($num==1){
$_SESSION['level'] = $_POST['level'];
$_SESSION['is_log'] = 1;
header("location:home/index.php");
}else {
$result->execute(array(
":name" => Check_Param(''),
":password" => Check_Param(''),
":level" => Check_Param('')));
echo "wrong password and user";
}
}
这个工作正常,我可以在索引页面视图上给出正确的密码后访问页面,在此认证之后用户可以访问这里是我设法限制未知用户或空白会话的方式或正确的此页面会话。
的index.php:
<?php
if(!empty($_SESSION['is_log'] && !$_SESSION['level'] == 101){
header("location:../login.php");
} else {
?>
<h1>header + content + footer</h1>
<?php } ?>
问题: 在提交具有正确用户名和密码以及数据库级别的表单后,我将登录到索引页面,在回显会话中,我看到级别和 is_log 在aut类上设置了哪个。并且索引页面上的(if)也可以工作,如果没有登录则重定向用户...
答案 0 :(得分:1)
您的身份验证系统有效,但如果您无法检查每个页面上的控制安全性,该怎么办?您应该了解front controller pattern,看看它是否更适合您的需求。
与前端控制器模式相关,我建议你也阅读奇妙的symfony文档中的那两章(它们与symfony有些相关,但总体上讨论了HTTP / PHP以及框架的方式和原因> 最终使你的代码受益):
如果您担心安全性(当然您应该这样做),请查看OWASAP top 10 web vulnerabilities(每个Web开发人员都必须阅读)。
具体问题是会话劫持问题,您可以找到更多here。