2012-11-23 6 views
14

z szyn aktywny rekord zapytań guide on sql injectionJak używać symboli wieloznacznych w aktywnego rekordu gdzie klauzula przy jednoczesnej ochronie przed SQL injection

Kod ten jest bardzo korzystny:

Client.where ("orders_count = ?”, params [:]) zamówienia

do tego kodu:

Client.where ("orders_count = # {params [: orders]}")

mój problem jest chcę użyć LIKE klauzuli asterisk. Mój stary zapytanie wygląda następująco -

User.where("first_name LIKE '%#{first_name}%'") 

Który jest podatna na SQL injection, ale jeśli mogę to zrobić:

User.where("first_name LIKE '%?%'", first_name) 

Następnie otrzymaną SQL wygląda następująco:

SELECT "users".* FROM "users" WHERE (first_name LIKE '%'michael'%') 

który jest nieważne z powodu dodatkowych pojedynczych cudzysłowów.

Jaki jest najlepszy sposób użycia symboli wieloznacznych i klauzuli LIKE, ale także ochrony przed atakami sql injection?

Odpowiedz

23

Należy zmodyfikować zapytanie takie jak ta

User.where("first_name LIKE (?)", "%#{first_name}%") 
+0

Dzięki za to – mkellyclare

+8

Czy to podatna na SQL injection czy też Szyny zdezynfekować go? –

+0

@KieranAndrews wydaje się być podatny na ataki, ponieważ możesz przekazać więcej znaków specjalnych, takich jak% i _, i będą działać. –

Powiązane problemy