2010-04-26 9 views
1

J'essaie d'écrire des règles .htaccess qui remplacent certains caractères dans le paramètre REQUEST_URI. Plus précisément, je veux remplacer:Apache mod_rewrite remplace les caractères dans REQUEST_URI

  • "<" = &lt;
  • ">" = &gt;
  • "'" = &apos;
  • '"'= &#x22;
  • ")" = &#x29;
  • "(" = &#x28;

Exemple URL peut être http://www.example.com/?<script>alert(1)</script>&q=")("<script')

J'ai essayé un tas de méthodes sans succès. Quelqu'un peut me diriger dans la bonne direction? Merci.

+0

Cela doit être fait par votre application et non par le serveur Web. Quelle langue utilisez-vous? – Gumbo

Répondre

1

Vous pouvez utiliser mod_rewrite pour faire ce remplacement, voir cet exemple pour <:

RewriteCond %{QUERY_STRING} ^([^<]*)<([^<]*)<(.*) 
RewriteRule^%{REQUEST_URI}?%1&lt;%2&lt; [N] 
RewriteCond %{QUERY_STRING} ^([^<]*)<([^<]*)$ 
RewriteRule^%{REQUEST_URI}?%1&lt;%2 [L] 

La première règle remplacera deux < caractères à la fois et la seconde mettra fin à la récursivité. Les autres caractères peuvent être remplacés de la même manière (il suffit de remplacer < et &lt; par les autres paires).

Mais en utilisant mod_rewrite pour ce genre de travail n'est pas approprié parce

  1. mod_rewrite permet de ne remplacer que nombre fixe d'occurrences à la fois et
  2. le nombre de remplacements est limité au compteur de redirection interne cela est utilisé pour éviter la récursion infinie.

Bien que la deuxième déclaration ne s'applique pas dans ce cas en raison de l'utilisation du N flag, Je ne recommanderais pas l'utilisation de mod_rewrite pour ce genre de travail.

Je recommande plutôt de le faire dans l'application Web, éventuellement juste avant de mettre vos données dans un document HTML et non de façon prophylactique pour chaque entrée, peu importe comment ces données sont traitées.

Questions connexes