sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails 5 SQL Injection

Använder quote är säkert. Jag läste svaren på sidan du länkade till , och jag ser ingen som säger det quote är osäker. Jag ser din fråga om att använda "citat". Ja, om du bara sätter citattecken runt en sträng är det osäkert, t.ex.:

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

Men med quote (metoden) är bra:

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

Du kan leka runt i konsolen och göra ditt bästa för att bryta den, men jag tror inte att du kommer att kunna:

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

Om du lyckas, är jag säker på att Rails-teamet skulle vilja veta (privat)! Men som du kan se, quote metod gör mer än att sätta ett citat i början och slutet.

Dessutom, eftersom du säger att du letar efter ett auktoritativt citat, antyder kommentarerna i själva källkoden att citering av användarinmatningar är det avsedda syftet med dessa funktioner:

lrb#/6. /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)

Hur man kör en rå uppdatering sql med dynamisk bindning i rails




  1. UTC_DATE Exempel – MySQL

  2. Oracle XMLTYPE extrahera rotprologvärde

  3. Säker överföring av data från SQL-server till SQL-server över Internet

  4. MySQL Sum() flera kolumner