2017-10-07 3 views
0

requestPathInvalidCharacters spécifie une liste de caractères non valides qui déclenchera une réponse 400 Bad Request. Par défaut, la liste comprend: "<,>,*,%,&,:,\\,?". Cela inclut les points d'interrogation et les barres obliques inverses. Mais autant que j'ai vu, les deux personnages ne seront jamais considérés comme invalides.Comment déclencher une 400 Bad Request à l'aide d'un point d'interrogation ou d'une barre oblique inverse

Chaque caractère d'URL après le premier point d'interrogation sera utilisé dans la chaîne de requête. Les URL comme /path?foo?bar sont considérées comme valides. Dans cet exemple, la chaîne de requête est constituée d'une seule valeur sans clé foo?bar. Même /????? est une URL valide. Les barres obliques inversées sont automatiquement converties en barres obliques, donc je ne vois pas comment elles pourraient être considérées comme invalides.

Répondre

0

Un simple % déclenchera une erreur. Par exemple. GET /% HTTP/1.1 car c'est une requête incomplète.

Par exemple: https://stackoverflow.com/%

Certains des autres personnages ne déclenchent 400 réponses, mais votre navigateur les convertit automatiquement. Proof of concept:

% curl -i 'http://stackoverflow.com/<' 
HTTP/1.1 400 Bad Request 
+0

Je sais que% 'et' <'peuvent déclencher 400 réponses, elles sont dans' requestPathInvalidCharacters' par défaut. Mais pourquoi '?' Et '\\' sont là? Comment peuvent-ils déclencher 400 réponses? –

+0

Ceci est une supposition, mais je suppose qu'ils qualifient que '?' Fait partie de la requête de requête, pas de chemin. Ma seule supposition sur '\\\' est que RFC2396 le définit comme nécessitant une évasion en raison d'être un délimiteur, et ce n'est pas valide. – Vetsin