레일에서 SQL을 살균하는 방법이 있습니까 find_by_sql
?레일, find_by_sql에서 SQL을 살균하는 방법
나는이 솔루션을 시도했다 : Ruby on Rails: How to sanitize a string for SQL when not using find?
을하지만
Model.execute_sql("Update users set active = 0 where id = 2")
그것은 오류가 발생합니다에 실패하지만, SQL 코드가 실행되고 ID 2를 가진 사용자는 이제 비활성화 된 계정이 있습니다. 또한
간단한 find_by_sql
이 작동하지 않습니다
Model.find_by_sql("UPDATE user set active = 0 where id = 1")
# => code executed, user with id 1 have now ban
편집 :
글쎄, 몇 가지 복잡한 쿼리를 만들기 위해 관리자 패널에서 (SQL에 의해 선택) 해당 기능을하도록 요청 내 클라이언트 (조인, 특수 조건 등). 그래서 find_by_sql을 원합니다.
두 번째 편집 : 나는 '악'SQL 코드가 실행되지 않습니다 달성하고자하는
.
관리자 패널에서 query ->Update users set admin = true where id = 232
을 입력하면 UPDATE/DROP/ALTER SQL 명령을 차단하고 싶습니다. 그냥 알고 싶다면 여기서 SELECT를 실행하면됩니다.
일부 시도 후에 나는 결론을 내리고 sanitize_sql_array
불행히도하지 마십시오.
레일에서이를 수행 할 방법이 있습니까 ?? 혼란을 드려 죄송합니다
..
결과에서 발견 ([, PARAMS? "WHERE (이름은 =) 사용자가 SELECT * FROM"]) :'보호 방법 액티브 :: 자료 요구 'sanitize_sql_array'Class' –
내 게시물을 업데이트했습니다. – bor1s
.. 또는 이것을 사용할 수 있기를 바랍니다. ActiveRecord :: Base.send (: sanitize_sql_array, "your string")' – bor1s