hapijs / crumb

CSRF crumb generation and validation for hapi
Other
171 stars 50 forks source link

PUT / DELETE requests don't do crumb validation #161

Open hannesvdvreken opened 2 years ago

hannesvdvreken commented 2 years ago

It's very common in other frameworks to do REST routes as such:

(request: Request, h: ResponseToolkit): symbol => {
  if (request.method === 'post' && request.url.searchParams.has('_method')) {
    const override = request.url.searchParams.get('_method');
    request.setMethod(override);
  }

  return h.continue;
};

These are some example routes:

{
  path: '/articles',
  method: 'POST',
  options: {
    validate: {
      payload: Joi.object({
        name: Joi.string(),
      });
    },
  },
  handler: store,
},
{
  path: '/articles/{slug}',
  method: 'PUT',
  options: {
    validate: {
      payload: Joi.object({
        name: Joi.string(),
      });
    },
  },
  handler: save,
},

POST will succeed, PUT will fail because

errors: {
  "crumb": "\"crumb\" is not allowed"
}