0
私は、動的列とテーブル名を渡してPostgresqlからデータを取得するためにRailsを使用しています。Postgresql(SQLインジェクションなし)の安全SQL動的列クエリ
シェイプファイルからインポートされたシェイプデータがテーブル名とカラム名の両方に動的なので、ActiveRecordは使用できません。 問題のような列名を避けるために、クエリで列名をダブルクォートで使用する必要があります。たとえば、「addr:city」です。生成されたSQL文の
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例は:
SELECT "place" FROM "shp_6c998258-32a6-11e0-b34b-080027997e00"
SELECT "addr:province" FROM "shp_6c998258-32a6-11e0-b34b-080027997e00"
私は、クエリにはSQLインジェクションがないことを確認します。
誰も私にこの問題を解決する方法を教えてもらえますか?
これらはしかしSQL識別子では動作しません。ストアドプロシージャのLedgerSMBではこのようなことがたくさんありますが、Perlとplpgsqlの両方でこれを処理する方法があります。私はRubyについて知らない。 –
私はルビーでこれを行うより良い方法を本当に知っていないので、これを投票していますが、pl/pgsqlでEXECUTEを使用して動的識別子をインライン化し、quote_ident(my_identifer)それらを逃れるために。 –