这是我参与「第四届青训营 」笔记创作活动的第5天
xss(3种)
跨站脚本攻击
- 反射型
- 钓鱼网站窃取客户端上的cookies
- 需要用户主动打开恶意的 URL 才能生效
- 存储型
- XSS代码提交存储在服务器端(数据库,内存,文件系统等)只用提交一次 就可以感染多个用户
- 目标用户访问该页面获取数据时,XSS代码会从服务器解析之后加载出来,返回到浏览器做正常的HTML和JS解析执行,XSS攻击就发生了。
- DOM型
- 通过恶意脚本修改页面的 DOM 结构窃取用户数据或冒充用户
注意 DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞
预防:
-
防止攻击者提交而恶意代码
-- 在用户输入的过程中,过滤掉用户输入的恶劣代码,然后提交给后端,但是如果攻击者绕开前端请求,直接构造请求就不能预防了
-- 转义html
-
防止浏览器执行恶意代码
-
在前端避免使用
innerHTML
、outerHTML
,eval()
等能把字符串作为代码运行的api -
纯前端渲染
-- 先构造静态html,静态html中不包含与业务相关的数据 通过ajax加载业务数据,调用dom的api更新
-- 在纯前端渲染中,我们会明确的告诉浏览器:下面要设置的内容是文本(
.innerText
),还是属性(.setAttribute
),还是样式(.style
)等等。浏览器不会被轻易的被欺骗,执行预期外的代码了。
-
-
避免内联事件和脚本
-
输出内容长度限制
-
HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。
-
验证码:防止脚本冒充用户提交危险操作。
-
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。