Просто-ванильная установка NHibernate, например, никакой быстрый NHibernate, никакой HQL, ничто кроме объектов области и NHibernate отображающиеся файлы. Я загружаю объекты через:
_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>();
Я применяю необработанный ввод данных пользователем непосредственно к одному свойству на классе "Светового меча":
myLightSaber.NameTag = "Raw malicious text from user";
Я затем сохраняю LightSaber:
session.SaveOrUpdate(myLightSaber);
Все, что я видел, говорит, что да, под этой ситуацией Вы неуязвимы для Внедрения SQL из-за способа, которым NHibernate параметризовал и выходит из запросов под капотом. Однако я - также относительный новичок NHibernate, таким образом, я хотел перепроверить.
Спасибо!
Да, при использовании NHibernate вы почти неуязвимы для SQL-инъекций. Он использует параметризованные запросы для всех сгенерированных операторов SQL на всех платформах, которые их поддерживают.
Однако вы можете обойти это, используя пользовательский SQL для вставки / обновления или выполняя SQL с разновидностью execute_sql
какого-либо типа, или SQL-запросы без параметров.
Вы в безопасности, пока не подключаете вводимые пользователем данные непосредственно в HQL или SQL: ничто другое (из функциональных возможностей, предоставляемых спящим режимом) не позволит пользователям внедрить вредоносный код.
Просто вторя другим, если вы позволите NHibernate генерировать ваш SQL, вы в безопасности, по крайней мере, теоретически.
Однако вам все равно нужно быть осторожным с хранимыми процедурами, триггерами и функциями в базе данных, особенно с динамическим SQL. Даже если клиент повсеместно использует параметризованные запросы, инъекции все равно возможны.