Rails: разрешить свободный текстовый SQL-фильтр и по-прежнему избегать SQL-инъекций - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть требование, когда экран позволяет и конечному пользователю создать фильтр, который в основном является любым допустимым фрагментом sql.По независящим от меня причинам - это то, что нужно, поэтому мне нужно работать в пределах этой границы.

Этот фрагмент sql добавляется к предложению where в выражении sql. В настоящее время во избежание неприятных действий вход в систему при запуске sql ограничен операциями выбора в требуемых таблицах.

Есть ли способ в Rails (2.3), чтобы я мог уменьшить любой риск атак SQL-инъекций, но все же разрешить ввод свободного текста, так что могут быть определены очень сложные критерии фильтрации?

Приветствия

1 Ответ

1 голос
/ 15 сентября 2010

Добавление второго соединения с запретом всей политики доступа с доступом только для чтения к определенной базе данных и выбором таблиц или представлений таблиц без конфиденциальных столбцов.Имена представлений могут совпадать с именами таблиц, если вы вводите отдельную схему.Конечно, ваша СУБД должна поддерживать все эти функции.Как только вы это сделаете, БД позаботится обо всей безопасности.

Безопасность по синтаксису очень трудно гарантировать - зависит от синтаксических особенностей SQL базы данных (и ошибок), поскольку базы данных имеют свои собственные приемы sqlinjection.Также трудно правильно определить, что не так, с помощью простого синтаксического анализатора, например: [УДАЛИТЬ ИЗ], но [ВЫБРАТЬ * ИЗ X, ГДЕ НАМ НРАВИТСЯ "% delete from our records%"] - наконец, было бы проще реализовать простой ala-SQL-DSL-анализатор и перевод AST в SQL с экранированием не маркерных элементов.Но все еще очень сложный и с риском.

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