这是我参与「第四届青训营」笔记创作活动的第4天
从两个角度看web安全
一、攻击篇
1.跨站脚本攻击(XSS)
用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。
- 持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
- 非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码.
- DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
- 通常难以从UI上发现,因为是在暗地里执行脚本
- 可以窃取用户信息( cookie、 token)
- 还可以绘制UI(如弹窗),诱骗用户点击
2.跨站请求伪造(CSRF)
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
3.跨站请求伪造(CSRF)与跨站脚本攻击(XSS)的区别
2.跨站请求伪造(CSRF)的特点
二、防御篇
1.跨站脚本攻击(XSS)
- 方案:
- 现成工具:
- 前端:
-
主流框架默认防御XSS
google-closure-library
- 服务端(Node):
- DOMPurify
永远不信任用户的提交内容
不把用户提交内容直接转换成DOM