作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉,我不太明白 key 在 koa 中是如何工作的。在 koa 中,有keys
字段上 app
将像这样使用的对象:
const app = new Koa();
app.keys = ['some secret', 'another secret', 'or more ...']; // it's an
// array right?
koa-csrf
中间件,默认内置
csrf.middleware
不使用
app.keys
提供的 key .如果我使用
app.use(session()); // koa-generic-session
app.use(async (ctx, next) => { // without this custom middleware
ctx.session.secret = 'yet another secret'; // POST /protected-route
await next(); // will give 403
}); // missing secret
csrf(app);
app.use(csrf.middleware);
string
设置不是
array
.为什么需要多个 key ?对整个应用程序只使用一个还不够吗?
最佳答案
好像你在这里问了很多事情。
app.keys = [...]
用于 key 轮换的多个 key 。app.keys = ['mysecret']
你永远不会改变。 koa-csrf
的中间件实际上确实使用了您通过 app.keys=
设置的 key .app.keys
进入其 Cookies 实例( https://github.com/pillarjs/cookies ),以便内置 this.cookies.get()
和 this.cookies.set()
将使用 key (如果提供)。koa-session
使用 Koa 的内置 this.cookies.{get,set}
.koa-csrf
用途 koa-session
. app.keys=
secret 。它提示您没有提供 CSRF token (又名 secret ),更不用说有效的 token 了。
this.session.secret
只是手动设置 koa-csrf 查找 CSRF token 的值。您绕过了 CSRF 系统的整个安全措施。
<form>
。从您控制的页面发布到该端点。
secret
客户端的 cookie this.csrf
调用 #1 和 #2。你必须实现#3。 koa-csrf
this.assertCSRF
#4。
var koa = require('koa')
var csrf = require('koa-csrf')
var session = require('koa-session')
var Router = require('koa-router');
var bodyParser = require('koa-bodyparser');
var app = koa()
app.keys = ['session secret']
app.use(session())
app.use(bodyParser())
csrf(app)
app.use(csrf.middleware)
var router = new Router();
router.get('/messages', function*() {
this.render('new_message_form.html', {
token: this.csrf // this call also sets `this.session.secret` for you
});
});
router.post('/messages', function*() {
this.assertCSRF(this.request.body);
// If we get this far, then the CSRF check passed
yield database.insertMessage(this.body.message);
});
app.use(router.routes());
app.listen(3000, () => console.log('server listening on 3000'));
_csrf
这样当用户提交时,
this.csrf
生成的token被发送到我 protected 端点,并且
_csrf
field 是 koa-csrf 检查以查找提交的 token 的地方之一。
<form action="/messages" method="POST">
<input type="hidden" name="_csrf" value="{{ token }}">
<input type="message" name="message" placeholder="Write your message here...">
<button type="submit">Save Message<button>
</form>
关于koa - 为什么在 koa 上需要不止一个 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35362507/
我是一名优秀的程序员,十分优秀!