CSRF(Cross Site Request Forgery)是常見但不顯眼的攻擊方式,本篇不介紹如何使用CSRF攻擊html
只有介紹如何透過Express去實做CSRF protectionexpress
要實做CSRF protection要開啟一些功能(session, csrf, cookieParser),詳細內容以下cookie
...app.use(express.cookieParser('your secret here'));app.use(express.session());app.use(express.csrf());app.use(app.router);...
透過這樣的設定Express就會幫你產生csrf的token,確保每次Request沒有被偽造session
可是隻有這樣的宣告並沒有用,還須要把值帶入表單中app
而要帶入表單中,須要先把值存在res.locals
裡面,這樣在view
裡面才能夠使用工具
所以要加入下列的程式碼:spa
// global controllerapp.all('/*', function(req, res, next) { res.locals.csrf = req.session ? req.csrfToken() : ""; // CSRF next();});
透過上面的程式碼,讓每一頁進入前都會先執行裡面的設定,也就是說把res.locals加入csrf這個變數code
而res.locals.csrf
的值來至於 req.csrfToken()
(由Express負責產生orm
接下來在表單裡面加入一個hidden的值,名稱是「_csrf」完整HTML以下router
<input type="hidden" name="_csrf" value="<%= csrf %>">
其中<%= csrf %>
是因為我用EJS,因此使用<%%>輸出變數,csrf
則是在res.locals.csrf
的值
透過這樣的設定 Express 就會幫你作好保護了
若是懼怕的話,能夠開啟開發者工具把_csrf
的值修改過再送出表單
就會看到 Forbidden 的訊息