一、XSS
跨站脚本攻击(也称为XSS(cross-site scripting 的缩写),为了和 CSS 区分,故叫它XSS)指利用网站漏洞从用户那里恶意盗取信息
。
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码、CSS样式和客户端脚本js。
XSS攻击可以分为3类:反射型((非持久型)、存储型(持久型)、基于DOM。
- 反射型(Reflected XSS)发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。
- 存储型 Stored XSS和Reflected XSS的差别就在于,具有攻击性的脚本被保存到了服务器端(数据库,内存,文件系统)并且可以被普通用户完整的从服务的取得并执行,从而获得了在网络上传播的能力。
- DOM型(DOM-based or local XSS)即基于DOM或本地的XSS攻击:其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
这些操作一般可以完成下面这些事情:
- 窃取Cookie。
- 监听用户行为,比如输入账号密码后直接发送到黑客服务器。
- 修改 DOM 伪造登录表单。
- 在页面中生成浮窗广告。
- 制造网页页面混乱
1、攻击方式举例:
-
在文章中发表评论的时候偷偷插入一段< script>…< /script>代码,然后别人在访问这个文章的时候就会执行这段代码了,如果攻击代码中为获取cookie发送到攻击者服务器,那么攻击者就能拿到这个数据了。这就是恶意获取别人的信息。
-
发布博客,在博客中插入脚本代码,别人在查看博客内容时就会执行这段脚本代码,这种不正常操作的脚本代码就会影响别人的网站。
其实就是在表单输入框中写脚本代码向页面注入脚本。
2、xss防范
开发者要时刻谨记不要相信用户输入的任何信息,一定要对用户提交的内容进行过滤。
- 前端对关键符号进行转义,如script标签的尖括号,’<’ 替换为 ‘
<
’ ,’>’ 替换为 ‘>
’ 等再提交给后台。
具体实现代码可见:https://blog.csdn.net/m0_38134431/article/details/84950653
- 过滤用户的事件属性(如onclick等)、过滤不安全的style标签、script标签、iframe标签等
具体实现代码可见:https://blog.csdn.net/m0_38134431/article/details/84953785
- 或者后端对前端提交的代码进行替换,这样可能性能上会好些。
xss攻击更详细参考:https://juejin.im/post/5df5bcea6fb9a016091def69#heading-64
二、XSRF/CSRF
跨站点请求伪造(也称为XSRF或CSRF(Cross-site request forgery))
。指的是黑客诱导用户点击链接,打开黑客的网站,然后黑客利用用户目前的登录状态发起跨站请求。
它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
我们可以这样理解:
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF的攻击原理:
(重点:用户一定是注册登录过A网站,那么在B网站进行间接访问A网站的时候才能上传cookie,仿照用户登录A网站。如果没登录过,那么网站A会要求用户进行登录)
1、XSRF攻击方式举例:
- 你已经登录过一个购物网站,正在浏览商品
- 该网站的付费接口是 xxx.com/pay?id=100 但是付费时没有任何验证(当然这只是假设,现在很多电商网站验证性都做得比较安全了)
- 然后你收到了一封邮件,邮件有一个图片你点击了,图片地址隐藏为< img src=“xxx.com/pay?id=100” />
- 当你点开邮件图片的时候,就已经悄悄付款购买了,这时攻击者也拿到了你的数据了。
2、XSRF防范
- 不要相信不知来源的外链,当你点击了网站A的时候不要乱点击其他外链来跳转到网页A。
- 网站上增加验证流程(如输入指纹,密码,短信验证)
- token验证、referer验证、隐藏令牌(百度学习下)
CSRF攻击详细参考:https://juejin.im/post/5df5bcea6fb9a016091def69#heading-74