反射型(非持久型)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
操做