LINUX.ORG.RU

Вопрос по sql-инъекции.


0

1

Есть запрос вроде:

SELECT `name` FROM `items` WHERE `id` IN (select `item_id` from `effect_per_items`  where `effect_id` = '2')

Неким образом в качестве вложенного запроса может оказаться чужой код (на практике всё чуть сложнее, но сути это, вроде, не меняет).

Может ли код вложенного запроса содержать что-то вроде DELETE и ко.?


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

Подстановка строки в атрибут value одного из полей формы. Намерен прогонять регэксп на серверной стороне чтобы оставались только числа, однако хочется знать есть ли необходимость.

daris
() автор топика
Ответ на: комментарий от drakmail

Да в любом фреймворке что-нибудь да есть для таких случаев :) В Рельсах точно должно быть.

power
()
Ответ на: комментарий от helios

> Кастонуть в int и радоваться.
Да-да, кастни. А потом, если эти записи как-то обрабатываются, будешь ловить массу занятных ошибок.

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

>Язык? Фреймворк?

Rails. Я так и не понял: оно надо?

Я бы полез в гугл, но задача второстепенная потому ждёт тут.

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

>Да-да, кастни. А потом, если эти записи как-то обрабатываются, будешь ловить массу занятных ошибок.

[code] irb(main):001:0> %Q[select `item_id` from `effect_per_items` where `effect_id` = '2'].to_i => 0 [/code]

В итоге будет просто 404. Что не страшно, учитывая что человек сам не туда полез.

Во всех остальных местах задница прикрыта, а тут запрос здоровенный и потому гм.. дыры.

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

Да-да, кастни. А потом, если эти записи как-то обрабатываются, будешь ловить массу занятных ошибок.

Какие записи? Ты о чём?

my $id = int $self->param('id');

Можно, правда, добавить проверку $id, но если всё сделано по-уму, то будет стоять проверка на наличие записи с таким id, в случае чего - выдаваться 404.

helios ★★★★★
()

не верю что в рубях нет подстановок (вроде :value или ?)

а если есть - то в чём вопрос-то?

пиши по людски


hren_ego_znaet("SELECT `name` FROM `items` WHERE `id` IN (select `item_id` from `effect_per_items`  where `effect_id` = :value", $param)

[[/code]]

и никаких инъекций. вообще. я гарантирую.
AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

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

daris
() автор топика

Может ли код вложенного запроса содержать что-то вроде DELETE и ко.?

Если СУБД поддерживает нормальный SQL - то не может.

Но: если возник такой вопрос, значит что-то пошло сильно не так.

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

Просто ТС нашел SQL INJ и хочет ещё и базу стереть :}

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