Если вы хотите заблокировать Portal.asmx/js
, но разрешить Portal.asmx/UpdateProduct
, есть два способа справиться с этим — шаблон белого списка, в котором перечислены все допустимые значения, или отрицательный поиск нежелательных совпадений.
Отрицательный прогноз почти наверняка будет более эффективным, чем перечисление всех допустимых значений.
Однако простое использование существующего выражения не будет точно соответствовать тому, что вы хотите. Например, он заблокирует Portal.asmx/json
и разрешит Portal.asmx/js.aspx
, которые могут быть не вероятными URL-адресами, а просто выделить то, что нужно исправить.
Это выражение (скопированное из ответа без век) будет правильно обрабатывать вещи:
\.(asmx(?!/js[/\z])|aspx$|html?$)
Стоит пояснить, что класс символов [/\z]
будет соответствовать либо /
, либо <end of string>
— \z
совпадает с $
, но работает в классах символов (где $
соответствует буквальному символу $).
(Есть различия между $
и \z
, но только в многострочном режиме, что не имеет отношения к фильтрации URL-адресов).
Как правило, не беспокойтесь о производительности, если только у вас нет измеримых проблем с производительностью (иначе как вы узнаете, повлияло ли то, что вы изменили, на какую-либо разница).
person
Peter Boughton
schedule
28.09.2009