https://juejin.cn/post/6844903842635579405
跨站脚本攻击 XSS
https://developer.mozilla.org/zh-CN/docs/Glossary/Cross-site_scripting
类型
- DOM 型:向页面输入恶意内容,由前端将内容插入 DOM 树中。
js
// 用户向 inputNode 输入 <script>alert('执行成功')</script>
divNode.innerHTML = inputNode.textContent;
- 反射型:发送携带恶意内容的请求,由后端把恶意内容返回到前端页面中。
js
fetch("http://exmaple.com/search=<script>alert('执行成功')</script>");
- 存储型:发送携带恶意内容的请求,存储到数据库,后端把恶意内容返回到前端页面中。
js
fetch("http://exmaple.com/add/?data=<script>alert('执行成功')</script>");
防御
- 内容安全策略 CSP
- 向
<head>
添加<meta http-equiv="Content-Security-Policy" content="">
- 响应头添加
Content-Security-Policy
- 向
- 限制用户输入内容(长度、特殊字符等)
- 后端设置 cookie 为 HttpOnly,以限制 js 读取
跨站请求伪造 CSRF
https://developer.mozilla.org/zh-CN/docs/Glossary/CSRF
用户没有退出 A 站的情况下访问 B 站,此时 B 站向 A 站发送请求时携带了用户在 A 站的 cookie,达到模拟用户操作的目的。
html
<!-- 访问以下链接时会带上本站 cookie -->
<a href="https://evil.com">诱导点击文字</a>
防御
- 请求时需要携带 Token
- 后端设置 cookie 的 Samesite 属性值
- Strict:任何情况下,cookie 都不能发给第三方主机
- Lax:HTTP 方法为 GET、HEAD、OPTIONS 时,cookie 可以发给第三方主机
原型污染
- 更改
__proto__
属性
https://www.freebuf.com/articles/web/375485.html
点击劫持
使页面中存在一个透明的 iframe 对用户输入进行劫持,可以获取密码。
防御
- 设置
<iframe>
的sandbox
或security
属性,以限制框架页内的 js 执行 - 响应头设置 X-Frame-Options,以限制框架页的加载