sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails 5 SQL Injection

Brug af quote er sikker. Jeg læste svarene på den side, du linkede til , og jeg kan ikke se nogen sige det quote er usikker. Jeg kan se dit spørgsmål om brug af "citater". Ja, hvis du bare sætter anførselstegn rundt om en streng, er det usikkert, f.eks.:

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

Men ved at bruge quote (metoden) er fin:

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

Du kan lege rundt i konsollen og prøve dit bedste for at bryde den, men jeg tror ikke, du vil være i stand til:

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

Hvis du lykkes, er jeg sikker på, at Rails-teamet gerne vil vide det (privat)! Men som du kan se, er quote metode gør mere end at sætte et citat i begyndelsen og slutningen.

Da du siger, at du leder efter et autoritativt citat, antyder kommentarerne i selve kildekoden, at det er formålet med disse funktioner at citere brugerinput:

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)

L7-rb2/quoting: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:

(Bemærk, at jeg viser quote_string til kommentaren, men du skal nok bruge quote , som forsøger at finde ud af datatypen og gøre noget passende.)

Her er i øvrigt et spørgsmål, der ligner dit, med et svar fra mig i 2014, og også nogle alternativer:Sådan udføres en rå opdatering sql med dynamisk binding i rails




  1. LPAD() Funktion i PostgreSQL

  2. Sådan bestemmes værdier for manglende måneder baseret på data fra tidligere måneder i T-SQL

  3. Hent N. element af en matrix, der returnerer fra string_to_array() funktion

  4. Apex 5.0:Vis en statuslinje, mens databasehandlingen udføres