PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Rails 5 SQL Injection

Menggunakan quote aman. Saya membaca jawabannya di halaman yang Anda tautkan , dan saya tidak melihat ada orang yang mengatakan quote tidak aman. Saya melihat pertanyaan Anda tentang menggunakan "kutipan". Ya, jika Anda hanya memberi tanda kutip di sekitar string, itu tidak aman, mis.:

q = "SELECT * FROM users where email = '#{params[:email]}'"

Tapi menggunakan quote (metode) baik-baik saja:

q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"

Anda bisa bermain-main di konsol dan mencoba yang terbaik untuk memecahkannya, tapi saya rasa Anda tidak akan bisa:

2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")                                                                              
 => "'f''''oo'"

Jika Anda berhasil, saya yakin tim Rails ingin tahu (secara pribadi)! Tapi seperti yang Anda lihat, quote metode tidak lebih dari menempelkan kutipan di awal dan akhir.

Selain itu, karena Anda mengatakan bahwa Anda mencari kutipan otoritatif, komentar dalam kode sumber itu sendiri menunjukkan bahwa mengutip masukan pengguna adalah tujuan yang dimaksudkan dari fungsi-fungsi ini:

https:// /github.com/rails/rails/blob/2471e6391dfe71cfbb8621bdf573729d961d3209/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb#L6-L13

# Quotes the column value to help prevent
# {SQL injection attacks}[http://en.wikipedia.org/wiki/SQL_injection].
def quote(value)

https:// /github.com/rails/rails/blob/0f1d0b1b5254e3678abaabbebb3362a100c10262/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb#L17-L20

# Quotes strings for use in SQL input.
def quote_string(s) #:nodoc:

(Catatan saya menunjukkan quote_string untuk komentar, tetapi Anda mungkin harus menggunakan quote , yang mencoba mencari tahu tipe data dan melakukan sesuatu yang sesuai.)

Omong-omong, ini pertanyaan yang mirip dengan pertanyaan Anda, dengan jawaban dari saya di tahun 2014, dan juga beberapa alternatif:Cara menjalankan sql pembaruan mentah dengan pengikatan dinamis di rails




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan SQL saat mencoba membuat pemicu baru

  2. Batas Kedalaman Stack terlampaui di PostgresQL (After Delete Trigger)

  3. bundel gagal - Tidak dapat menemukan pustaka klien PostgreSQL (libpq)

  4. Bagaimana cara membulatkan nilai milidetik dari timestamp(0) di PostgreSQL?

  5. Tabel partisi berdasarkan huruf pertama dari bidang varchar