Форум сайта python.su
Добрый день!
Есть задача: в бд создается временная таблица для обрабтки:
tblname="tmp_tbl_%s_%s" % (userid, flname) # таблица вида: tmp_tbl_1_889003198403_01112012
cur=connection.cursor()
cur.execute('create table %s (code integer, name varchar(255), \
producer varchar(255));', [tblname])
Офлайн
Ты же как параметр SQL-запроса передаёшь, оно и экранирует.
В плане безопасности наверно можешь quote_name (https://github.com/django/django/blob/master/django/db/backends/postgresql_psycopg2/operations.py#L71-74) заюзать ну и формировать запрос банальным форматированием строк
Отредактировано slav0nic (Ноя. 1, 2012 13:31:27)
Офлайн
гмм, так и понял
В принципе, экранирование нужно при извлечении данных из ячейки таблицы. Если я обрабатываю таблицу select-ом (на основе этой таблицы и существующих моделей будет строиться запрос, объединяющий join-ом поля из нескольких таблиц) - по идее можно не бояться, что в ячейках будет записано нечто вроде “delete * from tablename” - ведь конкретная ячейка браться не будет. Так?
Офлайн
глянь я редактировал пост выше, бояться стоит, юзай quote_name, в джанге в бекенде им везде оборачивают имена таблиц
Отредактировано slav0nic (Ноя. 1, 2012 13:35:56)
Офлайн
Не, имя таблицы формируется у меня на сервере. Юзер не может воздействовать на него. Фишка в данных, которые закачиваются в таблицу.
Эти данные - отправляет пользователь. И, теоретически, может набросать чего только вздумает.
Офлайн
slav0nicХорошо бы, конечно, глянуть. Но доступ сильно ограничен. Придется ждать вечера.
В плане безопасности наверно можешь quote_name (https://github.com/django/django/blob/master/django/db/backends/postgresql_psycopg2/operations.py#L71-74) заюзать ну и формировать запрос банальным форматированием строк
Офлайн