Si vous voulez bloquer Portal.asmx/js
mais permettent Portal.asmx/UpdateProduct
il y a deux façons de le manipuler - un modèle whitelist listant toutes les valeurs acceptées, ou négative pour les préanalyse matchs indésirables.
Un lookahead négatif va presque certainement être une meilleure performance que d'énumérer toutes les valeurs acceptables. Toutefois, l'utilisation de votre expression existante ne correspondra pas exactement à ce que vous voulez. Il bloquerait, par exemple, Portal.asmx/json
et autoriserait Portal.asmx/js.aspx
- ce qui pourrait ne pas être une URL, mais simplement mettre en évidence ce qui doit être réparé.
Cette expression (copié de réponse eyelidlessness) va gérer les choses de façon appropriée:
\.(asmx(?!/js[/\z])|aspx$|html?$)
Il vaut la peine d'expliquer que la classe de caractères [/\z]
correspondra soit /
ou <end of string>
- le \z
est le même que pour $
mais fonctionne dans les classes de caractères (où $
correspond à un caractère $ littéral).
(Il existe des différences entre $
et \z
mais uniquement en mode multiligne, ce qui n'est pas pertinent pour le filtrage d'URL).
En général, ne vous inquiétez pas sur les performances sauf si vous avez un problème de performance mesurable (sinon comment saurez-vous si ce que vous avez changé fait aucune différence).
-1: La question demande une expression rationnelle qui peut gérer un chemin après asmx/, juste pas asmx/js – eyelidlessness
La question originale * n'a pas * demandé cela, c'est une nouvelle addition ajoutée une heure après que j'ai répondu. –
Je viens d'expliquer pourquoi j'ai donné un -1, parce que la réponse était incorrecte. Je pense qu'il est important d'expliquer les downvotes. J'ai supprimé le -1 maintenant que vous avez modifié. – eyelidlessness