PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Rails 5 Wstrzyknięcie SQL

Korzystanie z quote jest bezpieczny. Przeczytałem odpowiedzi na strona, do której prowadziłeś link , i nie widzę nikogo, kto mówi tak quote jest niepewny. Widzę twoje pytanie dotyczące używania "cytatów". Tak, jeśli po prostu umieścisz cudzysłów wokół ciągu, co jest niepewne, np.:

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

Ale używając quote (metoda) jest w porządku:

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

Możesz bawić się w konsoli i starać się ją złamać, ale nie sądzę, że będziesz w stanie:

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

Jeśli ci się uda, jestem pewien, że zespół Rails chciałby (prywatnie) o tym wiedzieć! Ale jak widać, quote metoda to coś więcej niż wklejanie cytatu na początku i na końcu.

Ponadto, ponieważ mówisz, że szukasz autorytatywnego cytatu, komentarze w samym kodzie źródłowym sugerują, że cytowanie danych wejściowych użytkownika jest zamierzonym celem tych funkcji:

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:

(Uwaga, pokazuję quote_string dla komentarza, ale prawdopodobnie powinieneś użyć quote , który próbuje określić typ danych i zrobić coś odpowiedniego.)

Nawiasem mówiąc, oto pytanie podobne do twojego, z odpowiedzią ode mnie w 2014 roku i kilkoma alternatywami:Jak wykonać surową aktualizację sql z dynamicznym wiązaniem w 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. Postgresql, wybierz puste pola

  2. gem install pg nie działa na OSX Lion

  3. Utwórz tabelę sql z ramki danych dask za pomocą map_partitions i pd.df.to_sql

  4. Jak włączyć SSL w PostgreSQL

  5. Dynamiczne tworzenie DAG na podstawie wiersza dostępnego w połączeniu z bazą danych