ASP.NET MVC ValidateInput(false) перестает работать с xVal и [RegularExpression] DataAnnotation
-
10-07-2019 - |
Вопрос
Я хотел бы перехватить "<"символ в поле формы с помощью средства проверки регулярных выражений.Я опишу проблему в 3 этапа:
Шаг 1:Когда я пытаюсь отправить форму с полем, содержащим "<"персонаж, я получаю "Потенциально опасный запрос ..." - как и ожидалось в ASP.NET.
Шаг 2:Чтобы избежать проверки запроса ASP.NET, я украшаю свой метод обновления в контроллере "[ValidateInput(false)]".
Это работает, как и ожидалось - теперь я могу публиковать сообщения ".<" символ без ошибок.
Шаг 3:Я использую xVal с DataAnnotations.Например, [Required] или [StringLength(255)] работает так, как ожидалось.
НО когда я использую:[Регулярное выражение("^[^<>]*$", ErrorMessage = "Специальные символы не допускаются".)], Я снова получаю сообщение об ошибке "Потенциально опасный запрос ...", несмотря на директиву [ValidateInput(false)].
Что происходит?Есть ли более простой способ проверки регулярных выражений, но с [ValidateInput(false)] на месте?Конечно, я бы хотел, чтобы мой код проверки был в модели, а не в контроллере.
Решение
Нет, это была проблема в MVC 1 + xVal. В MVC 2 валидация работает как Предполагается (и нет необходимости в xVal больше) & # 8211; Alex42
Похоже, бот продолжает подталкивать этого к вершине. Не могли бы вы пометить ответ как принятый, чтобы он знал? Р>
Другие советы
Я использую xVal & amp; nhibernate.validator и я пытались воспроизвести это поведение, но поскольку валидатор привязан к стороне клиента, я не смог получить значение, прошедшее проверку на стороне клиента. когда я отключил javascript, он прошел проверку на стороне сервера и был перехвачен средством проверки регулярных выражений. Р>
Я попробовал то же самое с использованием атрибутов проверки аннотаций данных и связывателя модели, и это также прошло.
Должно быть что-то еще, что вызывает ошибку. Извините, я не мог быть более полезным!
Попробуйте выполнить проверку с помощью простого правила с этот метод.Это может, по крайней мере, исключить xVal из уравнения.Если проблема не устранена, то я бы предположил, что это связано либо с:
- реализация связующего элемента модели MVC по умолчанию
- или есть проблема с механизмом представления MVC в используемой вами версии, которая каким-то образом позволяет создавать исключение для указанного вами атрибута путем проверки
<
когда этого не должно было быть
если бы это было просто поле, вы могли бы просто написать процедуру поиска символа '< или >' и удалите его.вы можете добиться этого, используя substring .надеюсь, это поможет
- используйте цикл For для длины проверяемого текста (for (int i=1, i <= текст.длина, ++))
- проверьте каждый символ, начинающийся с 1 (например, ch = text.substring(i,1)
- добавьте каждый прочитанный символ в строку tmp, за исключением '< или >'
Полагаю, статический метод Escape()
решил бы это за вас.
Regex r = new Regex(Regex.Escape(expression));
Поместите эту строку в web.config
<httpRuntime requestValidationMode="2.0" />
Это изменение в ASPNET 4.0