Le Fait De Permettre À Double De S'Échapper Est-Il Dangereux?

j'ai un ASP.NET application MVC avec une route qui permet de rechercher des objets via /search/.

quand je fournis " search / abc "cela fonctionne bien, mais quand je fournis" /search/a+b+c "(correctement encodé url) alors IIS7 rejette la requête avec L'erreur HTTP 404.11 ( le module de filtrage de requête est configuré pour rejeter une requête qui contient une double séquence d'échappement ). Tout d'abord, pourquoi faut-il faire cela? Il semble seulement jeter l'erreur si c'est une partie de l'URL, mais ne faisant pas partie d'une chaîne de requête ( /transmettre?q = A+b+C fonctionne bien).

maintenant je peux activer les demandes de double évasion dans la section sécurité de mon web.config mais j'hésite à le faire car je ne comprends pas les implications, ni pourquoi le serveur serait de rejeter la demande "a+b+c" dans le cadre de l'URL, mais l'accepter comme faisant partie de la chaîne de requête.

Quelqu'un peut-il expliquer et donner quelques conseils que faire?

121
demandé sur Alex 2009-09-21 11:19:43

4 réponses

Edit: , a Ajouté l'accent sur les sections pertinentes.

en gros: IIS est excessivement paranoïaque. Vous pouvez désactiver cette vérification en toute sécurité si vous ne faites rien de particulièrement imprudent avec les données décodées par uri (comme générer des URI du système de fichiers local via une concaténation de chaîne de caractères).

pour désactiver le contrôle faites ce qui suit (de ici ): (voir mon commentaire ci-dessous pour ce que double Escape comporte).

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>

si le symbole plus est un caractère valide dans une entrée de recherche, vous avez besoin de pour activer "allowDoubleEscaping" pour permettre à L'IIS de traiter cette entrée à partir du chemin de L'URI.

enfin, une solution très simple, si limitée est simplement d'éviter ' + 'et d'utiliser' %20 ' à la place. Dans tous les cas, en utilisant le symbole " + " pour coder un espace est pas URL valide encodant , mais spécifique à un ensemble limité de protocoles et probablement largement supporté pour des raisons de rétrocompatibilité. Si ce n'est qu'à des fins de canonisation, il est préférable d'encoder les espaces comme '%20' de toute façon; et cela évite bien le problème IIS7 (qui peut toujours apparaître pour d'autres séquences, comme %25ab.)

139
répondu Eamon Nerbonne 2018-02-15 22:24:30

avez-vous pensé à avoir L'URL de recherche comme '/search/a/b/c'?

vous devez configurer une route comme

search/{*path}

et puis extraire les valeurs de recherche de votre chaîne de chemin dans l'action.

HTHs

Charles

2
répondu Charlino 2009-09-21 07:58:26

je voudrais juste ajouter quelques informations à la réponse d'Eamon Nerbonne liée à la " que faire " partie de votre question (n'expliquant pas le pourquoi).

Vous pouvez facilement modifier les paramètres d'une application particulière aussi avec

  1. ouverture de la console avec les droits d'administration (Démarrer-cmd-clic droit, Exécuter en tant qu'administrateur)
  2. tapant ce qui suit (tiré d'ici: http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx ):

    %windir%\system32\inetsrv\appcmd set config "YOURSITENAME" -section:system.webServer/security/requestfiltering -allowDoubleEscaping:true
    

    (vous pouvez par exemple remplacer YOURSITENAME par Default Web Site pour l'application de cette règle au site Web par défaut)

  3. Enter, prêt.

un exemple:

  1. tout d'abord j'ai eu le même problème: HTTP Error 404.11 - The request filtering module is configured to deny a request that contains a double escape sequence.
  2. dactylographier dans le texte mentionné ci-dessus: Drupal7-another Solution to HTTP Error 404.11 - The request filtering module is configured to deny a request that contains a double escape sequence.
  3. Maintenant, il fonctionne comme prévu: Solution to HTTP Error 404.11 - The request filtering module is configured to deny a request that contains a double escape sequence.
2
répondu Sk8erPeter 2017-05-23 12:26:19