Squeak.ru - шаблоны программирования

Нужна ли форма отправки Rails для защиты от SQL-инъекций или XSS-атак?

Я разрабатываю безопасное приложение Rails на защищенном внутреннем сервере, хотя я все еще хочу защитить его от любых SQL-инъекций или XSS-атак. Я знаю, что если у меня есть окно поиска, я могу использовать что-то подобное в своей МОДЕЛИ для защиты приложения от SQL-инъекций:

def self.search(search)
    Project.where("project_title LIKE ?"                 
                   "%#{search.strip}%"
end

Как насчет формы отправки с прямыми действиями в базе данных, скажем, формы на projects/new, нужно ли мне также защищать этот ввод от SQL-инъекций, и если да, то как я могу этого добиться?


Ответы:


1

Вы должны заботиться о внедрении SQL всякий раз, когда используете конкатенацию строк с любым пользовательским вводом для создания фрагментов SQL. Если вы используете параметры, все в порядке.

Например, это не уязвимо для SQL-инъекций:

Project.where("project_title LIKE ?", "%#{search.strip}%")

Но это уязвимо, поскольку параметр запроса записывается непосредственно в SQL-запрос, и база данных не может узнать, где заканчивается предполагаемый запрос, поэтому пользователь может вводить дополнительные части в этот запрос через search параметр:

Project.where("project_title LIKE %#{search.strip}%")

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

Итак, просто чтобы уточнить: любой вызов метода Rails защищен от SQL-инъекций, если вы используете ActiveRecord. Вам нужно беспокоиться только тогда, когда вы сами записываете части операторов SQL в виде строк и включаете параметры запроса в эту строку. Приведенный выше пример с LIKE несколько особенный, вам обычно не нужно создавать строки SQL самостоятельно с помощью ORM, такого как ActiveRecord.

15.11.2016
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...