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 的訊息

时间: 2024-07-29 22:34:13

Express 3 implement CSRF protection的相关文章

The OAuth 2.0 Authorization Framework-摘自https://tools.ietf.org/html/rfc6749

Internet Engineering Task Force (IETF) D. Hardt, Ed. Request for Comments: 6749 Microsoft Obsoletes: 5849 October 2012 Category: Standards Track ISSN: 2070-1721 The OAuth 2.0 Authorization Framework Abstract The OAuth 2.0 authorization framework enab

CSRF防护

CSRF 1.什么是CSRF? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF. 2.原理 从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤 : 1.登录受信任网站A,并在本地生成Cookie . 2.在不退出A的情况下,访问危险网站B. ps:注意并不是你退出了A后登陆B就会没事,因为你不能保证你关闭浏览器了后,你本地的Cookie立

Django之Cookie、Session、CSRF

Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)     参数:         default: 默认值            salt: 加密盐         max_age: 后台控制过期时间 2.设置Cookie: 1 2 3 4 5 6 7 8 9 10 11 12 13 rep

Django的Form、CSRF、cookie和session

Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和减少后台服务器的压力,通常我们在前端会对form表单进行数据合法性验证,但即使这样,后台的数据验证依然是必须不可省略的,原因很简单前端数据可以被伪造或js直接被禁用. Django内置了一个强大的Form功能,帮我们快速自定义后台数据验证,它的形式非常类似model类的定义方法,并且两者也具有内在联

Django进阶之CSRF

简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有分为全局和局部. 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件. @csrf_exempt,取消当前函数防跨站请求伪造功能,即便s

理解CSRF(跨站请求伪造)

理解CSRF(跨站请求伪造) 原文出处Understanding CSRF 对于Express团队的csrf模块和csurf模块的加密函数的用法我们经常有一些在意. 这些在意是莫须有的,因为他们不了解CSRF token是如何工作的. 下面快速过一遍! 读过后还有疑问?希望告诉我们错误?请开一个issue! 一个CSRF攻击是如何工作的? 在他们的钓鱼站点,攻击者可以通过创建一个AJAX按钮或者表单来针对你的网站创建一个请求: <form action="https://my.site.c

django中给ajax提交加上csrf

在html中的script标签下插入下面代码 在html文档加载时候运行下面代码,并且使用$.ajaxSetup设置ajax每次调用时候传入的数据,$.ajaxSetup进行默认的设置,只需要设置一次,每次ajax调用都会使用. 注意,以下代码使用了jquery,jquery.cookies.js 库.在head部分引用这些库,才能使得正常运行.另外需注意在某些特别情况下django并没有将csrftoken设置到cookie里面.那么这代码就失去了作用. $(document).ready(

Django中的CSRF

CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一.其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御.然而,对于大多数人来说,CSRF 却依然是一个陌生的概念.即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 C

sqlmap和burpsuite绕过csrf token进行SQL注入检测

利用sqlmap和burpsuite绕过csrf token进行SQL注入 转载请注明来源:http://www.cnblogs.com/phoenix--/archive/2013/04/12/3016332.html 问题:post方式的注入验证时遇到了csrf token的阻止,原因是csrf是一次性的,失效导致无法测试. 解决方案:Sqlmap配合burpsuite,以下为详细过程,参照国外牛人的blog(不过老外讲的不是很细致,不适合我等小白). 1.打开burpsuite(以1.5为