Web 开发常见安全问题
参考:https://blog.csdn.net/fengyinchao/article/details/50775121 或 https://my.oschina.net/zhangstephen/blog/645011#OSC_h3_1
常见前端安全问题:
1、XSS攻击 (跨站脚本攻击):https://blog.csdn.net/liningaa/article/details/79512649?utm_source=blogxgwz5 (包括解决方案) 或 https://www.cnblogs.com/anic/archive/2012/07/12/2588812.html(图解xss攻击)
概念:往Web页面里注入恶意Script代码,用户浏览这些网页时,就会 执行其中的恶意代码,可对用户进行盗取cookie信息、会话劫持等各种攻击。
XSS实现的方式有:https://blog.csdn.net/wuyoudeyuer/article/details/104988940
a、反射型XSS:一般是 动态网页技术(如:jsp、php等) 才会出现的 xss攻击。【需要服务器 程序 配合】
说明:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。
b、存储型XSS:动态网页技术 上出现的可能比较大;前后端分离项目中,接口返回脚本字符串的话,前端基本不会使用evel()这种函数特意去执行的。【需要 服务器的存储功能 配合】
说明:存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码
解决:对于外部 的内容,不要随意 以 DOM 形式 插入 到DOM 中。对于要 以 DOM 插入 的内容,一定要 校验 内容是否合法。
c、DOM XSS:js中没有使用evel函数,要注入可执行的js脚本。只能通过DOM加载脚本才可以实现。如script、img 等标签【完全是客户端的事情】
说明:DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
解决:对于外部 的内容,不要随意 以 DOM 形式 插入 到DOM 中。对于要 以 DOM 插入 的内容,一定要 校验 内容是否合法。
2、CSRF攻击(跨站请求伪造):参考链接同上
问:cookie是不能跨域访问的,为什么会有csrf攻击 ?https://www.bilibili.com/video/BV1iW411171s?from=search&seid=1937005802712073454&spm_id_from=333.337.0.0
答:https://blog.csdn.net/oqqaKun1/article/details/83507522 (解释起来,就是cookie在浏览器中并没有严格的跨域)
攻击说明:
对 get 请求进行 CSRF攻击:
1、正规的 A 网页有一个 get 类型 的 转账接口。 2、A 网站已经登录了,浏览器 会留下这个 A 站相关的 cookie 信息,一般是登录 凭证。 3、B网站 页面中通过 img 标签调用 A 网站的 转账接口。这时,img 标签请求A网站会携带之前A站登录的cookie信息。这样B站就可以正常请求A站的请求看。 利用的漏洞是:script,img或者iframe 等,发送的请求是可以跨域的。并且请求时,浏览器会附带上之前站点,登录用户的授权cookie信息。
对 post 请求进行CSRF攻击:
1、正规的 A 网页有一个 post 类型 的 转账接口。
2、A 网站已经登录了,浏览器 会留下这个 A 站相关的 cookie 信息,一般是登录 凭证。
3、B网站 页面中通过 from 标签调用 A 网站的 转账接口。这时,from 标签请求A网站会携带之前A站登录的cookie信息。这样B站就可以正常请求A站的请求看。
利用的漏洞是:form表单,发送的请求是可以跨域的。并且请求时,浏览器会附带上之前站点,登录用户的授权cookie信息。
CSRF防御:
1、尽量使用POST 【相对降低攻击风险,POST通过from表单也是可以实现CSRF攻击的】
2、加入验证码: 【可以确保是一个用户行为,而非黑客行为 】
3、验证 Referer
4、Anti CSRS Token 【请求 token 放在 header 上是不会被保存的,所以不会像 cookie一样,在其它的网站上发送请求也会携带对方的cookie】
1、免费wifi站点盗取用户信息 : https://www.cnblogs.com/jiaopaner/archive/2016/10/18/5975391.html
2、post请求不是为了安全而设计的,只是相对get请求,隐藏了些敏感信息 : https://www.cnblogs.com/ouzi/archive/2012/10/16/2726778.html
3、数据脱敏 : https://blog.csdn.net/huyuyang6688/article/details/77689459 (数据脱敏一般都是后端处理的)
4、数据脱敏和数据加密的区别 : https://blog.csdn.net/kkx1988/article/details/80050355