SQL-инъекция с простым ванильным NHibernate - PullRequest
7 голосов
/ 25 марта 2010

Простая установка NHibernate, например, нет беглого NHibernate, нет HQL, ничего, кроме доменных объектов и файлов отображения NHibernate. Я загружаю объекты через:

_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>();

Я применяю необработанный пользовательский ввод непосредственно к одному свойству в классе "LightSaber":

myLightSaber.NameTag = "Raw malicious text from user";

Затем я сохраняю LightSaber:

session.SaveOrUpdate(myLightSaber);

Все, что я видел, говорит о том, что да, в этой ситуации вы невосприимчивы к SQL-инъекциям из-за того, как NHibernate параметризует и экранирует запросы под капотом. Тем не менее, я также относительный новичок в NHibernate, поэтому я хотел перепроверить.

Спасибо!

Ответы [ 3 ]

9 голосов
/ 25 марта 2010

Да, вы практически не подвержены SQL-инъекциям при использовании NHibernate. Он использует параметризованные запросы для всех сгенерированных операторов SQL на всех платформах, которые их поддерживают.

Однако вы можете обойти это, используя собственный SQL для вставок / обновлений или выполняя SQL с каким-либо вариантом execute_sql или SQL-запросы без параметров.

3 голосов
/ 25 марта 2010

Вы в безопасности, если не подключаете пользовательский ввод непосредственно к HQL или SQL: ничто другое (из функций, предоставляемых hibernate) не позволит пользователям вводить вредоносный код.

2 голосов
/ 25 марта 2010

Просто чтобы повторить другим, если вы позволите NHibernate генерировать ваш SQL, вы в безопасности, по крайней мере, в теории.

Однако вам все же нужно быть осторожным с хранимыми процедурами, триггерами и функциями в базе данных, особенно с динамическим SQL.Даже если клиент везде использует параметризованные запросы, внедрение все же возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...