Будет ли он избегать SQL-инъекций, не позволяя SQL-ключевые слова в params? - PullRequest
0 голосов
/ 13 июня 2018

Я знаю, что санация параметров (например, удаление кавычек) не является идеальным решением против внедрения SQL, когда вы не можете использовать setParameters ().

Но безопасно ли санировать параметры, проверяя, не содержат ли они (параметры) строки с пустым пробелом после него, как показано ниже ???

'УДАЛИТЬ', 'ALTER', 'DROP', 'SELECT', 'TABLE'

Например, параметр электронной почты передан на сервер, но содержит ключевое слово DROP: String param = "john @ mail'DROP myTable"

SELECT * from Users where email = 'john@mail'DROP mytable'

Итак, моя таблица удалена;

Обратите внимание на пространство, оставленное после каждого ключевого слова.Таким образом, если данные в базе данных содержат перечисленные ключевые слова, но без пробела, они будут разрешены к использованию, в противном случае это должен быть хакер, пытающийся причинить вред моим данным (ALTER TABLE mydb).

Пожалуйста, не стесняйтесь добавлять в качестве примера любой движок SQL: SQL, Oracle, HANA, MySQL

Спасибо

1 Ответ

0 голосов
/ 13 июня 2018

Нет, этого недостаточно.

Пожалуйста, следуйте отраслевым стандартам предотвращения внедрения SQL, которые изложены в OWASP .

Один очевидный пример внедрения SQL дляотправленный вами запрос будет, если кто-то предоставит следующие данные для пользователя:

john@mail' OR '1' = '1

, который выдаст запрос:

SELECT * from Users where email = 'john@mail' OR '1' = '1'

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

Суть в том, чтобы никогда не пытаться «свернуть собственную» защиту от SQL-инъекций.Гораздо умнее людей, чем вы, и я пытались решить эту проблему, и принятый в настоящее время стандарт использования параметризованных запросов - это просто лучшее решение, которое у нас есть на данный момент.

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