Вопрос

Из пользовательского отчета: «при редактировании foo.textboxBar допускает использование специальных символов, которые вызывают предупреждение об ошибке .net при сохранении '

textboxBar.Text присваивается объекту и сохраняется с помощью nHibernate.

<property name="TextboxBar" length="255" not-null="false" />

Думая, что это может быть nHibernate, не экранирующий строки, но не могу найти его в документации.

nHibernate 1.2.0 автоматически экранирует строки, ссылка оценена?

Это было полезно?

Решение

Я сомневаюсь, что ему вообще нужно экранировать строки - я бы ожидал, что значения будут передаваться в параметризованных операторах.

Я сильно подозреваю, что это не имеет ничего общего с nHibernate — я подозреваю, что это просто ошибка ASP.NET, хотя, по общему признанию, это предполагает, что это приложение ASP.NET.В этом случае вы, вероятно, просто захотите отключить проверку для этой страницы.

См. Страница часто задаваемых вопросов ASP.NET по проверке Больше подробностей.

Другие советы

Из вашего вопроса не совсем понятно, какова ситуация, и даже если это ASP.NET, но мог ли пользователь иметь в виду сообщение об ошибке «Потенциально опасное значение Request.Form было обнаружено на клиенте…», которое ASP. NET генерирует?

Если это так, то это сообщение об ошибке не связано с NHibernate, а связано с тем фактом, что по умолчанию ASP.NET пытается обнаружить опасные входные данные формы, которые могут быть попыткой атаки межсайтового сценария.

Чтобы это исправить, вам необходимо взять на себя ответственность за кодирование HTML всех ваших выходных данных.Если вы используете веб-формы, вам следует добавить эту директиву страницы на свою страницу...

<%@ Page ValidateRequest="false" ... %>

... а затем убедитесь, что вы сами проверяете вводимые данные и/или стараетесь всегда кодировать выходные данные, когда позже включаете их в HTML.

Если вы используете ASP.NET MVC, вы делаете то же самое, добавляя атрибут [ValidateInput] к действию вашего контроллера:

[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public ActionResult Edit(...)
{
   return View();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top