1、新建验证中间件middleware > auth.js
// auth.js
module.exports = (option, app) => {
return async function auth (ctx, next) {
ctx.state.csrf = ctx.csrf;
await next();
}
}
2、注册中间件,config > config.default.js
// config.default.js
config.middleware = ['auth'];
3、客户端传值方式有两种:
方式一:
<form action="/add" method="POST">
<input type="hidden" name="_csrf" value="<%=csrf%>">
用户名:<input type="text" name="username"><br/><br/>
密码:<input type="text" name="password"><br><br/>
<button type="submit">提交</button>
</form>
方式二:
<form action="/add?_csrf=<%=csrf%>" method="POST">
用户名:<input type="text" name="username"><br/><br/>
密码:<input type="text" name="password"><br><br/>
<button type="submit">提交</button>
</form>
4、服务器获取值
console.log(ctx.request.body)
查看控制台打印出的数据:
说明:csrf这个参数是egg框架为了防止CSRF攻击设置的,默认所有客户端都不可访问,egg还处理了常见的其他攻击,比如:xss攻击、钓鱼攻击、HTTP参数污染、远程代码执行。这也是区别于koa和express的地方。egg安全