Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2008 14:28:33

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

Посоветуйте как защититься от сей напасти. SQLObject сам по себе не спасает, хотя запросы генерил толко через ОРМ. Достаточно ли тут будет средств FormEncode или необходимы дополнительные телодвижения?



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

Офлайн

#2 Янв. 10, 2008 08:50:12

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

PooH, а SQL injection в SQLObject - это что такое?
если ты говоришь про запросы на чистом SQL, то делаю так:

import sqlobject
from sqlobject import sqlbuilder
uslovie=…
conn = soClass._connection
conn.queryAll(conn.sqlrepr(sqlbuilder.Select(items = , where = uslovie)))


или

conn = soClass._connection
conn.query(“сложный SQL-запрос”)



Офлайн

#3 Янв. 10, 2008 10:12:10

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

pythonwin
PooH, а SQL injection в SQLObject - это что такое?
ну в запросе вида
parcel.ParcelRegistry.select(parcel.ParcelRegistry.q.cadastreNumber.contains(number.strip()))
если подставляется number полученный как параметр GET, получается эскейпнуть ковычку в выражении, что в LIKE.
Сильно не ковырял, но похоже дырка в безопасности.



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

Отредактировано (Янв. 10, 2008 11:13:02)

Офлайн

#4 Янв. 10, 2008 11:23:33

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

PooH
parcel.ParcelRegistry.select(parcel.ParcelRegistry.q.cadastreNumber.contains(number.strip()))
а в SQL как должен выглядеть этот запрос?



Офлайн

#5 Янв. 10, 2008 14:02:05

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

SELECT <поля>
FROM parcel_registry
WHERE cadastre_number LIKE '%<содержимое number>%'

и вот получается загнать такой number, что ковычки закрываются, а дальше влепить свой запрос



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

Офлайн

#6 Янв. 11, 2008 10:41:59

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

PooH
дальше влепить свой запрос
print User.select(User.q.user_name.contains('an'))
SELECT tg_user.id, tg_user.user_name, tg_user.email_address, tg_user.display_name, tg_user.password, tg_user.created, tg_user.firstname, tg_user.lastname, tg_user.maiddlename, tg_user.phones, tg_user.mobile_phones, tg_user.rn_n FROM tg_user WHERE ((tg_user.user_name) LIKE ('%an%'))

и

print User.select(User.q.user_name.contains('%an%'))
SELECT tg_user.id, tg_user.user_name, tg_user.email_address, tg_user.display_name, tg_user.password, tg_user.created, tg_user.firstname, tg_user.lastname, tg_user.maiddlename, tg_user.phones, tg_user.mobile_phones, tg_user.rn_n FROM tg_user WHERE ((tg_user.user_name) LIKE ('%\%an\%%'))


работают одинаково как в sqlobject так и при обрашении к БД (PostgreSQL) средствами самой СУБД (pgadmin3)



Офлайн

#7 Янв. 11, 2008 15:12:16

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

pythonwin
PooH
дальше влепить свой запрос
print User.select(User.q.user_name.contains('an'))
А так:
print User.select(User.q.user_name.contains(“an')); DELETE FROM tg_user WHERE ‘foo’='foo”))
?

p.s. надеюсь, пробовать будешь на тестовой БД ;) ?



Отредактировано (Янв. 11, 2008 15:14:49)

Офлайн

#8 Янв. 11, 2008 15:27:21

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

j2a
print User.select(User.q.user_name.contains(“an'; DELETE FROM tg_user WHERE ‘foo’='foo”))
понятно :)
тогда вопрос - при каких обстоятельствах, кроме кроме целенамеренной вставки второго запроса, может возникнуть подобная ситуация?



Офлайн

#9 Янв. 11, 2008 16:37:11

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

Это уязвимость. Подробности см. http://ru.wikipedia.org/wiki/SQL_%D0%B8%D0%BD%D1%8A%D0%B5%D0%BA%D1%86%D0%B8%D1%8F



Офлайн

#10 Янв. 11, 2008 18:08:22

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

SQL injection в SQLObject

j2a
Это уязвимость. Подробности см. http://ru.wikipedia.org/wiki/SQL_%D0%B8 … 0%B8%D1%8F
спасибо за ссылку.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version