登录验证以及安全问题:
1、请求接口全部用post方式,在后端判断请求方式是否为post

2、登录密码等敏感信息要加密后传输,如用RSA(支付宝里可下载公私钥生成工具),客户端公钥加密,传到服务器后再用私钥解密:

//js公钥加密
function encrypt(data)
{
    //需要引入插件jsencrypt.js 下载地址http://download.csdn.net/detail/codercwm/9770398

    var RSA_PUBLIC_KEY = '';//私钥写在这里

    var obj = new JSEncrypt();

    obj.setPublicKey(RSA_PUBLIC_KEY);

    var data = obj.encrypt(data);

    return data;
}

//php解密函数
function decrypt($data) {
    $data = base64_decode($data);

    //读取私钥
    $key_private = file_get_contents('./rsa_private_key.pem', 'r');

    //进行解密
    if(!openssl_private_decrypt($data, $data, openssl_pkey_get_private($key_private))) {
        return false;
    }

    return $data;
}

3、登录验证问题
(1)前后端代码放在同一个服务器,依旧可以使用session保存登录信息;
(2)在登录过程中,如果密码是明文提交,传输过程中可能会被拦截,即使加密后传输,也可用拦截到的已加密密码直接请求服务器进行登录,而且因为加密的代码是在客户端js中的,黑客可以修改客户端js,用拦截到的已加密的密码绕开此加密代码请求服务器进行登录,这是非常危险的,所以我想出了如下方案:

4、关于拦截和伪造cookie进行登录的预防:
(1)用户登录后,由于是用cookie记录sessid,如过请求过程中cookie被拦截,黑客就可以利用此cookie中的sessid在另一台电脑上进行登录,直至用户退出登录服务器session被销毁,这样是非常危险的,所以我想出了如下方案:

5、结合4、5两种方案,我的做法如下:

03-31 09:57