Frage

In ruby ??Active nicht dynamisch für Update-Bindung zur Verfügung stellt und Einsatz sqls, natürlich i raw SQL verwenden kann, aber das braucht Verbindung aufrechterhalten, so dass ich wissen wollen, ob es einfacher Weg ist, aktualisieren oder SQL einfügen zu entkommen, bevor die Ausführung wie Code unten:

ActiveRecord::Base.connection.insert(sql)

ich glaube, ich Code von gsub schreiben kann, aber ich weiß, wenn es eine bereit Methode, es zu tun ist.

War es hilfreich?

Lösung

Sie können dies tun:

ActiveRecord::Base.send(:sanitize_sql,["select * from my_table where description='%s' and id='%s'","mal'formed", 55], "my_table")

Natürlich bedeutet dies, dass Sie die separat params. Nicht sicher, ob es anders funktionieren wird, aber probieren Sie es aus.

Andere Tipps

In Rails> = 3.2.5 folgende Arbeiten für mich:

evil_input = '"\';%#{}\"foo'
ActiveRecord::Base.connection.quote(evil_input)
=> "'\"'';%\#{}\\\"foo'"

Es ist wirklich nicht klar, was Sie fordern, weil Ihr Titel spricht über eine Zeichenfolge vor Einfügung oder Aktualisierung zu entkommen, dann in den Tags, die Sie über SQL-Injection zu sprechen.

Wenn Sie Active müssen kodieren automatisch haben / ändern Inhalt vor dem Einsetzen oder Aktualisierung, haben Sie überprüft, Active der Rückrufe ? Der before_save Rückruf wird ausgelöst, wenn Sie ein Update tun oder erstellen. Wenn Sie den Inhalt ändern möchten, bevor es gespeichert werden soll, dass ein guter Ort ist, es zu tun.

Wenn Sie auf SQL-Parameter verwenden wollen, anstatt die Variablen in den „update“ Einfügen oder „Insert“ -Aussagen zu vermeiden SQL-Injection, verwenden Sie dann ARs Variablenbindungen . Scrollen Sie zum Abschnitt über die „Bedingungen“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top