TOP ⬆
前端常见攻击方式 - XSS+CSRF
概念介绍
XSS 攻击
攻击的核心是通过各种手段将恶意代码注入到 HTML 中并被浏览器执行
- 反射攻击,通过 URL 注入恶意脚本获取信息,如
xxx?q=<script>alert(1)<script>
- 存储攻击,通过将恶意代码注入到数据库,等前端渲染后进行攻击
- DOM 攻击,通过前端 JS 控制 html 进行攻击
CSRF 攻击
攻击方式为,用户打开了安全网页A,又打开了危险网页B。攻击者通过技术手段盗取了网页 A Cookie/Token 等敏感信息并伪造成正常用户向网页 A 发送伪造的请求。
防御措施
XSS 攻击的防御措施
面对这种攻击的防御核心思路是:识别恶意代码,对一切不可信的信息来源都进行校验过滤,利用浏览器的安全策略阻止未知的脚本执行
反射型攻击
恶意脚本来自当前HTTP请求(通常是URL参数),由服务器直接“反射”回页面中并执行。
- 使用 CSP 内容安全策略,浏览器禁止内联脚本的执行
- 对动态内容的输出进行强制的编码校验,避免直接输出源文本
存储攻击
恶意脚本被保存到服务器端(如数据库),之后当其他用户访问正常页面时,该脚本会被读取并执行
- 前、后端对输入的表单信息进行严格的校验,只允许特定字段格式的提交
- 使用 CSP 内容安全策略,直接阻止非站点资源的脚本执行
- 现代前端框架都集成了防御手段,可以默认对输出的格式进行转义,避免出现脚本执行的恶意攻击。
DOM 攻击
恶意脚本的注入和执行完全发生在客户端,不经过服务器。
- 避免直接使用
innerHTML
,使用更安全的textContent
或innerText
- 动态生成 HTML 的话,需要使用
setAttribute()
,createElement()
等 API - 对来自 URL 或者 DOM 的数据进行编码,如
location.search
,location.hash
- 使用有风险的 API 前,不允许执行不受信的输入,如
eval()
、setTimeout(string)
、setInterval(string)
CSRF 攻击的防御措施
使用随机一次性的 Token
每次表单提交前,先通过接口获取一个临时的 token 在提交时将该 token 在接口从插入返回。因为攻击者只能伪造身份,无法获取到正常网页中的内容
同源策略 Cookie
Cookie 的配置可以禁止在跨域请求时携带敏感信息,这样攻击者在危险网页也无法获取到身份令牌
关键操作进行二次验证
直接通过 2PA密码、短信验证码等加密方式进行二次验证,直接从物理上隔绝泄密风险