PHP登录系统,如何保护它

标签 php security session authentication

这里是 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";

}

它正在打印“有一个错误” 为什么?? 非常感谢

最佳答案

三件事:

  1. 不要以明文形式存储密码。鉴于此代码,我只能假设这就是您正在做的。您应该存储经过哈希处理的密码,对用户输入的密码进行哈希处理,然后进行比较。
  2. 您有一个 SQL 注入(inject)漏洞。任何时候您从用户那里接收到用于数据库查询的输入,至少您应该将其包装在 mysql_real_escape_string() 中。
  3. 在登录页面(在任何登录页面)上,您需要跟踪用户是否登录。一个简单的方法是让登录表单设置一个 $ _SESSION 表示用户当前登录状态的值。然后在需要用户登录的任何页面上,检查该值。如果存在,则他们之前登录过。如果不存在,则他们还没有登录。它很简单,但足以满足您的需求。

关于PHP登录系统,如何保护它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6898256/

相关文章:

PHP - 使用一次性密码本来存储加密密码

c - 如何利用 Format-String 漏洞?

php - 在 codeigniter 中对 join 语句应用条件

php - 如何重新初始化 Zend_Form_Element_Hash?

php - unix 时间戳和 php

java - 使用 Apache 的 HttpClient 与使用 JDK 的 URLConnection 从 applet 中连接到 URL

node.js - 使用express-session和express-socket.io-session NodeJs时出错

php - MySQL 搜索查询类似

security - 有没有办法绕过 SSP(StackSmashing Protection)/Propolice?

asp.net-mvc - Cookie 过期或 session 超时过早