小机灵鬼|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请求如下:
?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应用防火墙将危险隔离 。


推荐阅读