2011-10-15 4 views
1

데이터 유효성을 검사하는 올바른 방법은 무엇입니까? 난 당신이 삽입 기능을 가지고 있다고 의미 :PHP 유효성 검사 - 함수 내부 또는 외부에서?

function newUser($name, $lastname, $age) { 

    // some validation process 

    $this->pdo->prepare("INSERT INTO user VALUES (?,?,?)", 
         array($name, $lastname, $age)); // this is another class 
                 // that runs execute in itself 

} 

그래서 기본적으로 문제가 //some validation procecss 부분이 NEWUSER 기능에서 이루어져야하거나이 기능을 외부에서 수행할지 여부입니까? 클래스에 기본 유효성 검사 규칙을 저장하고 자동으로 내 getpost 값을 필터링하는 요청 클래스를 작성 중이므로 요청하는 중입니다. 그래서 만약 내가 그렇게한다면, newUser 내부에서도 (이와 비슷한 다른 함수에서도) 유효성을 검사한다면, 동일한 입력을 두 번 또는 세 번 유효성을 검사한다는 것을 의미합니다.

newUser 함수에 전달 된 변수가 이미 유효하다고 가정하면 간단히 말해서 잘못 되었습니까? 이 경우 newUser는 내 응용 프로그램에서만 호출됩니다 (제 3자가 권한없이 함수를 실행할 수 있는지 여부는 확실하지 않습니다. 실제로 이것이 질문에 대한 이유입니다). 따라서 변수는 이미 유효성이 검사됩니다. newUser 함수를 호출하기 전에.

P.S : 죄송합니다. 질문이 복잡한 방식으로 묻는다면, 제가 의미하는 바를 이해하지 못한다면 그냥 덧글하십시오.

답변

2

내가 당신 인 경우 유효성 검사 클래스를 만들 것입니다. 여기에는 유효성 확인 (전자 메일, 문자열, 숫자, 문자열 및 숫자)이 포함되어 있습니다.

함수의 변수를 원하는대로 선택하여 유효성을 검사하여 데이터베이스에 넣으십시오.

스크립트를 안전하게 작성하면 타사에서 사용자의 기능을 실행할 수 없어야합니다.

방법하지에 스크립트 예 :

include($_GET['file']); 

는 기본적으로, 나는 당신의 URL에서 파일 매개 변수를 사용하여 시스템에 포함 할 자신의 파일을 넣을 수 있습니다. 또한 쿼리이 가능하다 : 당신은 항상 스크립트의 외부에서 액세스 할 수있는 매개 변수를 확인해야합니다

mysql_query("INSERT INTO table (row) VALUES (". $_GET['value'] .")"); 

, 새 사용자를 만들고 귀하의 경우, 그래서 당신은 전에 새로운 사용자 기능의 유효성을 검증해야 당신은 그것을 당신의 데이터베이스에 넣습니다.

+0

네, 그게 내가 계획하고있는 것입니다. 그러나 "스크립트를 안전하게"한다는 것은 무엇을 의미합니까? 안전하지 않은 스크립트의 예를 보여줄 수 있습니까? – Shaokan

+0

글쎄요, XXS, cross side scripting이라는 것이 있습니다. 타사 사람들이 자신의 스크립트를 스크립트에 넣을 수 있습니다. 내 게시물에 예제를 넣을 것입니다. – Wesley

+0

아, 그래. 내가 알지 못하는 무언가를 생각했습니다 :) 물론 유효성을 검사하면서 물론 xss 나 SQL injection 공격을 막기 위해 노력하고 있습니다 :) – Shaokan

2

작업 방법에 따라 다릅니다. 예를 들어 MVC 패턴을 사용했다면 컨트롤러에서 테스트를 수행해야합니다 (사용중인 함수가 아닌). 경우에 따라 유효성 검사 함수 (또는 클래스의 메서드)를 사용하여 데이터를 확인한 다음 작성한 데이터를 사용하여 데이터를 삽입하거나이 함수가 데이터를 보장하도록 선택해야합니다. "삽입"기능이 단 하나의 작업 만 수행 할 수 있도록 첫 번째 솔루션을 제안합니다.

그냥 내 대답을 향상시키기 위해 적어도 SQL 주입 및 XSS (교차 사이트 스크립팅)에 대한 데이터를 확인하는 것이 좋습니다.

+0

첫 번째 제안에 따라 이름이 비어 있거나 맞지 않다면'newUser' 내부를 검사 할 필요가 없습니다. – Shaokan

+1

@Shaokan 아니요. 소프트웨어 공학의 좋은 조언에 따라 소프트웨어를 작성한다면 모든 방법/기능이 하나의 작업 만 수행해야하기 때문입니다. 이 경우, 하나의 방법/기능은 데이터를 보장하기 위해, 다른 하나는 데이터를 추가합니다. –

+0

감사합니다. Aurelio, 좋은 정보 – Shaokan