egg.jsの最初のピット-postリクエストの正しい姿勢

4457 ワード

eggフレームワークが一般的なhttpリクエストをどのように受け入れるか、データを返す方法を学ぶために、formのdemoを書きました.

<form action="/form" method="post">
  <input type="text" name="name" placeholder="name">
  <input type="text" name="age" placeholder="age">
  <input type="submit" value="  ">
form>
// router.js

'use strict';

module.exports = app => {
  app.get('/', 'render.ejs');
  app.post('/form',app.controller.form.listPosts)
};
// controller/form.js
const Controller = require('egg').Controller; module.exports = class PostController extends Controller { * listPosts() { this.ctx.body = { name: this.ctx.request.body.name, age: this.ctx.request.body.age } } };
<h3>name: =name%>h3>
<h3>age: = age %>h3>

それから私は直接実験を始めて、結果はずっと間違っていて、403、何の安全検証が何なのかと言って、後で私は詳しく公式のドキュメントを見て、このような一言を見ました.
 :
       POST      :'secret is missing'。       koa-csrf/index.js#L69 。

後で詳しく見てみると、eggフレームのこのセキュリティプラグインを内蔵した鬼だった.簡単に言えば、このプラグインの機能はpostリクエストが入るたびに、リクエストが持参したパラメータの中に特定のパラメータが含まれているかどうかをチェックすることです.このパラメータは鍵に相当します.リクエストしたcookieに存在します.リクエストするときは特定のパラメータ名を持って、パラメータ値がこの鍵のデータに等しい必要があります.リクエストヘッダヘッダに直接入れて、ドキュメントを見て設定すればいいのです.
もっとはっきり言って、あなたが要求する时、サーバーはあなたに“天王盖地虎”を闻いて、あなたは“ニワトリのキノコを煮込みます”に答えなければならなくて、1つの道理、ただこの“ニワトリのキノコを煮込みます”のパスワードはあなたが要求したクッキーの中に存在して、あなたがしなければならないのはクッキーの中から出して、それからheaderの中に置いてあるいは直接あなたの要求したパラメータの中に加えます https://eggjs.org/zh-cn/core/security.html#安全上の脅威-csrf-の防止
総じて言えば、個人的にアリのこのフレームワークはとても牛が追い詰めていると感じて、少なくとも安全の面ではとてもよくて、深く勉強する価値があります.