Найти - Пользователи
Полная версия: SQL injection в SQLObject
Начало » Pyramid / Pylons / TurboGears » SQL injection в SQLObject
1
PooH
Посоветуйте как защититься от сей напасти. SQLObject сам по себе не спасает, хотя запросы генерил толко через ОРМ. Достаточно ли тут будет средств FormEncode или необходимы дополнительные телодвижения?
pythonwin
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-запрос”)
PooH
pythonwin
PooH, а SQL injection в SQLObject - это что такое?
ну в запросе вида
parcel.ParcelRegistry.select(parcel.ParcelRegistry.q.cadastreNumber.contains(number.strip()))
если подставляется number полученный как параметр GET, получается эскейпнуть ковычку в выражении, что в LIKE.
Сильно не ковырял, но похоже дырка в безопасности.
pythonwin
PooH
parcel.ParcelRegistry.select(parcel.ParcelRegistry.q.cadastreNumber.contains(number.strip()))
а в SQL как должен выглядеть этот запрос?
PooH
SELECT <поля>
FROM parcel_registry
WHERE cadastre_number LIKE '%<содержимое number>%'

и вот получается загнать такой number, что ковычки закрываются, а дальше влепить свой запрос
pythonwin
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)
j2a
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. надеюсь, пробовать будешь на тестовой БД ;) ?
pythonwin
j2a
print User.select(User.q.user_name.contains(“an'; DELETE FROM tg_user WHERE ‘foo’='foo”))
понятно :)
тогда вопрос - при каких обстоятельствах, кроме кроме целенамеренной вставки второго запроса, может возникнуть подобная ситуация?
j2a
Это уязвимость. Подробности см. http://ru.wikipedia.org/wiki/SQL_%D0%B8%D0%BD%D1%8A%D0%B5%D0%BA%D1%86%D0%B8%D1%8F
pythonwin
j2a
Это уязвимость. Подробности см. http://ru.wikipedia.org/wiki/SQL_%D0%B8 … 0%B8%D1%8F
спасибо за ссылку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB