Securing the endpoints
So far, every route we declared doesn’t perform any check on the input the user passes. This isn’t good, and we, as developers, should always validate and sanitize the input of the APIs we expose. In our case, all the createTodo
and updateTodo
handlers are affected by this security issue. In fact, we take the request.body
and pass it straight to the database.
First, to better understand the underlying issue, let’s give an example of how a user can inject undesired information into our database with our current implementation:
$ curl -X POST http://localhost:3000/todos -H "Content-Type: application/json" -d '{"title": "awesome task", "foo": "bar"}' {"id": "6418214ad5e0cccc313cda85"}% $ curl http://127.0.0.1:3000/todos/6418214ad5e0cccc313cda85 {"id": "6418214ad5e0cccc313cda85", "title": "awesome task", "foo"...