Регулярное выражение не работает для тестирования проникновения, чтобы остановить параметр, который содержит сценарий слова
Я создаю регулярное выражение для управления атаками на мой веб-сайт. Я использую регулярное выражение для сравнения параметров, которые не должны содержать в себе слово "скрипт", а также не должны иметь специальных фигурных скобок { and }
,
Таким образом, с помощью сопоставителя шаблонов Java добавив регулярное выражение, я не могу отклонить это значение параметра
indices.jsp--><script>alert(1)</script>
регулярное выражение я использую
(?=^[\x26\x3c\x3e:a-zA-Z0-9_\s.\-\/@+* \^(),~%]+$)(?!script)|^$
2 ответа
Кроме того, вы можете думать о проблеме по-другому.
Вместо того, чтобы сосредоточиться на том, чего вы не хотите, сосредоточьтесь на том, что вы хотите.
Каковы допустимые значения для параметра?
- Найти ответ на этот вопрос
- Создайте шаблон регулярного выражения, который будет соответствовать только действительным значениям.
Таким образом, любое неверное значение будет автоматически отклонено.
Вместо того, чтобы предотвращать ввод вредных параметров, вы должны убедиться, что их вывод не произойдет непредсказуемым образом.
Так как вы можете использовать кодировку URL и другие приемы, чтобы получить <script>
на сервере вы должны быть уверены, что везде, где вы отображаете данные, введенные пользователем, выходные данные правильно экранируются или кодируются.
Вместо вывода <script>
, так должно быть <script>
который будет отображаться правильно для пользователя, но браузер не будет пытаться выполнить его. Если вы посмотрите на источник этой страницы, вы увидите, как это работает.
Очевидно, вы не должны пытаться сделать это вручную. Большинство технологий просмотра имеют простой способ автоматического выполнения экранирования (он может даже быть включен по умолчанию). JSTL-х c:out
делает это автоматически, но если вы пишете сырой JSP, вам нужно сделать <
-> <
вручную.