# C.S.R.F. & Media Type

L’une des erreurs classiques est d’accepter des *media types* autres que `application/*json` *(header `Content-Type`)*.

Sans aucune autre erreur de configuration C.O.R.S., l’acceptation du *media type*`application/x-www-form-urlencoded` permet à l’attaquant de créer un formulaire et de déclencher une simple requête POST.

```javascript
document.querySelector('form').submit()
```

Dans ce cas, la plupart des frameworks *(Ex. : expressjs)* récupèrent un objet :

```javascript
{
   email: 'pwned.by@attacker.io',
   grants: 'all'
}
```

{% hint style="danger" %}
**Il ne faut donc activer que le&#x20;*****parser*****&#x20;JSON.**
{% endhint %}

… mais supposons qu’il soit activé sur tous les "media types" et plus particulièrement `text/plain` pour simplifier la vie des développeurs "client-side".

1\. L’attaquant n’a plus qu’à adapter légèrement le formulaire précédent :

```markup
<form
    method="POST"
    action="https://app.vulnerable.com/api/products/0/admins"
    enctype="text/plain">
    <input
         name='{"email": "pwned.by@attacker.io", "grants": "all", "extra": "'
        value='"}'>
</form>
```

2\. Cela va alors envoyer le "body" suivant :

```javascript
{"email": "pwned.by@attacker.io", "grants": "all", "extra": "="}
```

3\. L’API va alors "parser" le contenu suivant :

```javascript
{
    email: 'pwned.by@attacker.io',
    grants: 'all',
    extrat: '='
}
```

{% hint style="danger" %}
**La vérification du&#x20;*****media type*****&#x20;des requêtes doit donc être rigoureuse.**
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://guide-api-rest.marmicode.fr/securite-des-apis-rest/c.s.r.f.-and-media-type.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
