SQL 인젝션의 동수 경고 :레일 내 모델의 범위를 가지고
scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name
joins("INNER JOIN #{task_table}
ON #{task_table}.user_id = #{user.id}
AND (#{task_table}.type_id = #{table_name}.type_id)
AND (#{task_table}.manager_id = #{table_name}.manager_id)
")
}
그래서 나는이 경고를 동수 보고서를 실행 한 후 :
assigned_to_user | SQL Injection | Possible
그래서 나는 다음과 같은 시도 :
scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name
joins(ActiveRecord::Base::sanitize("INNER JOIN #{task_table}
ON #{task_table}.user_id = #{user.id}
AND (#{task_table}.type_id = #{table_name}.type_id)
AND (#{task_table}.manager_id = #{table_name}.manager_id)
"))
}
SQL 앞면과 뒷면에 '
(아포스트로피)을 추가했기 때문에이 기능이 작동하지 않습니다. 그래서 이것을 일부 결과를 반환하는 쿼리의 일부로 사용하고이 범위를 적용하면 잘못된 SQL이 생성됩니다.
scope :assigned_to_user, ->(user) {
task_table = UserTask.table_name
joins("INNER JOIN #{task_table}
ON #{task_table}.user_id = ?
AND (#{task_table}.type_id = #{table_name}.type_id)
AND (#{task_table}.manager_id = #{table_name}.manager_id)
", user.id)
}
도 문을 작성하지 않습니다 :
나는이 시도했다. 그리고 작동하지 않았고 언급 할 가치조차없는 다른 것들을 시도해 보았습니다. 아무도이 문제를 해결하는 방법을 알고 있습니까?
,이 경우 동수 경고가 될 것입니다 거짓 긍정적 인 :
그냥 그냥 변수에 쿼리를 움직일 수 동수를 종료합니다 귀하의 연구에 감사드립니다. https://github.com/presidentbeef/brakeman/pull/634 – Justin