0

我为我的 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 准备好的语句,但我不知道如何防止会话劫持。现在我只想知道上面的代码是否安全。提前致谢

4

1 回答 1

2

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

会话端劫持

这是在网络上使用数据包嗅探器来监控网络活动的地方,我们可以专注于两方之间的通信,并希望通过这种方式窃取会话 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 ,因为它有一个很好的清单,列出了编写客户端代码时要考虑的事项。

我希望这有帮助。

于 2017-04-15T11:56:36.727 回答