2010-07-07 3 views
1

빌드는 SQL 인젝션으로부터 보호합니까?레일 : 빌드 방법으로 SQL 인젝션을 방지 할 수 있습니까?

예 :

@post = @user.posts.build(params[:post]) 
@post.save 

레일 보안 문서에 구축 보지 않았다.

감사합니다.

+0

복제본 : http://stackoverflow.com/questions/2144778/sql-injection-prevention-for-create-method-in-rails-controller – dombesz

+0

이것은 중복되지 않습니다. 빌드'. 또한 중복 가능성은 답변보다는 질문에 대한 의견으로 게시해야합니다. – mikej

답변

2

build 자체는 데이터베이스에 아무 것도 쓰지 않으므로 SQL 주입이 적용되지 않습니다. save을 호출 할 때 개체가 build을 통해 만들었거나 new에 특성을 전달하거나 개별 attribute= 메서드를 사용하는 것과 같은 다른 메커니즘을 통해 개체가 생성되었는지 여부는 중요하지 않으며 개체를 데이터베이스에 저장하는 데 동일한 코드가 사용됩니다. documentation on build에서

:

조인 테이블을 통해이 객체 에 속성을 인스턴스화와 연결되어 있습니다 컬렉션 유형의 새 오브젝트를 돌려줍니다 만, 아직 저장되지 않았습니다.

save 방법은 결과 insert 또는 create 쿼리는 SQL 주입에 감염되지 않도록 당신이 (예를 들어, MySQL을)를 사용하는 데이터베이스에 적절한 방법을 사용하여 속성 값의 모든 따옴표 등 탈출합니다. update_attributesfind으로 전달되는 매개 변수화 된 :conditions에도 동일하게 적용됩니다. 조심해야 할 때와 수동 이스케이프를해야하는 경우는 리터럴 문자열을 쿼리로 데이터베이스 연결에 전달하는 경우입니다.

+0

좋습니다. 그러나 위의 코드 샘플은 SQL injection을 필터링 할 것입니까? 그 부분은 아직 불분명하다. 감사! – djburdick

+0

@bandhunt 질문에있는 코드가 잘되어 있으며 SQL 삽입 시도를 걸러 낼 수 있음을 명확히하기 위해 대답을 업데이트했습니다. – mikej

관련 문제