2008-09-22 2 views
9

Традиционалисты утверждают, что хранимые процедуры обеспечивают лучшую безопасность, чем если вы используете инфраструктуру реляционного сопоставления объектов (ORM), такую ​​как NHibernate.Каковы наилучшие методы внедрения безопасности при использовании NHibernate?

Чтобы устранить этот аргумент, какие подходы можно использовать с NHibernate, чтобы обеспечить надлежащую защиту (например, предотвращение внедрения sql и т. Д.)?

(Просьба представить только один подход в ответ,)

ответ

3

использовать выделенный Запирающийся SQL счета

6

На самом деле, NHibernate могут быть уязвимы для SQL инъекций, если вы используете SQL или HQL, чтобы построить свой запросы. Убедитесь, что вы используете параметризованные запросы, если вам нужно это сделать, иначе вы настроитесь на мир боли.

+0

Я предполагаю, что вы имеете в виду, насколько это возможно, используйте шаблоны Criteria и Expression вместо HQL. У меня сложилось впечатление, что HQL сам по себе параметризирован - есть ли у вас ссылка, которая показывает, как HQL можно использовать для инъекций? – 2008-09-24 01:30:22

+0

HQL параметризуется. Вы просто не можете конкатенировать строки в своем HQL или выполняете то же самое, что и с SQL. – 2008-09-24 13:13:07

7

Защитите свои соединительные строки.

Начиная с .NET 2.0 и NHibernate 1.2, в ваших конфигурационных файлах легко использовать зашифрованные строки подключения (и другие параметры приложения). Сохраните строку соединения в блоке <connectionStrings>, затем используйте свойство NHibernate connection.connection_string_name вместо connection.connection_string. Если вы используете веб-сайт, а не приложение Windows, вы можете использовать инструмент командной строки aspnet_regiis для шифрования блока <connectionStrings>, оставив остальные настройки вашего NHibernate в простом виде для упрощения редактирования.

Другая стратегия - использовать встроенную проверку подлинности для подключения к базе данных, если ваша платформа базы данных поддерживает ее. Таким образом, вы (надеюсь) не сохраняете учетные данные в открытом тексте в вашем файле конфигурации.

2

Один из аргументов, которые я слышал в пользу sprocs над ОРМ является то, что они не хотят, чтобы люди делать , что они хотят в базе данных. Они запрещают выбор/вставку/обновление/удаление на самих таблицах. Каждое действие контролируется процедурой, которая проверяется администратором баз данных. Я могу понять, откуда взялось это мышление ... особенно, когда у вас есть куча любителей, все с их руками в ваша база данных.

Но времена изменились, и NHibernate отличается. Он невероятно зрелый. В большинстве случаев он будет лучше писать SQL, чем ваш DBA :).

Вы по-прежнему должны защищать себя от выполнения чего-то глупого. Как говорит человек-паук, «с большой силой приходит большая ответственность»

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

1

ручки инъекции SQL Лучших ОРМОВ пути создания параметризованных запросов. В NHibernate, если вы используете LINQ to NHibernate или Criteria/Query над методами записи запросов, запросы автоматически параметризуются, если вы динамически создаете запросы HQL/SQL самостоятельно, вы более vunerable и должны иметь в виду, что ваш запросы должны быть параметризованы.

Смежные вопросы