Является ли этот метод форматирования строки SQL абсолютно безопасным от внедрения кода? - PullRequest
0 голосов
/ 17 октября 2018

Я хочу создавать SQL-запросы на таких языках, как Java или C #.Всем известно, что вы не должны этого делать:

sql = "SELECT * FROM T WHERE A='" + someString + "'"

Поскольку это позволяет внедрять код, например, с помощью:

someString = "xxx';DROP TABLE T;DECLARE @A CHAR(3) ='xxx"

Всем известно, что вы должны использовать правильные параметры SQL, предоставляемые стандартным API-интерфейсом.доступно на большинстве языков.

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

Мой вопрос прост.Безопасно ли следующее:

 sql = "SELECT * FROM T WHERE A='" + someString.Replace("'","''") + "'"

Если вы считаете, что это зависит от СУБД, пожалуйста, придерживайтесь MySQL.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Прежде всего, это плохая практика.

Это будет плохо в двух условиях, которые я рассмотрел:

  1. , если поле не VARCAHR, это INT?Это не будет работать.
  2. , если ввод "it's ok", это будет "it"s ok", это будет утомительно для преобразования, если это имя пользователя должно быть представлено.

Этобудет больше проблем с вашим методом (но я не учел).Лучший способ - использовать параметры.

0 голосов
/ 17 октября 2018

Даже не слишком далеко.

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

Позвольте мне дать вам небольшой список ссылок, чтобы представить себя:

Шпаргалка по SQL-инъекциям

... поставьте галочку напротив «Если утверждения»или «Строки без кавычек»

таблицы Бобби

И различные вопросы SO:

Какой лучший метод для дезинфекции пользовательского ввода с помощьюPHP?

Какие символы действительно способны вызывать SQL-инъекцию в mysql

Избегает ли удаление опасных символов SQL-инъекций?

Как я могу предотвратить внедрение SQL в PHP?

Этот код предотвращает внедрение SQL?

Какие символынужно ли экранировать, чтобы предотвратить (My) SQL-инъекции?

Защищают ли мой код PHP от инъекций код безопасности htmlspecialchars и mysql_real_escape_string?

...