Egg 安全机制 CSRF 的防范
网址:
http://eggjs.org/zh-cn/core/security.html
方式一:
在 controller 中通过参数传入模板
1 2 3 4 5 6 7 | /** * 方式一:在 controller 中通过参数传入模板 * this.ctx.csrf 用户访问这个页面的时候生成一个密钥 */ await ctx.render( 'home' , { csrf: this .ctx.csrf }); |
方式二:
通过创建中间件,设置模板全局变量
app/middleware/auth.js
1 2 3 4 5 6 7 8 9 10 11 | /** * 同步表单的 CSRF 校验 */ module.exports = (options, app) => { return async function auth(ctx, next) { // 设置模板全局变量 ctx.state.csrf = ctx.csrf; await next(); } } |
config/config.default.js
1 2 | // 增加配置中间件 config.middleware = [ 'auth' ]; |
controller 中使用
1 2 3 4 5 | /** * 方式二:通过创建中间件,设置模板全局变量 * config.middleware = [auth']; */ await ctx.render('home'); |
模板:
app/view/home.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <! DOCTYPE html> < html lang="en"> < head > < meta charset="UTF-8"> < meta name="viewport" content="width=device-width, initial-scale=1.0"> < title >首页</ title > </ head > < body > < form action="/add?_csrf=<%=csrf%>" method="POST"> <!-- 通过隐藏的表单域传值 --> <!-- <input type="hidden" name="_csrf" value="<%=csrf%>" /> --> 用户名:< input type="text" name="username" />< br /> 密 码:< input type="password" name="password" />< br /> < button type="submit">提交</ button > </ form > </ body > </ html > |
注:配置 域白名单,跳过 crsf 检测
config/config.default.js
1 2 3 4 5 6 7 8 9 | // 安全配置 config.security = { csrf: { enable: false , ignoreJSON: true }, // 允许访问接口的白名单 domainWhiteList: [ '*' ] // ['http://localhost:8080'] } |
.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
2019-03-10 谈谈垃圾回收机制方式及内存管理
2018-03-10 react 项目实战(七)用户编辑与删除