您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
Web前端密码加密是否有意义?
密码,后端,明文Web前端密码加密是否有意义?
发布时间:2016-12-08加入收藏来源:互联网点击:
下面我举个经典的Alice、Bob、Mallory三人通信的例子来说明一下:
假设有两个人Alice(前端)和Bob(服务端)要进行通信,另外Mallory(中间人)在中间随时准备窃听他们的会话信息。
Http环境
前端不加密的情况下:
Alice向Bob请求建立通信,这时候Mallory在中间窃听到了Alice的请求,于是伪装成Bob与Alice建立连接,Alice发送密码就会被Mallory拿到造成密码泄露。
前端加密的情况下:
因为前端代码不安全,所以我认为一般不会采用对称加密的方式。这里我就大胆首先假设一下前后端加密算法是非对称加密算法,比如RSA。
Alice向Bob请求建立通信,并且要获取Bob的密钥对的公钥用于密码加密;
此Mallory窃听到了Alice的请求,于是将自己的公钥给了Alice,并与Alice建立连接;
Alice用Mallory的公钥将密码加密后传给了Mallory,Mallory收到加密数据后拿私钥解密得到密码。
有人说既然Http不安全,那我们就用安全的Https进行通信嘛!
Https环境
其实Https环境也不能保证绝对安全,在某些特定情况下也会存在中间人攻击。
说两种比较常见的攻击方式:
方式一:SSLSniff
攻击流程:
Alice首先向Bob请求进行Https会话,并要求Bob返回Https公钥;
Mallory窃听到Alice的请求,于是伪装成Alice将请求转发给Bob;
Bob并不会知道请求到底是来自于Alice还是Mallory,于是将公钥发送给了Mallory;
Mallory用自己的公钥替换了Bob的公钥返回给了Alice;
Alice用自以为是Bob的公钥对密码进行了加密,并发送给Bob;
Mallory窃听到Alice的请求后拿自己的私钥进行解密得到密码;
此方式是利用了Alice无法确定拿到的公钥是来自于Bob这一漏洞。
但是也不用太过担心,要想实际发起攻击也不是那么简单的,有一个证书信任的问题,因为Mallory自己伪造的证书默认是不受浏览器信任的,需要客户端手动信任才能实施攻击。
方式二:SSLStrip
这个攻击相比SSLSniff要复杂一点,并且不需要伪造证书就可以达到攻击目的。
SSLStrip攻击也需要一些特定场景才可以实现:我们一般在浏览器中输入网址时并不会在链接前面加https://,因而向服务器发送了Http请求,服务器会返回302状态码并重定向到Https,而SSLStrip正是利用这一点实施的中间人攻击。
攻击流程:
Alice由于没有加https://,所以无意中向Bob发起了建立Http会话的请求;
Bob收到Alice的请求后返回一个包含302状态码重定向到Https链接的信息;
Mallory窃听到Bob的返回结果,将其中重定向的Https链接改成了Http链接,并转发给了Alice;
Alice收到已经被Mallory篡改过的返回后以为已经与Bob建立了安全的Https会话,其实只是与Mallory建立了不安全的Http会话,发送密码的话自然会被Mallory拿到。
总结
综上分析,我认为前端密码加密既有意义,也无意义。有意义在于加密过程就相当于多加一道锁,肯定会提升一定的安全性;无意义在于前端密码加密在提升安全性的同时并不能绝对保证密码不被窃取。
“分享干货,收获快乐”
我是萌新程序员成长日记,喜欢我的文章欢迎 转发 及 关注,我会经常与大家分享工作当中的实用技巧与经验。
回答于 2019-09-11 08:43:50
加密这个说法非常笼统,具体来说,一般分下面几种情况
一 你想对前端的一些机密数据,页面进行加密,防止非法人员获取。
这种情况,前端加密毫无意义,因为你只有同时在前端写入解密程序,其他的人才能看得到,否则所有人不管非法不非法都无法获取信息。这就等于你必须把锁和钥匙绑在一起,在好的锁也没用。
对于一些安全性要求特别高的web,唯一的方法就是借助额外的硬件实现。比如利用Ukey 实现加密。
二 你想呵呵前端代码加密,防止别人获取
这个同样是毫无用处的,因为浏览器是不可能识别加密的网页的,所以你必须同时提供解密程序。
所以,一般重要的js源程序,只需要做混淆就行,加密多此一举,毫无意义。
三 对前段和后端通讯的过程加密
这个是有意义的,并且推荐这样做。
最好的解决方法是采用非对称加密算法。前端只保存公匙,用来对向后台传输的数据加密。 而后端只保存私匙,用来解密。
由于非对称算法的特点,你即使获得了钥匙页无法进行解密,所以是比较安全的。
当然,虽然无法解密,但是可以获取数据包,伪造伪造请求,再发送给服务器,这个就叫中间人攻击。
防止中间人攻击得方法就是,把你传送的数据在加密前,先用md5进行签名,然后把签名和密文一起传送回后端。后端解密后,再校验签名,即可判断信息是否被篡改。
如果信息不能篡改,入侵者还可以截获你的数据包,原封不动的发回给服务器。这个叫做重放攻击
避免重放攻击的方法,是在前端加密请求时候,在请求中插入一个时间戳。后端判断收到请求的时间间隔,超过一定时间的请求即为重放攻击。
当然,传输最佳的加密方案还是使用Https
回答于 2019-09-11 08:43:50
明文传输的是第三方的密码:Apple ID 与密码。因为这个是用户在另一个网站的数据,如果加密之后,虽然攻击者可以通过重放攻击重新进行登录,但是加密情况下无法获取到原始的 Apple ID 的账号和密码。不加密的话如果HTTP请求被拦截的话就可以知道用户的原始密码了,这是一件要不得的事情。于你网站本身来说,这个问题应该不大,因为如果被拦截了,不管怎样拦截者只要查看源码,模拟请求之后都能登陆上。但是因为很多用户目前来说基本上来说不会一个网站一个密码,而是对应着多个账户的。所以如果知道了用户的原始密码,结合社会工程学,能干的事情就挺多了。
加密更安全,不是为了完全阻挡攻击,而是为了提高攻击的成本,降低被攻下的概率。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |