【问题标题】:PHP authentication securityPHP 身份验证安全性
【发布时间】:2017-04-15 11:28:27
【问题描述】:

我为我的 web 项目构建了一个基本的 php 身份验证系统。我只想问它是否安全,因为我只是担心会话劫持和 sql 注入问题。代码如下。

用户表单字段包含电子邮件的 user_email 字段名称和密码的密码字段名称

PHP user validation code

<?php
  session_start();

     // // check if user session is set or not
   if(isset($_SESSION['user'])){
        // session is set redirect to user home
        header('Location: appointments.php');
   }
   // // checking if request method is post
    if( $_SERVER['REQUEST_METHOD'] === "POST" ){

    if(isset($_POST['user_email']) && isset($_POST['password']) ){
    // including database file for database connection
    include 'database_connection.php';

    $stmt = $conn->prepare("SELECT * FROM user WHERE email = ? AND password = ?");
    $stmt->execute([ $_POST['user_email'] , $_POST['password'] ]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC); 
    if( $stmt->rowCount() > 0 ){            
            $_SESSION['user'] = $result['first_name'];
            $_SESSION['user_first_name'] = $result['first_name'];
            $_SESSION['user_last_name'] = $result['last_name'];
            $_SESSION['user_email'] = $result['email'];
            $_SESSION['user_contact'] = $result['contact'];
            header('Location: user_appoinment_application.php');
            die();
    }
    else{
            header('Location: appointments.php');
            die();
    }
}
else{
        header('Location: appointments.php');
        die();
}


}
 // request method get
   else{
      header('Location: appointments.php');
 }  

为了检查用户是否授权访问特定页面,我将以下用于检查用户是否登录的代码放在页面顶部

 session_start();   
    // checking the user is logged in or not
   if(!isset($_SESSION['user_first_name'])){
        // session is set redirect to doctor home
         header('Location: appointments.php');
    }

我知道防止 sql 注入攻击使用 sql 准备语句,但我不知道如何防止会话劫持。现在我只想知道上面的代码是否安全。在此先感谢

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为它要求审查工作代码,而不是具体问题。您可能会在codereview.stackexchange.com 上获得更好的回复 - 但请在发布之前查看他们的帮助中心。

标签: php security sql-injection session-hijacking


【解决方案1】:

为了防止会话劫持,您需要注意几件事。

会话端劫持

这是在网络上使用数据包嗅探器来监控网络活动的地方,我们可以专注于两方之间的通信,并希望通过这种方式窃取会话 cookie。这可以通过在网站上的任何地方启用 SSL 来避免。有些人只在网站的身份验证部分使用 SSL。这还不够好,它需要在网站上随处可见。

会话固定

当网站在 URL 中或通过 POST 数据接受 SID 时,就会发生这种情况。恶意用户通常可以通过在 URL 中使用他们选择的 SID 向受害者发送电子邮件来设置会话 ID。即http://example.com/?SID=I_WILL_GET_YOUR_ID。现在恶意用户只是等待受害者点击发送给他/她的链接,一旦受害者登录,恶意用户就可以使用上述 URL 劫持会话。

跨站脚本

恶意用户欺骗受害者运行看似属于服务器的代码,因此允许恶意用户编写特定代码来窃取会话 cookie。

结论

一方面,在整个网站上使用 SSL 可以防止会话端劫持。你必须小心的另一部分是 XSS 漏洞利用。我建议查看https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html 因为它有一个很好的清单,列出了编写客户端代码时要考虑的事项。

我希望这会有所帮助。

【讨论】:

  • 谢谢先生,所以我的代码在会话安全方面并不安全,那么 sql 注入预防呢?
  • 您正在使用 PDO 并在准备语句中绑定参数,我目前的知识表明这将防止 SQL 注入,因为查询和数据分别发送到 SQL 服务器。跨度>
  • 非常感谢先生您的建议对我更有帮助
猜你喜欢
  • 2014-04-30
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2023-03-31
  • 2011-09-24
  • 2015-12-18
相关资源
最近更新 更多