Может ли быть уязвимым сайт, использующий PDO?

PN
На сайте с 22.08.2012
Offline
103
793

Уважаемые форумчане. Скажите, пожалуйста, может ли быть уязвимым сайт, на котором используется PDO? Если исключить случаи, когда в LIMIT вставляют напрямую.

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
ДП
На сайте с 23.11.2009
Offline
203
#1

Ну PDO тоже надо уметь правильно приготовить, так что теоретически может.

Находят же иногда баги в разном ПО - тот же heartbleed например.

TF-Studio
На сайте с 17.08.2010
Offline
334
#2

PDO и работа с БД - это только часть защиты.

Банально в логике можно просчитаться и получить уязвимость

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
dma84
На сайте с 21.04.2009
Offline
168
#3
TF-Studio:
PDO и работа с БД - это только часть защиты.
Банально в логике можно просчитаться и получить уязвимость

Как вам такая "защита"?


PDO->query('INSERT INTO `table` SET `colname` = "'.$_POST['param'].'"');
🤣
PN
На сайте с 22.08.2012
Offline
103
#4
dma84:
Как вам такая "защита"?

PDO->query('INSERT INTO `table` SET `colname` = "'.$_POST['param'].'"');
🤣

я говорю про нормальное использование с плейсхолдерами

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5

Во-первых PDO эмулирует prepared statements по крайней мере для MySQL. Это позволяет делать такие вещи, как:


$pdo->query('SET NAMES gbk');
$var = "\xbf\x27 OR 1=1 /*";
$query = 'SELECT * FROM test WHERE name = ? LIMIT 1';
$stmt = $pdo->prepare($query);
$stmt->execute(array($var));

В результате исполнится запрос SELECT * FROM test WHERE name = '縗' OR 1=1 /*' LIMIT 1

Кроме того, уязвимости не ограничиваются SQL-инъекциями.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
D8
На сайте с 16.06.2007
Offline
74
dm8
#6

Мда, старею, - привык любые входящие параметры проверять,

никаких инъекций гарантированно.

dma84
На сайте с 21.04.2009
Offline
168
#7
Оптимизайка:
Во-первых PDO эмулирует prepared statements по крайней мере для MySQL. Это позволяет делать такие вещи, как:


$pdo->query('SET NAMES gbk');
$var = "\xbf\x27 OR 1=1 /*";
$query = 'SELECT * FROM test WHERE name = ? LIMIT 1';
$stmt = $pdo->prepare($query);
$stmt->execute(array($var));


В результате исполнится запрос SELECT * FROM test WHERE name = '縗' OR 1=1 /*' LIMIT 1

Кроме того, уязвимости не ограничиваются SQL-инъекциями.

Так удобнее:


$sth = DB::prepare
('
UPDATE `table`
SET
`param` = :param,
WHERE
`id` = :id
')
->bindValue('param', $param, PDO::PARAM_STR)
->bindValue('id', $id, PDO::PARAM_INT)
->execute();

Правда, здесь своя обёртка над PDO

Оптимизайка
На сайте с 11.03.2012
Offline
396
#8
dma84:
Так удобнее

Пример был приведен в качестве демонстрации того, что в prepared statements все равно можно что-то протолкнуть, а не для демонстрации красоты синтаксиса

---------- Добавлено 05.06.2016 в 10:16 ----------

dm8:
Мда, старею, - привык любые входящие параметры проверять,
никаких инъекций гарантированно.

Из-за этого девушки страдают

Mik Foxi
На сайте с 02.03.2011
Offline
1176
#9
Оптимизайка:

Из-за этого девушки страдают

Это пример рукожопости отдельно взятого программиста. Обрабатывать все входящие данные самому - это нужно взять за правило, а не надеяться что какой-то компьютерный интелект в виде pdo сообразит что нужно делать и как все обработать.

Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ Форум на замену серчу: https://foxi.biz/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий