Express 3 implement CSRF protection

CSRF(Cross Site Request Forgery)是常見但不顯眼的攻擊方式,本篇不介紹如何使用CSRF攻擊

只有介紹如何透過Express去實作CSRF protection

要實作CSRF protection要開啟一些功能(session, csrf, cookieParser),詳細內容如下


...app.use(express.cookieParser('your secret here'));app.use(express.session());app.use(express.csrf());app.use(app.router);...

透過這樣的設定Express就會幫你產生csrf的token,確保每次Request沒有被偽造

但是只有這樣的宣告並沒有用,還需要把值帶入表單中

而要帶入表單中,需要先把值存在res.locals裡面,這樣在view裡面才可以使用

因此要加入下列的程式碼:

// global controllerapp.all('/*', function(req, res, next) {
    res.locals.csrf = req.session ? req.csrfToken() : ""; // CSRF
    next();});

透過上面的程式碼,讓每一頁進入前都會先執行裡面的設定,也就是說把res.locals加入csrf這個變數

res.locals.csrf的值來至於 req.csrfToken() (由Express負責產生

接下來在表單裡面加入一個hidden的值,名稱是「_csrf」完整HTML如下

<input type="hidden" name="_csrf" value="<%= csrf %>">

其中<%= csrf %>是因為我用EJS,所以使用<%%>輸出變數,csrf則是在res.locals.csrf的值

透過這樣的設定 Express 就會幫你做好保護了

如果害怕的話,可以開啟開發者工具把_csrf的值修改過再送出表單

就會看到 Forbidden 的訊息


转载于:https://my.oschina.net/gwind/blog/334892

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值