2009-08-18 2 views
0

사용자 입력을받은 경우 먼저 유효성을 검사 한 다음 데이터베이스에 저장하기 전에 위생 처리를 수행하면 차이가 있습니까?'before_validate'또는 'before_save'에 사용자 입력을 삭제해야합니까?

unsanitized 입력의 유효성을 검사하는 데 위험이 있습니까?

UPDATE & 설명 (나는 '는 살균'말할 때 내가 주로 HTML 태그 밖으로 제거 평균) : 나는 데이터베이스에 HTML 태그를 붙이지 않을 겁니다

합니다. 저장하기 전에 입력을 위생 처리 하겠지만 - 내 모델을 검증 한 후에. 유효성 검사와 위생 처리가 분리 된 이유는 그것이 별도의 라이브러리이기 때문입니다. 유일한 질문은 'before_validate'또는 'before_save'에 대해 'sanitize'를 호출해야하는지 여부입니다.

답변

0

왜 HTML 스트립 핑 (또는 탈출)을 다른 유효성 검사와 분리합니까? 그것은 모두 똑같은 것이 아닌가?

왜 HTML 태그를 나중에 스트립하기 위해서만 데이터베이스에 넣을까요? 데이터베이스가 일시적으로 올바르지 않습니다.

"유효성 검사"와 "위생적"을 구분하는 이유가 표시되지 않습니다. 그들은 같은 동전의 양면입니다. 모두 수행 데이터를 데이터베이스에 저장하기 전에 데이터가 완전한지 확인할 수 있습니다.


"유일한 질문은 'before_validate'또는 'before_save'에 'sanitize'를 호출해야하는지 여부입니다."

구별하기가 너무 어둡습니다. 둘 다해야합니다. 일반적으로 HTML을 시험하고 검증하고 싶지는 않습니다.

따라서 HTML 태그를 제거하고 (2) 남아있는 내용의 유효성을 검사 할 때 "위생적"인 경우에만 유용합니다.

다른 방법으로 해결할 수 있을지 확신하지 못합니다.

0

데이터베이스에 제출하기 전에 항상 유효성을 확인하고 위생 처리하십시오. 그렇게하지 않으면 데이터베이스를 SQL 주입 공격에 노출시킬 수 있습니다.

당신이하는 순서는 사용자가 원하는 것을 따라 달라집니다. 먼저 검증 경우에, 당신은 사용자에게 다시 확인을 제공 할 수 쉽게

필수 XKCD 만화 (이 작업을 수행하기 위해 자바 스크립트 정규 표현식을 사용할 수 있습니다) :

alt text

+1

매우 관련이 없습니다. – conor

1

내가 생각할 수있는 유일한 위험을 는 광범위한 클라이언트 측 유효성 검사를 수행하는 경우입니다. 오류 메시지의 유효성을 검사 한 다음 페이지에 값을 다시 보내면 문제가 발생할 수 있습니다.

예를 들어, 숫자 만 포함해야하는 텍스트 상자가 있고 사용자가 해당 텍스트 상자에 문자를 입력하면. 클라이언트 측 스크립트가 " 'somevalue'가이 텍스트 상자에 대해 유효하지 않은 값입니다."와 같은 오류 메시지를 생성하면 사용자가 상자에 입력 한 내용을 페이지에 다시 삽입합니다. 어느 쪽이든 그것은 해당 사용자의 세션에만 영향을 미칩니다.

+0

네, 네 말이 맞아, 나는 데이터베이스에 저장할 것인지 결정하기 전에 내 모델에 대해 유효성을 검사하고 있으므로 어떤 딸꾹질도 그 사용자에게만 영향을 미칠 것이라고 생각한다. – conor

관련 문제