Creating a secure login using sessions and cookies in PHP

前端 未结 5 1339
暖寄归人
暖寄归人 2020-12-05 01:08

I am making a login script that I would like to be as secure as possible. Problem is, security seems to be a never ending battle. So essentially, I am looking for suggestion

5条回答
  •  天涯浪人
    2020-12-05 01:44

    Stop what you are doing. Do not check the user-agent or the ip address. The user-agent is an attacker controlled variable and checking this value does not increase the security of this system. The ip address will change for legitimate reasons, such as if a user is behind a load balancer or TOR.

    A session id must always be a cryptographic nonce. In php just call session_start() and then start using the $_SESSION super global. PHP takes care of all of this for you. If you want to improve php's session handler, use the configurations. Enable use_only_cookies, cookie_httponly and cookie_secure. Also setting the entropy_file to /dev/urandom is a good idea if you are on a *nix system but if your under windows then your in trouble.

    For instance to authenticate a user:

    //In a header file
    session_start();
    ...
    if(check_login($_POST['user_name'],$_POST['password'])){
       //Primary key of this user
       $_SESSION['user_id']=get_user_id($_POST['user_name']);
       $_SESSION['logged_id']=True;
    }
    

    And to verify if a user is logged in:

    //in a header file
    session_start()
    ...
    if(!$_SESSION['logged_id']){
       header("location: login.php");
       die();//The script will keep executing unless you die()
    }
    

    To improve this system read OWASP A9 and use HTTPS for the entire life of the session. Also read OWASP A5: CSRF aka "session riding" and OWASP A2: XSS because they can both be used to compromise a session.

提交回复
热议问题