这里是 php 新手。 下面是我用来构建登录系统以输入 mypage.php 的代码
它工作得很好,但它很天真,任何人都可以在 url 中键入 mypage.php 并避免登录页面。 我怎样才能使它更安全?
非常感谢!
if(isset($_POST['submit'])) {
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
$sql = "SELECT * FROM login WHERE user='".$user."'";
$res = $this->new_db->select($sql);
$row = $this->new_db->get_row($res);
if (isset($row)) { //user exists?
if($row["pass"] == $pass){
$_SESSION['userId'] = $row['user'];// TRYING WITH SESSIONS
header("Location: mypage.php");
} else {
echo "wrong pass";
}
} else {
echo "user does not exist";
}
}
然后在 mypage.php 中
if(isset($_SESSION['userId'])) {
//contents
} else {
echo "there's an error";
}
它正在打印“有一个错误” 为什么?? 非常感谢
最佳答案
三件事:
- 不要以明文形式存储密码。鉴于此代码,我只能假设这就是您正在做的。您应该存储经过哈希处理的密码,对用户输入的密码进行哈希处理,然后进行比较。
- 您有一个 SQL 注入(inject)漏洞。任何时候您从用户那里接收到用于数据库查询的输入,至少您应该将其包装在
mysql_real_escape_string()
中。 - 在登录页面(在任何登录页面)上,您需要跟踪用户是否登录。一个简单的方法是让登录表单设置一个
$ _SESSION
表示用户当前登录状态的值。然后在需要用户登录的任何页面上,检查该值。如果存在,则他们之前登录过。如果不存在,则他们还没有登录。它很简单,但足以满足您的需求。
关于PHP登录系统,如何保护它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898256/