Передача параметра GET limit непосредственно в проблему безопасности MySQL? - PullRequest
1 голос
/ 15 марта 2012

Я хотел бы знать, если это угроза безопасности, иметь URL-адрес, подобный следующему

http://www.mytestapp.com/results?limit=1234

Параметр limit GET будет затем проверен как допустимое целое число и переданнепосредственно в запрос.

Что произойдет, если пользователь изменит этот параметр на очень большое число?Для огромной базы данных это приведет к эффекту, аналогичному отказу в обслуживании?

Какова наилучшая практика для получения переменного предела результата?

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Не просто передавайте переменную GET непосредственно в ваш запрос.Если бы вы это сделали, то я мог бы сделать SQL-инъекцию следующим образом:

http://www.mytestapp.com/results?limit=1%3BDROP%20TABLE%20USERS

И ваш запрос в итоге выглядел бы так:

select * from some_table where parameter = 3 limit 1;DROP TABLE USERS

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

http://www.mytestapp.com/results?page=1&size=10

Затем в своем бэкэнде убедитесь, что page и size оба являются целыми числами и имеют разумный размер.Может быть, установить ограничения на то, что может быть size, возможно, только кратные от 10 до 100, например.

0 голосов
/ 15 марта 2012

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

Вам также не следует создавать строки запросов, объединяя командную логику с параметрами из ненадежных источников.Вам следует использовать параметризованные запросы, где вы определяете, куда данные вписываются в инструкцию SQL при его создании, а затем связываете значение позже.Это позволяет базе данных различать то, что вы намереваетесь командовать тем, что вы собираетесь представлять данными, предотвращая инъекцию SQL, даже если вы пропустили случай атаки при проверке входных данных (для этого конкретного случая белый список прост ...это не всегда верно или даже возможно).Подробнее о параметризованных запросах можно прочитать на хорошо написанной странице OWASP SQL Injection Prevention Prevention .

0 голосов
/ 15 марта 2012

Основная проблема с передачей параметров в get-строках заключается в том, что они могут открыть для вас атаки SQL-инъекций. Что делать, если кто-то передает это:

http://www.mytestapp.com/results?limit=1234;drop пользователей таблиц;

Вам нужно внимательно следить, чтобы убедиться, что вы дезинфицируете свои входные данные.

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

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

...