2012-12-25 2 views
-1

모든 곳에서 나는 "절대 (항상) 외국 입력을 신뢰하지 마라"를 찾습니다. 그들은 모든 사용자 입력의 유효성을 검사합니다. 그러나 나는 내가 무엇을 확인해야하는지 확신하지 못한다. 사용자가 악의적 인 코드를 입력하면 사용자 입력의 유효성을 검사하는 표준이 있습니까? 사실이 악성 코드가 무엇인지, 그리고 어떻게 검증하는지 알고 싶습니다.php에서 사용자 입력의 유효성을 검사하는 표준이 있습니까?

약간의 연구를 한 후 이메일에 FILTER_VALIDATE_EMAIL, 비밀번호 확인을 위해 , 비밀번호 확인을 위해 표준 password.php를 찾았습니다. 그러나 이름, 텍스트 영역, 전화 번호, 사용자 이름 등과 같은 다른 입력 양식의 경우 유효성을 검사하는 표준이 있습니까?

+2

입력이 잘못되었거나되지 않았는지 생각하는 방법은 _you_이 (가) 어떻게 될지 예상하고 어떻게 나중에 사용 하시겠습니까? – Passerby

+0

음, 사용자 입력을 신뢰하지 않는 한 가지 이유는 다음과 같습니다. http://xkcd.com/327/ –

+0

글쎄, 나중에 어떻게 될지 예상합니다. 하지만 먼저 사용자가 내 사이트를 공격하기 위해 악의적 인 입력을 입력하지 않았는지 확인해야합니다. 그럼 내가 필요로하는 다른 유효성 검사를 할 것입니다. – asdfkjasdfjk

답변

3

은 업무 규칙에 따라 입력을 확인해야합니다 (전자 메일 유효성 검사의 경우). 당신은 하여 출력 미디어를 기반으로 출력을 탈출해야 - 당신은 당신이 HTML을 탈출하는 브라우저로 데이터를 보낼 때, 당신은 데이터베이스에 보낼 때 - 당신이 등

+0

동의하지만 수정합니다. "db 특정 문자"는 일반적인 오해입니다. "db 특정 문자"가 없습니다. 서로 다른 쿼리 파트에 대한 서로 다른 서식 규칙이 있습니다. –

1

아니요 사용자 입력의 유효성을 검사하는 표준은 없습니다.

모든 단일 값은 그 의미와 향후 용도에 따라 별도로 유효성을 검사해야합니다.

2

모든 따라 검증 할 필요가 DB 특정 문자를 이스케이프하는 프로젝트 및 유스 케이스 요구 사항
네이티브 PHP에는 완벽한 독립 검증 솔루션이 없습니다. 당신은 훌륭한 젠드 사용할 수 있습니다
은 정말 강력하고, 당신이 지금 필요로하는 모든이 포함되어 있기 때문에 좋은 선택입니다 (심지어 젠드없이)
수집을 http://framework.zend.com/manual/1.12/en/zend.validate.set.html
유효성 검사기 모든 당신은 미래에 혹시 필요합니다.

0

유효성 검사를 sanization과 혼동하지 마십시오. 이전 답변은 모두 우수하지만 사용자 입력이 특정 형식이어야 할 때 유효성 검사가 수행되어야한다고 지적하고 싶습니다. 전자 메일은 전자 메일이므로 올바른 전자 메일 주소로 전자 메일을 보낼 수 있습니다 (주소는 반드시 활성 주소는 아닙니다). 숫자는 숫자이므로 입력은 데이터베이스의 integer/float 열에 아무런 문제없이 삽입 될 수 있습니다.

일부 유효성 검사 작업은 데이터베이스/응용 프로그램 (정수 유효성 검사와 같은)을 안전하게 유지하는 데 도움이됩니다. 그러나 자유 텍스트, 전화 번호, 우편 주소 등을 확인하는 방법은 무엇입니까? 이런 종류의 입력은 대부분의 시간을 위생 처리해야합니다. 특수 문자를 이스케이프하거나 사용자의 악의적 인 DELETE * 종류의 입력이 실행되지 않도록하십시오.

또한 전화 번호, 우편 주소 등의 유효성을 검사 (살균하지 않음)하려는 사람들을위한 단어입니다. 인터넷은 전 세계적입니다 (정말 ...). 국가 서식 규칙에 따라 너무 엄격한 유효성 검사 규칙을 사용하여 사용자 입력을 제한하기를 너무 열망하지 마십시오. 네이티브 핀은 엄격한 포맷팅 규칙이 매우 짜증나는 경우가 많았으며 때로는 정확한 주소를 지정해야하는 엄격한 포맷을 매우 영리하게 정의했기 때문에 올바른 정보를 제공하기가 불가능한 경우가있었습니다. 그의 주소에 맞는 형식입니다.

관련 문제