42 张图带你揭秘后端技术都要学啥?( 七 )


说个简单的道理,我们设置密码的时候,通常会使用生日?手机号?什么love?什么520?,这些组合是有限的,我们就可以建立一个比如生日和密文的映射表,然后通过XX彩虹表就可得到密码明文 。

42 张图带你揭秘后端技术都要学啥?

文章插图
单向散列加密
所以,通常的情况,使用单向散列加密的时候需要加一点盐,这样一来,hack拿到密文,不知道盐,无法建立彩虹表,就更难还原明文 。
应用场景:通常应用在用户密码加密 。其加密和校验过程如下:
42 张图带你揭秘后端技术都要学啥?

文章插图
应用场景
我们通过上图来回顾一下一个网站的注册登录模块中的用户部分,用户注册需要输入用户名和密码,我们一般不会将裸露的将密码直接存放在数据库,不然被脱裤直接算裸奔 。
所以,用户输入密码,应用服务器获得密码后,调用单向散列加密算法,将加密的密文存放于数据库,用户下一次登录的时候,用户依然会输入密码 。
只是到了Web服务器后,Web服务器会对输入的密码再进行一次单向散列加密,然后和数据库中取出来的密文进行对比,如果相同,则用户的验证成功,通常这样的方式可以保证用户密码的安全性,当然如果加一点盐,会增加破解的难度 。
对称加密
对称加密是通过一个加密算法和密钥,对一段明文进行加密后得到密文,然后使用相同的密钥和对应的解密算法进行解密得到明文 。
42 张图带你揭秘后端技术都要学啥?

文章插图
对称加密
举个例子,我们不会将银行卡卡号,有效期等直接存储在数据库,而是会通过先加密,然后存储于数据库 。
使用的时候必须对密文进行解密还原出明文 。这个时候使用对称加密算法,存储的时候加密算法进行加密,使用的时候解密算法解密 。
非对称加密
非对称加密是说使用一个加密算法和一个加密秘钥进行加密得到密文,但是在解密出明文的时候,其加解密密钥和加密密钥不同,通常加密密钥叫做公钥,解密密钥叫做私钥 。
42 张图带你揭秘后端技术都要学啥?

文章插图
非对称加密
其实我们常用的 HTTPS 即是非对称加密的应用场景 。用户在客户端进行通讯的时候,对数据使用的加密密钥和加密算法进行加密得到密文,到了服务端以后,使用解密密钥和算法进行解密得到明文 。
但是非对称消耗的资源比较多,所以HTTPS不是每次请求响应都采用非对称加密,而是先利用非对称加密,在客户单和服务器之间交换一个对称加密的密钥,然后每次的请求响应再使用对称加密 。
综上,使用费对称加密保证对称加密迷药的安全,使用对称加密密钥保证请求响应数据的安全 。
HTTP攻击与防护
HTTP明文协议,咋们通过嗅探工具就可以清晰查看会话内容,这也是hack攻击门槛最低的方式 。很常见的也就是SQL注入和XSS攻击 。
SQL注入是攻击者在提交请求参数的时候,包含了恶意的SQL脚本:
42 张图带你揭秘后端技术都要学啥?

文章插图
SQL注入
server处理计算后向数据库提交的SQL如下:
Select id from users where username='Mike';
如果是恶意攻击,提交的HTTP请求如下:
http://www.a.com?username=Mike';drop table users;--
此时最终生成的SQL是:
Select id from users where username='Mike';drop table users;--';
查询完就直接给删除表了 。怎么防护?
比较常用的解决方案是使用PrepareStaement预编译,先将SQL交给数据库生成执行计划,后面hack不管提交什么字符串也只能交给这个执行计划执行,不会生成新的SQL,也就不会被攻击啦 。
XSS攻击
跨站点脚本攻击,攻击者通过构造恶意的浏览器脚本文件,使其在其他用户的浏览器运行进而进行攻击 。
假设小A将含有恶意脚本的请求给360服务器,服务器将恶意的脚本存储在本地的数据库,当其他正常用户通过这个服务器浏览信息的时候,服务器就会读取数据库中含有恶意脚本的数据并呈现给用户,在用户正常使用浏览器的时候达到攻击的目的 。
防御:
比较常见的是在入口处对危险的请求比如drop table等进行拦截,设置一个Web应用防火墙将危险隔离 。
42 张图带你揭秘后端技术都要学啥?


推荐阅读