LINUX.ORG.RU
ФорумTalks

Кардинальная защита от SQL-injection


0

0

Ден Каминский предлагает программистам кардинальное решение для защиты от одной из самых распространённых уязвимостей веб-приложений — SQL-injection. Для этого предлагается все введённые пользователем данные кодировать в base64, раскодировать же их значение предлагается уже силами SQL-сервера.

Для реализации подхода предлагается использовать функцию-враппер, изменяющую исходный запрос. Например, если в уже существующем приложении есть запрос вида

$conn->query("insert into posts values($_POST[author] , $_POST[content] );");
то с использованием инструмента от Каминского можно превратить запрос во что-то вроде
$conn->query(eval(b('insert into posts values(^^_POST[author] , ^^_POST[content] );')));
где b - и есть обёртка, заменяющая переменную, обозначенную символом ^^ на её base64 представление:
insert into posts values(b64d('adf..=') , b64d('hJHj...=') );')));
Как несложно заметить, подстановка SQL-кода в запрос при таком подходе просто исключена, поскольку в base64-представлении нет никаких специальных символов.

Набор инструментов предлагает расширение для MySQL, реализующее функции для работы с base64 и примеры функций-обёрток запросов для PHP.

Похожая техника предлагается для защиты от XSS-атак: введённые пользователем данные передаются в коде страницы в виде base64-строки, а специальная JS-функция превращает эту строку в обычный текст, который отображается в браузере без html-разбора. Пример соответствующей javascript-функции тоже входит в набор инструментов.

Найдено на Opennet

Лично на мой взгляд, проще использовать bind-переменные.

Подробности

Перемещено Shaman007 из Security

★★

аффтор подсчитал какой объем информации в base64 придется гонять например для inplace editor или даже простого поля для редактирования в какой нить wiki или системе документооборота?

exception13 ★★★★★
()

бредятина. ОРМ в руки + 1 умная книга и вперед. Борьба со следствием, а не с первопричиной есть признак слабоумия или отсутствия здравого хода мысли.

Deleted
()
Ответ на: комментарий от anonymous

> может должно быть введено число, а предается черте что

можно исключения ловить

name_no ★★
() автор топика
Ответ на: комментарий от Deleted

> Борьба со следствием

Я тоже так думаю, но метод показался интересным, в том числе потому, что предложен не анонимусом с ЛОРа, а уважаемым человеком

name_no ★★
() автор топика
Ответ на: комментарий от ChALkeR

> Зачем бейс64? Есть же функции которые ескейпят, что нужно.И такой интерфейс (c ^^) — кривость.

Насколько я понял, в наборе инструментов есть тулза, которая запрос 1 автоматом превращает в запрос 2, хотя я мог неправильно понять.

name_no ★★
() автор топика
Ответ на: комментарий от exception13

> аффтор подсчитал какой объем информации в base64 придется гонять например для inplace editor

Автор не заставляет разработчиков inplace editor'а пользоваться его изобретением.

name_no ★★
() автор топика
Ответ на: комментарий от volh

А вообще, пусть лучше Каминский дальше «развенчивает мифы» и расставляет точки над DNS, так хоть лулзы словить можно.

volh ★★
()

А про cursors, prepared statements и bind-переменные php-шники-велосипедостроители видимо никогда и не слышали ?

ef37 ★★
()

Уже не помню, когда последний раз делал прямые SQL-вызовы. А экранированием данных занимался ещё раньше последний раз. И это не смотря на то, что MySQL - это мой основной бэкенд, с которым я работаю каждый день.

ORM рулит.

KRoN73 ★★★★★
()

Он не осилил экранирование кавычек, как я понимаю?

Viglim
()
Ответ на: комментарий от KRoN73

> ORM рулит.

быдлокодерам от этого безопаснее не становится. Я вообще не сразу понял, как можно написать код, подверженным sql-инъекциям, а когда понял — удивился тому, как можно писать такой быдлокод. Но проблема тем не менее стоит, стоит остро, вот и товарищ придумал простые инструменты, позволяющие избавить уязвимое приложение от уязвимостей, сохранив заработок для php-кодеров.

name_no ★★
() автор топика
Ответ на: комментарий от ef37

> А про cursors, prepared statements и bind-переменные php-шники-велосипедостроители видимо никогда и не слышали ?

php-шники, предположительно, не слышали. Каминский, предположительно слышал, но решил, что проще сделать вот такой костыль, чем объяснить php-шникам про prepared statements и курсоры

name_no ★★
() автор топика

Похоже на толстый вброс, base64 ничем не лучше ескейпа слешами, или это его расширение MySql не принимает данные, не закодированные в base64?

Похожая техника предлагается для защиты от XSS-атак: введённые пользователем данные передаются в коде страницы в виде base64-строки, а специальная JS-функция превращает эту строку в обычный текст, который отображается в браузере без html-разбора.


А потом думать, почему сайта нету в индексе поисковых систем

А вообще, что думают аналитики насчет этого Дена Камински? У меня создалось впечатление, что это элитный тонкий тролль

goingUp ★★★★★
()

Кардинальная защита от SQL-injection - это использование только хранимых процедур и запрет всяких SELECT'ов, INSERT'ов и прочих UPDATE'ов.

isden ★★★★★
()

а сабж, описанный ТСом, очень сильно смахивает на бред.

isden ★★★★★
()
Ответ на: комментарий от isden

> Кардинальная защита от SQL-injection - это использование только хранимых процедур и запрет всяких SELECT'ов, INSERT'ов и прочих UPDATE'ов.

Тут речь идёт про кардинальную защиту уже написанного уязвимого приложения, а твой вариант нужно внедрять на стадии проектирования.

name_no ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.