Безопасный SQL-запрос динамического столбца в Postgresql (без внедрения Sql) - PullRequest
0 голосов
/ 11 февраля 2011

Я использую Rails для получения данных из Postgresql, передавая динамический столбец и имя таблицы.

Я не могу использовать ActiveRecord, потому что данные формы, импортированные из шейп-файла, являются динамическими как для таблицы, так и для имени столбца. Я должен использовать двойную кавычку с именем столбца в запросе, чтобы избежать проблемы с таким именем столбца: "addr: city", например.

def find_by_column_and_table(column_name, shape_table_name)
            sql = "SELECT \"#{column_name}\" FROM \"#{shape_table_name}\" WHERE \"#{column_name}\" IS NOT NULL"
            ActiveRecord::Base.connection.select_one(sql)
        end

2 примера сгенерированного SQL-оператора:

SELECT "place" FROM "shp_6c998258-32a6-11e0-b34b-080027997e00"
SELECT "addr:province" FROM "shp_6c998258-32a6-11e0-b34b-080027997e00"

Я хочу убедиться, что в запросе нет SQL-инъекций.

Может кто-нибудь указать мне, как решить эту проблему?

1 Ответ

1 голос
/ 11 февраля 2011

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

...