# Validation, Canonicalization, Escaping & Sanitization

Toutes les propriétés échangées avec l’API ReST doivent être **validées par l’API**.

La validation doit également être implémentée côté client pour éviter les aller-retours inutiles.

![La validation Clien-Side n'est pas suffisante](/files/-LFLdJPNfs8oYvvsjbZt)

## Canonicalization

L’API ReST doit convertir les données reçues vers leur forme canonique ou les rejeter.

Par exemple, les données suivantes :

```javascript
{
    "firstName": "joHn",
    "lastName": "  DoE",
    "url": "myWebsite.com"
}
```

... peuvent être converties en :

```javascript
{
    "firstName": "john",
    "lastName": "doe",
    "url": "https://mywebsite.com"
}
```

## Escaping

Ce n’est pas à l’API ReST de gérer l’escaping du contenu.

Par exemple, sur un blog, le commentaire suivant est cohérent :

```markup
<img src="not-found" onerror=alert(1)>
```

C’est au client de gérer l’escaping est d’éviter les attaques de type XSS.

## **Sanitization**

La *sanitization* est un jeu dangereux qui consiste à retirer le contenu potentiellement malicieux.

Pour l’exemple précédent, cela consisterait à retirer la partie `onerror` :

```markup
<img src="not-found">
```

Mais encore une fois, il s’agit d’une problématique client.

La difficulté est qu’il est toujours possible de trouver des techniques pour *bypass* la *sanitization*.\
Certains en ont fait leur métier 😉\
<http://n0p.net/penguicon/php_app_sec/mirror/xss.html>


---

# 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/validation-canonicalization-escaping-et-sanitization.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.
