用RSA||AES加密POST请求,让访客安全登录!

 前一阵子CSDN密码被爆到网上,之后又是接二连三的各种帐号密码泄露事件,不得不让人对互联网的安全做出深思。

 虽然这个跟今天要说的内容关系不是很大,但是网络安全确实是一个不容忽视的问题。

 下面要说的就是如何让访客登录网站输入密码之后,进行传输更加安全。

 在说明这种方法的具体实现方案之前,不得不分析一下普通的解决方案,和目前常用的解决方案。

  一 般的网站采用的方式是将用户的帐号密码直接通过POST请求发送到服务器,这种方法是最传统最原始的实现方法。这种方法的安全性一般,如果数据在 传送过程中被恶意截获,则POST的数据可以直接反向解析出来。尤其是在使用一些代理服务器登录网站的环境,这种方案非常不安全。代理服务器可以截获 POST数据,然后将其中的帐号密码提取出来,如果再建立一个数据库,保存一下,就是很简单的事情了。

  一 些网站管理员看到了第一种方案的不足之处,也对用户账户密码的安全性有所担忧,因此采用了一种双重验证的方式。将用户的帐号和密码连接取MD5, 然后存到数据库。其实我感觉这种方法并未从根本上解决数据传输过程中被截取的问题。只是在服务器端的安全性提高了一些,然而如果数据在POST提交的过程 中被截取,照样是可以欺骗服务器的完成登录认证的。所以这种方法没有解决数据传输过程中被截取的问题。

  加密方案,也就是今天要说的解决方案。之前跟一些人讨论过这个问题,对于一些小型的站点来说,其实没必要使用这么复杂的解决方法,因为这个不仅耗费时间去思考这个问题,就算是写出来了每次用户登录认证的时候服务器所要做的计算量是巨大的,与站点的总体开销来说得不偿失。

下面就来说一下这种方案的具体实现方法。

  必备知识:

1.AES和RSA的算法

2.RSA和AES PHP和javascript实现方法

3.AJAX后台交互

4.MD5 javascript加密实现

 

  以上都可以在网上找到现成的代码,而且比较多,下面只说思路。

首先页面载入,在捕获用户将要输入重要数据的时候(如onchange事件)执行ajax后台交互向服务器发送请求,请求RSA公钥。

服务器向客户端返回RSA公钥并在服务器端数据库中对应用户下保存私钥

客户端接收用户的RSA公钥并保存到cookies(只要能够保存到用户本地就可以)里

当 用户输入完毕要传送的重要数据,如密码,点击提交之后,读取保存到本地cookies里的RSA公钥,通过客户端的javascript将用户的 数据加密,然后通过POST请求发送数据到服务器(如果在安全性要求较高的场合,可以将MD5加密的过程在客户端通过javascript完成,之后直接 传输MD5加密之后的加密数据)。

服务器接收到用户经过RSA公钥加密的数据,从数据库中读取临时存储的RSA私钥进行解密,得到解密之后的数据。

下面是整个流程的实现示意图,仅供参考

 

上述方法给出的是一种基于我个人的一种解决方法,适合范围需要大家自己做一下考虑。

文章原创,转载请注明出处。欢迎各位前来交流!

posted @ 2012-01-17 15:51  VierAmt  阅读(5350)  评论(16编辑  收藏  举报