Rails のセキュリティについて学び始めたばかりで、ユーザーが CSV ファイルをデータベースにアップロードできるようにしながら、セキュリティの問題を回避するにはどうすればよいか考えています。Postgres の「stdin からのコピー」機能を使用して、データを CSV から一時テーブルにアップロードし、それを別のテーブルへのアップサートに使用します。これは基本的なコードです (この投稿のおかげで):
conn = ActiveRecord::Base.connection_pool.checkout
raw = conn.raw_connection
raw.exec("COPY temp_table (col1, col2) FROM STDIN DELIMITER '|'")
# read column values from the CSV line by line in the following format:
# attributes = {column_1: 'column 1 data', column_2: 'column 2 data'}
# line = "#{attributes.values.join('|')}\n"
rc.put_copy_data line
# wrap up copy process & insert into & update primary table
列の値をサニタイズするために何ができるか、または何をすべきか疑問に思っています。Rails 3.2 と Postgres 9.2 を使用しています。