首先来说,目前常用的方式有两种,
-
浏览器端安全控件,淘宝、银行等均采用该方式,优点是安全系数高,缺点是投资较大;
-
使用ssl方式完成登陆,安全系数一般,投资较低(需要申请ssl证书)
至于使用js在post前加密从原理上来说是根本没有意义的,就像你说的,js是明文的,所以破解并不难。
如果你要开发的应用对安全性有要求,建议采用ssl方式即可,如果对安全性要求极高,选择安全控件。
事实上,对于80%的网站,登录信息安全问题并不重要,尤其是抓包导致泄露的几率极低。因为抓包这个事其实技术门槛还是很高的,如果盗取的账号没有极高的价值很少有人会去做。就像微博,QQ等,服务商也只是提供了各种密保,而没有针对账号提交过程提供太大的保护。
99%的账号丢失问题来自于木马,通过监控键盘事件完成盗取,而这种行为js根本无能为力。甚至前面说过的两种加密方式也同样。
对于普通的网站,通常的手法就是要求认证用户的安全邮箱,当密码丢失的时候可以通过安全邮箱重置密码,这就足够了。不建议尝试额外的手机找回密码、***绑定之类的功能,除非您的网站已经足够强大,否则有一点安全知识的人都不会在莫名其妙的网站上输入自己的手机号和***的。同理,就算你提供了安全控件,很多人可能也不会选择安装,因为你没办法证明自己提供的安全控件是安全的。
不要把抓包想的太容易哦,谁知道用户什么时候会登录,从什么地方过来,发到哪里,总不能24小时盯着吧?费这么大劲偷到了,连几千块钱都不值,他不是白费力气吧?能用这种方式盗取信息的人,你觉得他会对万把块的小钱感兴趣吗?除非是有人花钱请他对你的网站恶意攻击。也简单,平时注意备份就好了。和洪水地震的几率差不多。
【余天升的回答(49票)】:
看到上面几位的回答,我真心觉得,当前信息安全保护的意识过于低下,连一些基本的保护措施都能够被认为是「没有必要」。同意@任冬 的观点,都在偷懒,不重视安全,没有什么理由好开脱的。
如同@lumin 所说,信息安全的保护确实分成两个部分,端的安全(可以具体到客户端和服务器端)和链路的安全,也就是传输过程中的安全。
一般我们可以认为,端都是可信的。对于服务器端,你愿意使用这个公司提供的服务,一个隐含的条件就是相信这个提供服务的公司,所以服务器端可以认为是比较安全的。
而客户端,你愿意使用这台电脑,也表明你认为这台电脑是比较安全的。只有对于一些安全级别更高的业务,比如在线交易,才需要额外的再对客户端的安全性做一次校验。但是,要真正的保证客户端安全是很难的,需要使用像可信计算这样的技术。常见的能够很大程度保护客户端安全的设备,比如iOS设备、PSP之类的游戏机,也是能够遭到破解,所以这个问题至今没有比较完善的解决方案。
通常我们认为,自己肯定不会给自己的电脑装上木马,网吧的老板一般不会跟黑客一伙,也不会在网吧的电脑上装木马。所以保护的焦点,应该集中在通信的链路上,而不是端上,而且,在链路上进行窃听,比在大部分时候在端上进行攻击都来得有效和难以发现。
一个很简单的例子,如果我用笔记本在一个外租房比较密集的小区,建立一个无密码的WiFi热点,保证很多试图蹭网的人连接上来,然后如果我用WireShark(或者用WinPcap写一个过滤程序),监听WiFi收到转发的数据包,那一定能截获大批的用户名和口令,至少,如果他上知乎,用户名和口令我一定能得到。这个例子也说明了,各位千万不要贪图小便宜而去蹭别人的WiFi,这是一个对自己来说很危险的行为。