安全问题

微服务

安全问题

1. 如何防范常见的Web攻击、如何防范SQL注入

1.1 DoS和DDoS攻击
Denial of Service拒绝服务,造成远程服务器拒绝服务的攻击行为。其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。

1.2 CSRF攻击
Cross Site Request Forgery跨站请求伪造。
HTTP Referer是header的一部分,当浏览器向web服务器发送请求时,一般会带上Referer信息告诉服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。可以通过检查请求的来源来防御CSRF攻击。

1.3 XSS攻击
Cross Site Scripting跨站脚本攻击。
恶意攻击者往Web页面里注入恶意Script代码,当用户浏览这些网页时,就会执行其中的恶意代码,可对用户进行盗取cookie信息、会话劫持等各种攻击。
开发需尽量避免Web客户端文档重写、重定向或其他敏感操作,同时要避免使用客户端数据,这些操作需尽量在服务器端使用动态页面来实现。

1.4 SQL注入攻击
SQL Injection,应用程序在向后台数据库传递SQL(Structured Query Language,结构化查询语言)时,攻击者将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
除过使用preparedStatement之外,可以使用数据转义来防范sql注入。此外可以通过限制用户的输入来防范。

参考:
《Web常见几种攻击与预防方式》

2. 服务端通信安全攻防

2.1 Base64加密传输
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,但是它其实并不是一种用于安全领域的加密解密算法。

但是,Base64编码的数据并不会被人用肉眼所直观的理解,所以也有人使用Base64来进行加密解密,这里所说的加密与解密实际是指编码和解码的过程。

这种,加密传输的安全性是非常低的,Base64加密非常容易被人识别并解码。

2.2 DES对称加密
DES也是一种非常常用的加密方案,我们会将敏感的信息在通信过程中通过DES进行加密传输,然后在客户端和服务端直接进行解码。

此时,作为读者的你,可能会有个疑问,那如何保管密钥呢?其实,想想,答案就复出水面了,因为客户端和服务端都需要进行解码,所以两者都要存一份密钥。其实,还有一种方案是通过服务端下发,但是下发的时候通信的安全性也是没有很好的保障。

所以,DES对称加密也是存在一定的安全隐患:密钥可能会泄漏。这边,举个真实的案例,某个APP的资源不错,同事想抓包分析下其服务端通信的信息结构,但是发现它既然全部采用了DES加密方案,本来想放弃了,但是我们又回头想想客户端肯定需要密钥对接口的加密的内容做解码才能正常展现,那么密钥肯定在app包中,因此我们又对app进行了反编译,结果成功的获取到了密钥,对服务端通信的加密信息进行了解码。

2.3 AES对称加密
AES和DES类似,相较于DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高。一般情况下,用于文件的加密。我们之前做个不准确测试,AES和DES分别对一个大文件加密,AES的速度大概是DES的5倍。(因为基于工具和环境问题,这个数据不是很准确哟)。

仍然存在一个相同的问题:密钥可能会泄漏。因此,保管好密钥很关键。

2.4 升级到HTTPS
这个可以参考上篇博客《HTTPS原理剖析与项目场景》的内容。

HTTPS的价值在于:

内容加密,第三方无法窃听。
身份认证,一旦被篡改,通信双方会立刻发现。
数据完整性。防止内容冒充或者篡改。
这个方案,没法保护敏感数据,如果需要对敏感数据进行加密,还是需要考虑加密方案。

2.5 URL签名
基于OAuth2协议,进行URL签名。这个方案,有很多话题可以分享,后面另开一篇来详细讲解。

值得注意的是,URL签名只能垂直权限管理,但没法保护敏感数据,如果需要对敏感数据进行保护,还是需要考虑加密方案。

2.6 双向RSA加密
RSA双向认证,就是用对方的公钥加密是为了保密,这个只有对方用私钥能解密。用自己的私钥加密是为了防抵赖,能用我的公钥解开,说明这是我发来的。

例如,支付宝的支付接口就是非常典型的RSA双向认证的安全方案。此外,我们之前的教育资源、敏感验证码出于安全性考虑都借鉴了这个方案。

参考:
《服务端通信安全攻防详解》

3. HTTPS原理剖析、降级攻击、HTTP与HTTPS的对比

Https的简介及其与Https的对比请参见之前的部分

降级攻击:
ssl v3.0是一个存在了很久的协议了,现在大多数浏览器为了兼容性都会支持这个协议,但是并不会首先使用这个协议,中间人攻击者可以驳回浏览器协商高版本协议的请求,只放行ssl v3.0协议。

参考:
《常见的HTTPS攻击方法》

你可能感兴趣的:(安全问题)