一、写在前面
新入职的公司是做C端产品的,比较注重网路安全这一块,所以要求前后端交互报文加解密、签名。这里总结下在落地过程中怎么做的以及一些启发。
二、前后端加解密
(一)防重放攻击
防重放攻击指的是中间人拦截交互报文然后对请求进行重放进行的一种攻击。解决方案一般两种:
- 签名+时间戳
- 签名+时间戳+nonce
缺点是签名流程照样可以模拟,因为对于前端来说,前端代码是没有绝对安全的。如果是app破解难度还稍微高一些,但h5或pc则最多只能混淆进行处理。
(二)防中间人攻击以及传输加密
1.https
https自带加密,但缺点有:
- 建立连接过程中的中间人攻击无法防范
- 用浏览器抓包或者用Fillder还是能够分析出传输明文
2.代码层面仿https加密
对称加密+非对称加密,为什么不单独用非对称,因为单独用非对称加密效率会慢。
具体思路为:
客户端生成随机AES密钥,并用RSA公钥(说是公钥但只是相对的,这里的公钥同样不能泄露)对AES密钥进行加密,AES密钥用于对传输的数据进行加密,然后服务器使用RSA私钥对AES密钥进行解密,用得到的AES密钥对数据进行解密得到真正的数据。
在代码层面可以利用springboot的RequestBodyAdvice和ResponseBodyAdvice扩展来实现消息体的加解密,业务代码侵入小。
三、感受
自我感觉前后端加密签名意义并不是很大,因为签名必须得通过真正意义上的私钥签名,但前端没有私钥可言,只是说通过这套机制可以稍微增加些破解难度,要想绝对安全,将这套加解密签名应用于服务端交互更有意义。
四、网络攻击名词扫盲
XSS攻击
指植入恶意脚本。
两种方式,一种是反射性,一种是存储型,反射型主要通过脚本参数植入,然后服务器恰巧会原样返回这个参数在浏览器端,存储型则是通过某种方式比如发帖回复,参数携带xss脚本,此时服务器会将内容存储到库中,然后在某个页面返回。
解决方式有对接口参数进行转义处理,或者前端用一些防xss注入组件。
CSRF攻击
指恶意网站植入恶意链接,引导用户携带自己的cookie请求我们的服务器,解决方式有判断referer请求头禁止跨域、cookie加上httpOnly属性、禁止窃取cookie、随机token或提交请求加上验证码。
SQL注入
#{}
DDos
具体有三种方式:
DNS Query Flood攻击(DNS查询攻击)利用大量不存在的域名洪水攻击dns服务器,因为是不存在的域名,所以dns会一层层查询到根域名服务器.
SYN Flood攻击 三次握手中,在第三次握手的时候,客户端不发送ack,服务器会重试SYN+ACK,浪费了服务器资源。
CC攻击 利用代理服务器发起http攻击
总结:即控制大量肉鸡或http代理,发起大量syn,dnsQuery,http请求
解决方式主要是,自己服务器设置IP高频访问限流,黑名单、白名单。最好是利用第三方网盾,比如DDoS高防IP,可以把攻击流量都导入到云厂商的高防IP的服务器上去,他们有专业的技术方案和算法来防御。
文件上传漏洞
指黑客绕过上传文件的一般校验如扩展名校验、mime校验,然后上传恶意文件。
攻击方式有:
- 上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;
- 上传文件是WebShell时,攻击者可通过访这些网页后门,执行命令并控制服务器;
- 上传文件是其他恶意脚本时,攻击者可直接执行脚本进行攻击;
- 上传文件是恶意图片时,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行;
解决方案有:
- magic number判断文件类型(文件开头9字节,魔数) 校验白名单
- 限制文件大小,重命名
- 压缩文件,比如图片可以利用开源包如imagemagick对文件进行缩放,破坏其原本二进制结构
- 把文件上传目录设置无脚本执行权限;
- 使用沙箱(sandbox)/强制访问控制(mandatory access control)方案,关闭对应服务进程所有不必要的路径访问、文件读写和进程执行权限。;
- 使用最低级别的帐号启动web容器进程;
- 对上传的文件进行重命名并隐藏上传后的文件名;
- 直接用OSS。
来源:oschina
链接:https://my.oschina.net/u/4101481/blog/4293406