安全意识
你要离开家了, 所有的父母都会说,路上注意安全,可见安全是多么的重要!那么作为软件开发,有哪些危险使我们要知道并避免的呢?
下面我说一些基本的需要知道的安全攻击, 以及应对方案。
ps 作为一个安全小白,了解各种各样的防范方案真的太难了,我是真的水🤭。欢迎补充,以增长见识
XSS: 跨站脚本攻击
在用户可以输入的地方,并且将作为代码编译时,攻击者可以通过输入一个脚本地址的方式进行对页面注入脚本攻击。解决方式: 任何用户输入的地方都不要相信,对用户输入内容进行转义,如 <
使用转义字符串 <
代替。
CSRF: 跨站伪装请求攻击
在用户已登录的情况下,伪装用户的身份发起请求,进行相关攻击。解决方式,确认用户的身份。比较好理解的解决方式是: 二次确认,通过用户的二次确认确认请求方为真实用户。然后就是 X-Requested-With 请求标志,通过该请求头设置标志位 ajax
请求,可以一定程度阻止跨域的伪装。Anti-CSRF TOKEN
方案:通过服务端与客户端唯一的 token 值进行校验,可以看做一个暗号,让别人无法伪装!
网络劫持
Jsonp 劫持
我们都知道 jsonp
就是为了解决跨域的,如果传输信息设计到比较敏感的数据,那么别人可以很方便调用你的接口,获取你的数据,存储在自己的数据库中。解决方法,添加脚本可运行白名单,不要传输敏感信息。
HTTP 劫持。
HTTP 是明文传输,所以运营商可以知道你的代码是什么,然后在里面加一点小广告什么的,改变你的内容。解决方法就是使用 https 协议,可耻的运营商
DNS 劫持
通过域名解析我们才能找到对域名的服务器 ip 地址,劫持了 DNS 就可以给你返回一个错误的 ip 地址。在 dns 解析中,会先在本机搜索域名解析记录,无相关记录像 dns 服务商发起请求。所以要么你本地信息被篡改,要么服务商欺骗你。
转一篇 DNS 劫持详解链接
接口安全
数据库
数据库,插入数据库的参数,在执行 sql 的时候小心它把你整个数据库表给删了。这里的攻击类似 xss
攻击,通过传输、拼接一些字符串改变原本的 sql 语义
推送消息
比如短信发送消息,非常的有代表性。通过接口的参数传递,以及最后的发送内容,可以推测出你的推送内容的组合相关方式,就可以通过不良参数,很方便的发送的一些不合法的信息,或有毒链接给用户。解决方式就是不要相信用户传入的任何参数,对参数进行校验,发送内容尽量可选择匹配模式,如 code 值映射,对不合法的参数才有默认内容发送。
DDOS:分布式拒绝服务
就是很多请求大量涌入你的服务器,导致它们都没有空闲可以响应真正的用户请求。通过 TCP 连接,我们知道建立连接需要三次确认,一般攻击者可以伪造 ip, 发起大量连接请求,却又不确认 = = 导致服务器白白等待直到超时。其次可以借用别的用户,在一个大流量用户网站地方的某一个页面上了,通过 xss
默认发起对攻击网站的请求,并发送很大的数据,但每次发送很少的字节,这些用户就被当成了肉鸡,然后使其瘫痪。解决防范:增加机器, 对同一个ip 的过多请求进行防范。