07 会话安全

安全451 字

■ 防止会话劫持

场景: 系统登录入口。

说明: 在应用程序进行身份验证时,建议持续使用HTTPS连接,认证站点使用HTTPS协议。如果连接是从HTTP跳转到HTTPS,需要重新生成会话标识符。禁止在HTTP和HTTPS之间来回转换,这可能会导致会话被劫持。

Nginx 强制使用 https

server {
    listen 80;
    server_name www.maksim.website;
    rewrite ^(.*) https://$server_name$1 permanent;
}

■ 会话标识符安全

场景: 系统登录验证过程。

说明: 会话标识符应放置在HTTP或HTTPS协议的头信息中,禁止以GET参数进行传递、在错误信息和日志中记录会话标识符。

PHP示例: 使用cookie保存会话标识符。

<?php
    session_start();
    $username = $_POST['username'];
    $password = sha1($_POST['password']);
    $remember = $_POST['remember'];
    $validatecode = $_POST['validateCode'];
    $ref_url = $_GET['req_url'];
     
    if ($validatecode != $_SESSION['checksum']) {
        exit("验证码不正确");
    } elseif ($username == '' || $password == '') {
        exit("用户名和密码都不能为空");
    } else {
        $row = getUserInfo($username, $password);
        if (empty ($row)) {
            exit("用户名和密码都不正确");
        } else {
            $_SESSION['user_info'] = $row;
            if (!empty($remember)) {
                setcookie("username", $username, time()+60*60*24, "/home/www/");
            }
            if (strpos($ref_url, "login.php") === false) {
                header("location:" . $ref_url );
            } else {
                header("location:main_user.php");
            }
        }
    }
?>
          
        

■ Cookie安全设置/会话有效期

场景:用户通过认证后生成会话标识符时进行安全配置。

说明:设置会话Cookie时,正确设置“HttpOnly”属性(禁止程序如JS脚本等读取Cookie信息);“Secure”属性(禁止Cookie通过HTTP连接传递到服务器端进行验证);“Domain“属性(跨域访问时可指定的授权访问域名) ,“Path“属性(授权可访问的目录路径)。会话应在平衡风险和功能需求的基础上设置有效期。定期生成一个新的会话标识符并使上一个会话标识符失效,这可以缓解那些因原会话标识符被盗而产生的会话劫持风险。

PHP示例:在生成cookie时进行配置。

<?php
    class CookieUtil {
        function getCookie($cName) {
            if (isset($_COOKIE[$cName])) { 
                return $_COOKIE;
            } else {
                return false;
            }
        }
        function getValue($cName) {
            if (isset($_COOKIE[$cName])) { 
                return $_COOKIE[$cName];
            } else {
                return false;
            }
        }
        function addCookie($cName, $cValue) {
            setcookie($cName, $cValue, time()+3600*24, "/", ".maksim.website");
            return true;
        }
        function updateCookie($cName, $cValue) {
            setcookie($cName, $cValue, time()+3600*24, "/", ".maksim.website");
            return true;
        }
        function elCookie($cName, $cValue) {
            setcookie($cName, "", time()-3600, "/", ".maksim.website");
            return true;
        }
    }
?>             

■ 会话注销

场景:会话注销时处理。

说明:注销功能应用于所有受身份验证保护的网页,用户登出后应立即清理会话相关信息,终止相关的会话连接。

PHP示例:在生成cookie时进行配置。

<?php
    session_start();
    if ($_GET['action'] == "logout") {
        unset($_SESSION['user_info']);
        echo '注销登录成功!';
        header("location:login.php");
    }
?>
        
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见