# XSS 跨站脚本攻击
XSS 跨站脚本攻击是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其他用户使用的页面中,攻击者通过注入非法的 html 标签或者 js 代码,从而当用户浏览该网页时,控制用户浏览器
# 举例
# 存储型 XSS
用户在留言板发布信息是一条恶意的 js 代码消息,当其他用户访问此消息时,会执行恶意脚本
# 反射型 XSS
攻击者构造一个恶意链接,当用户点击时,就会执行恶意脚本,将脚本作为响应的一部分返回给用户的浏览器
# DOM 型 XSS
用户留言板输入 script 去修改 DOM 元素,访问者访问到留言就会被攻击
# sql 注入
在用户在搜索栏输入 sql 语句,如果没有处理,就有可能攻击到数据库
# 防御
- 1、过滤
对用户的输入进行过滤,通过将 <>'' 和 "" 等字符进行转义,移除用户输入的标签内容
- 2、编码
根据输出数据所在的上下文来进行相应的编码,数据放置于 HTML 元素中,需进行 HTML 编码,放置于 URL 中,需要进行 URL 编码,此外还有 JS 编码、CSS 编码、HTML 属性编码和 JSON 编码等等
- 3、HttpOnly
在 cookie 中设置 HttpOnly 属性,使得 js 脚本无法读取到 cookie 信息
# CSRF 跨站请求伪造
CSRF 跨站请求伪造是指攻击者冒充用户发起请求,在用户不知情的情况下完成一些违背用户意愿的事情
# 举例
- 用户登录某个正常网站,比如银行网站,攻击者诱导用户点击某链接(如银行转账的链接接口),用户点击链接时,他们的浏览器会向目标网站发送请求,由于请求会携带用户的认证信息,所以会被目标网站视为正常操作
# 防御
- 1、使用 token
对于敏感操作,服务器会产生一个 token 到 session 中,将 token 和 session 会话相绑定,如果当前会话与 token 验证不上,就不进行敏感操作
- 2、Referer 验证
使用 Referer 验证页面的来源,只接收本站的请求,服务器才做响应,如果不是就进行拦截
- 3、使用验证码
重要操作要求用户输入验证码,强制用户和应用进行交互,最终完成请求
# 点击劫持
# 举例
- 在某网站上设置透明按钮,点击后执行危险脚本,或者嵌入不可见的 iframe,诱导用户进行点击,执行信任网站的相关操作
# 防御
- 1、X-Frame-Options
服务器通过设置 HTTP 响应头 X-Frame-Options 来控制页面是否可以被嵌入到 iframe 中
- 2、严格遵循 CSP 内容安全策略
通过设置 CSP 头来更加细致地控制资源的加载和执行,从而提高页面的安全性,例如:设置 frame-ancestors:"self" 来限制只有同源页面才能嵌入当前页面
- 3、使用 js 检测页面是否嵌入到 iframe 中
- 4、用户教育:提高安全意识,教育用户不要随意点击可疑网站
# 第三方库攻击
- 供应链攻击,攻击者可能通过在第三方库中注入恶意代码或后门来破坏供应链,导致广泛的安全漏洞或数据泄漏
- 数据泄漏,第三方库可能未加密传输敏感数据