Предотвращение SQL инъекций для онлайн-запросов SQL - PullRequest
1 голос
/ 29 мая 2020

У меня есть небольшой сайт проекта Python, где посетитель может попрактиковаться в написании кода SQL. Этот код действительно запускается и возвращает значения. Я знаю, что мне нужно предотвратить инъекцию SQL, но я не уверен, что это лучший подход, поскольку цель сайта заключается в том, чтобы пользователи могли писать и выполнять произвольный код SQL для реальной базы данных.

Что мне делать, чтобы предотвратить злонамеренное поведение? Я хочу запретить такие операторы, как DROP xyz ;, но пользователи все равно должны иметь возможность выполнять код. Я думаю, что, возможно, идеальное решение состоит в том, чтобы пользователи могли «читать» только из базы данных, ie. они могут выполнять только операторы SELECT (или их варианты). Но я не уверен, что «только для чтения» фиксирует все крайние случаи злонамеренного поведения. 1007 * Сейчас использую SQLite, но, вероятно, перейду на postgres

Сейчас я строго использую SQL, но, возможно, в будущем захочу добавить Python и другие языки Сайт построен с использованием Python (Flask)

Любые идеи и предложения будут полезны

1 Ответ

1 голос
/ 29 мая 2020

Невозможно предотвратить внедрение SQL для сайта, который принимает SQL операторы как вводимые пользователем и выполняет их дословно. цель сайта - SQL инъекция. Единственный способ предотвратить внедрение SQL - не разрабатывать этот сайт.

Если вы разрабатываете сайт, как вы можете предотвратить вредоносное SQL? Ответ: не позволяйте злоумышленникам получить доступ к этому сайту. Разрешить использовать его только доверенным пользователям.

Хорошо, я предполагаю, что вы действительно хотите разработать сайт и разрешить всем пользователям, не выполняя больших усилий по их проверке.

Затем возникает задача ограничить потенциальный ущерб, который они могут нанести. Тщательно ограничьте их права, чтобы у них был доступ только для создания объектов и выполнения запросов в определенной схеме c.

Или, что еще лучше, запустите контейнер Docker для каждого человека, чтобы иметь свой собственный экземпляр частной базы данных , и ограничить ЦП и память, которые может использовать контейнер.

...