someposts은 검색 상자에서 사용자 입력을 ActiveRecord Parameterized 문으로 변환하는 것에 대해 설명했습니다.이 문은 SQL 주입에 취약 할 수 있지만 솔루션이있을 수 있습니다.레일 : SQL 주입에 대해 여전히 혼란 스럽습니다
검색 방법은 다음과 같습니다. 사용자가 검색 창에 이런 식으로 뭔가를 입력 :
query = ["name LIKE ? AND address.town NOT LIKE ?", "hello", "villa"]
에 대한 : 내부적으로
name="hello" AND NOT address.town="Villa"
, 내가로 변환
다음if search
query = convert_search_to_query search
begin
includes(:address).where(query)
# rescue Exception ...
...
...
내 생각 : 단순히 사용자 -을 확인 입력 된 속성 (이 경우 "name", "address.town")을 사용하여 허용 가능한 사용자 속성 목록에이라는 일치 항목이 정확히 일치하는지 확인하십시오 ().
내가 이것을 수행한다면 사용자 입력의 유일한 부분을 처리하기 위해 매개 변수화 된 문 ('?')을 사용하고 있으므로 SQL 삽입이 불가능할 것이라고 생각합니다. 그가 각 속성에 대해 입력 한 값.
여기에있는 다른 게시물에서 읽은 내용을 토대로이 코드가 일반적인 매개 변수화 된 검색보다 더 취약 할 수는 없지만 SQL 주입에 대한 많은 경험이 없습니다. 그것은 취약한가요? 또한
: 내가 거기에 도움을 줄 수 있습니다 플러그인이 있습니다,하지만 내가 원하는 것은 정말 매우 간단합니다, 이미 작동하고, 나는 오히려만큼 가볍고 내 응용 프로그램을 유지 거라고 이해
가능한.
레일에 주사를 방지하려면 활성 레코드 만 사용하십시오. 레일에서 직접 SQL 쿼리를 수행 할 필요가 없습니다. –
사용자가 동적 쿼리를 입력 할 수 있습니까? – ineedahero
ActiveRecord는 SQL이 작동하는 곳이면 어디에서나 작동합니다. 설명서를 읽으십시오. SQL을 사용하고 주입에 대해 걱정해야하는 것보다 훨씬 쉽습니다. –