系统设计登陆页面的时候,需要谨慎。因为登陆数据是在网络上进行传输,很可能中途被拦截。
最好的登陆是使用https,这样网络传输是安全的。google,baidu,alibaba都使用https的方式。
但一般的企业网站,不一定会去部署https。因此我们要考虑在传输过程中加密,避免登录数据太容易被他人破解。
用户在输入用户名,密码,点击登录,在提交数据前,我们应该考虑使用js对password进行加密(例如base64,hash等)。这样在网络上传输的是加密后的密码,给拦截者的破解工作带来一定难度。
示例代码:
<script type="text/javascript">
$(document).ready(function() {
$(‘#formlogin‘).submit(function(){
var password=$(‘#passwordId‘).val();
var encryptedPW = Base64.encode(password);
$(‘#passwordId‘).val(encryptedPW);
return true;
});
});
</script>
但以上这种只是简单的加密。
更完美点的方案是使用AES(Advanced Encryption Standard)方式进行加密。每次登录前,从服务器请求一个随机的key,把这个key当做AES的密钥,产生加密后的字符串。这样能够大大提高登陆的安全性。
不过也带来一个问题。就是需要有js和java支持相同加解密功能的函数。这说起来很简单,大家自己真正开发的时候才知道想要js和java兼容相同的加解密函数并不容易。js的跨浏览器支持、编码、java反解密、session问题,没有几天的调试是做不好的。
有兴趣者可以研究以下js类库。
https://github.com/ricmoo/aes-js