反射型(非持久型)javascript
储存型(持久型)html
测试一下网站的安全前端
<script>alert(123)</script>
复制代码
看看网页的反应。弹出了 123
java
这就是一个简单的 XSS 攻击。node
哈哈
进行翻译2.咱们能够看到 url 上面显示了咱们输入的 哈哈,说明这里能够注入
内容。 那咱们来注入
一些友(坏)善(坏)的脚本吧。ajax
https://translate.google.cn/#zh-CN/en/哈哈
//替代为
https://translate.google.cn/#zh-CN/en/<script>alert(123)</script>
复制代码
3.回车肯定后,会发现浏览器帮我作了处理,express
咱们看到这个,X-XSS-Protection
这个就是咱们今天的主题了。npm
4.咱们用 firefox 从新试试上面的 demo(固然你能够在 MDN 直接输入x-xss-protection)浏览器
HTTP X-XSS-Protection响应头是Internet Explorer,Chrome和Safari的一个功能,当检测到跨站脚本攻击 (XSS)时,浏览器将中止加载页面。虽然这些保护在现代浏览器中基本上是没必要要的,当网站实施一个强大的Content-Security-Policy来禁用内联的JavaScript ('unsafe-inline')时, 他们仍然能够为尚不支持 CSP 的旧版浏览器的用户提供保护。安全
X-XSS-Protection: 0
// 这一条表明关闭 XSS 保护
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
// 这一条是咱们看到的,表明启用了 xss 保护
X-XSS-Protection: 1; report=<reporting-uri>
复制代码
CSP
HTTP 响应头 Content-Security-Policy 容许站点管理者在指定的页面控制用户代理的资源。除了少数例外,这条政策将极大地指定服务源 以及脚本端点。这将帮助防止跨站脚本攻击(Cross-Site Script) (XSS).
固然上面都是九牛一毛,须要你们本身详细的看看 MDN 的解释
怎么启用 CSP ?
一、http 头信息 的 Content Security Policy
二、用 另一种是经过网页的 标签
// header
Content-Security-Policy: default-src https:
// meta tag
<meta
http-equiv="Content-Security-Policy"
content="default-src https:">
复制代码
mkdir demo
// 新建一个 demo 文件夹
cd demo
express -e ./
// 搭建 express 脚手架,ejs 和模板引擎
npm install
// 安装依赖包
复制代码
router.get("/", function(req, res, next) {
res.set("X-XSS-Protection", 0);
//关掉浏览器对XSS的检测
res.render("index", {title: "Express", xss: req.query.xss});
}); //query是express获取search的字段
复制代码
<div class="">
<%- xss %><!--'-'表示容许输入html,不须要转义--> </div>
复制代码
//找到这一行
var port = normalizePort(process.env.PORT || "3000");
app.set("port", port);
// 咱们改为
var port = normalizePort(process.env.PORT || "6060");
console.log("listen on port:6060");
app.set("port", port);
复制代码
固然这个端口号无所谓,将来不冲突,因此选个吉利的数字,console 是为了在控制台看到本身成功 start 了
npm start
复制代码
http://localhost:6060/
后输入?xss=<iframe src="//baidu.com/h.html"></iframe>
或者?xss=<img src="null" onerror="alert("1")">
或者?xss=<p onclick="alert("1")">点我点我</p>
主要由服务器端转义,客户端反转义,再
DomParse
,再过滤,使用encode.js
和 domparse.js
第三方库对文本进行解码
和DOM parse
操做