diff --git a/src/content/posts/csp.md b/src/content/posts/csp.md new file mode 100644 index 000000000..6377dea95 --- /dev/null +++ b/src/content/posts/csp.md @@ -0,0 +1,136 @@ +--- +title: CSP标头是什么?为什么有人能神不知鬼不觉地盗走你的信息? +published: 2025-07-31 +description: 'CSP是内容安全策略,它可以防止攻击者向您的网站恶意注入脚本以盗走用户信息' +image: 'https://eo-r2.2x.nz/myblog/img/e245d917-2255-4d2d-85fb-aa7538a18022.webp' +tags: [XSS攻击, CSP] +category: '记录' +draft: false +lang: '' +--- + +# 举个例子吧! + + + +这是一个无CSP标头的网站: [点我](https://none-csp-demo.pages.dev/csp?name=%3Cimg%20src=x%20onerror=%22alert(%27XSS%E6%94%BB%E5%87%BB%E6%88%90%E5%8A%9F%27)%22%3E) + +不出意外,你的浏览器会弹出一个提示 + + + +# 这是如何做到的? + +这个项目开源在 [afoim/none_csp_demo](https://github.com/afoim/none_csp_demo) + +HTML内容为 + +```html + + +
+ +你好,!
+ + + + +``` + +这个网站非常简单,网页通过查询符 `?name=xxx` 来动态显示用户名 + +比如你输入 https://none-csp-demo.pages.dev/nocsp?name=AcoFork 网页就会显示 + + + +而根据源码 网页是通过 `innerHTML` 直接进行文本插入的 + +这种方式没有任何的安全审查,会将传入的内容直接拼接到HTML中 + +那么...如果我们给网站这样一个 `name` 呢? + +尝试输入 + +https://none-csp-demo.pages.dev/nocsp?name=%3Cimg%20src=x%20onerror=%22alert(%27XSS%E6%94%BB%E5%87%BB%E6%88%90%E5%8A%9F%27)%22%3E + +你会发现网站并没有打印出任何用户名,而且浏览器还弹出了一个奇怪的窗口 + + + +我们F12查看当前网页的源代码 + + + +发现在 `` 中 + +被插入了一条 `