最近有做一些反思,曾经项目的一些反思。发现做的项目在安全方面是不合格的。也想到之前做的项目后端人员是不合格的。自己当然也是有待改进。
#XSS
含义:XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
分类:
1:反射性XSS,这种是在请求参数上添加脚本,然后后台有解析这个参数,并且没对恶意脚本过滤,以达到攻击的目的。这个相对存储型来说杀伤力小一点。因为很难影响到别的用户。
2:存储型XSS,这种是对前端的接受参数全盘存储,并没有做任何恶意脚本的过滤,比如文章的评论,加入前后端都没对恶意脚本做过滤或者防范措施,那么含有这条评论的页面都会执行恶意脚本,小一点黑客可能只是做个恶作剧,大一点那就是偷偷地跑恶意脚本,盗取用户信息,做一些非法操作,后果无法想象。
对于这类攻击,应该最稳妥的方法是前后端都做一个脚本过滤,比如把<、>、"、'等特殊字符换成实体> <等;或者禁用某些标签以及属性。对于前端常见框架,比如vue,v-text是已经做了xss防范,然而v-html是存在风险的。所以应该减少使用v-html,然而某些场合必须使用没得办法,那这个时候就要对v-html='data'中的data做脚本过滤。从数据源,比如后台数据,后端人员应该把数据返回给前端时,应该要已经做好了过滤,前端在做一层过滤,我们实际生产者使用的是xss库https://jsxss.com/zh/index.html,这个比较成熟。原理的话就是我们上面说过的。
总结:前端提交做处理,后端入库做处理。前端显示做处理。设置HttpOnly(js无法操作cookie)
#CSRF
含义:CSRF攻击的全称是跨站请求伪造( Cross-Site Request Forgery),是一种对网站的恶意利用。
简单一点就是仿造身份,让服务端无法分辨真实用户,达到破坏的目的。比如A需要去B网站干一些坏事,但是A没有B网站的用户信息,所以他就没法做具体的事,但是他知道,在B网站转钱类似于https://B.com?money=1000&for=chasen;所以他可以在自己的网站Aweb上创建一张图片src='https://B.com?money=1000&for=chasen';然后把自己的网站https://Aweb.com链接发给B用户,诱导他点击,B经不住诱惑该死的点了一下,钱就转到我手中了。对于这样类似的操作,一般实际上会做一下一些操作:
1、验证请求头中的referer,如果是非本域的看做CSRF攻击处理,但是referer可以伪造,非安全
2、提交操作,尽量使用post强求,post构造成本大于get
3、将cookie设置为HttpOnly
4、增加token,不存在于cookies中,服务端验证token,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝该请求。token可以作为请求参数,也可以作为自定义的请求头中。
5、校验token+用户ip地址。
#SQL注入
含义:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
前后端过滤和校验。详情参见https://www.cnblogs.com/cmt110/p/7569042.html
all:开发注意之,方能减少漏洞。