5

JS 또는 PHP가 포함 된 서버 측 서버로 보내기 전에 사용자 입력의 유효성을 검사하는 것이 더 좋습니까? 아니면 안전한면에 있기만하면 되는가?사용자 입력 유효성 검사, 클라이언트 측 또는 서버 측? [PHP/JS]

회원 영역/관리 영역/등이있는 사이트를 만들고 있습니다 (현재 매우 간단합니다). 현재 사용자 이름과 비밀번호 만 입력 했으므로 미래에는 더 많은 정보 (이메일, 주소 등)가있을 것입니다.하지만 데이터를 확인하는 가장 좋은 방법은 무엇입니까?

사용자가 올바르게 이해할 때까지 'if ... else'문장을로드합니다. 또는 사용자가 입력 한 각 값에 대해 별도의 변수를 사용하고 그 값이 맞거나 틀리면 true 또는 false로 설정할 수 있습니까? (전자 메일 확인과 같은 전자 메일 형식인지 확인)

많은 방법이 있지만 권장 할만한 방법은 무엇입니까? 나는 10 라인에서 작업을 할 수있을 때 50 줄의 코드를 작성하고 싶지 않다. 이해가된다면 :

어떤 도움을 주셔서 감사합니다. :)

답변

8

서버 측 유효성 검사는 이어야하며이어야하며 클라이언트 측 유효성 검사는 입니다.

클라이언트 측 유효성 검사 만 사용하는 경우 악의적 인 사용자는 시스템을 해킹하여 유효성 검사를 거치지 않은 항목을 게시하여 스크립트를 위반하고 잠재적으로 시스템을 악용합니다. 이것은 보안 측면에서 매우 좋음입니다.

즉, 클라이언트 측 유효성 검사를 포함해야합니다. 이는 서버 왕복보다 훨씬 빠르며 사용자에게 즉각적인 피드백을 제공합니다. 이렇게하면 사용자가 계속 행복하게 유지되고 사이트를 다시 방문하게됩니다.

가능한 경우 은 모두입니다. 당신이/할 수 없다면, 적어도 서버 쪽에서하십시오. 클라이언트 측 검증은 재난을위한 처방입니다!

5

둘 다 수행하십시오.

클라이언트 측은 사용자가 기대하는 응답을 제공하고 서버 측은 데이터를 보호합니다.

PHP에는 ASP.NET MVC가 한 걸음 씩 수행하는 방법을 제공하는 데 도움이되는 라이브러리가 있습니다.

4

입력 유효성 검사는 안전상의 이유로 서버 측에서 발생해야합니다.

그러나 잘못된 데이터로 서버에 요청을 보내지 않고 응답을 클라이언트에 다시 보내지 않으려면 클라이언트 쪽 유효성 검사도 수행하는 것이 좋습니다. 이렇게하면 웹 사이트 반응이 빨라집니다. 따라서 사용자 편의성을 위해 클라이언트 측 유효성 검사를 추가하십시오.

0

유효성 검사, 항상 서버 측. 나는 당신의 폼 클라이언트 측을 조작하고 미친 값을 채울 수 있고 여전히 유효성을 얻는다. 나는 서버 측 스크립트를 조작 할 수 없다.

그래서 클라이언트 측을 검사 할 때 서버와 '대화하는'시간을 절약 할 수 있습니다. 실제 데이터를 검증하는 데 절대 사용하지 마십시오.

+2

날 wounder 만든다 당신이 살기 위해 무엇을합니까;) 나는 당신의 말을 이해합니다. 나는 사이트가 나가기 전에 모든 것을 검증해야합니다. 지금은 다음 ive – Shogun

0

물론 자바 스크립트에만 의존 할 수는 없지만 다른 사람이 사용 중지 한 경우에는 어떻게해야합니까?자바 스크립트는 사용자가 사이트를보다 사용자 친화적으로 유지할 수 있도록하며, 실수 할 때마다 서버를 기다릴 필요가 없습니다. 서버 측은 시스템에서 실수를하지 않도록 자신이 사용하기위한 것입니다!

0

서버 측에서 유효성을 검사해야합니다. 클라이언트 측 유효성 검사는 선택 사항입니다. 필드에 대한 유효성 검사 유형을 선언하고 양식에 대한 일반 유효성 검사기를 작성할 수 있습니다. 내가 무슨 뜻인지 모르겠다면 AngularJs의 선언적 코드 빌드를 살펴보십시오. 그것은 폼을 만드는 가장 좋은 방법이며 Angular는 폼을 작성하기위한 좋은 프레임 워크입니다. 이 라인에서

http://angularjs.org/

http://docs.angularjs.org/#!/cookbook/advancedform

봐 : 서버 측

<input type="text" name="form.address.line1" size="33" ng:required/> <br/> 
    <input type="text" name="form.address.city" size="12" ng:required/>, 
    <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> 
    <input type="text" name="form.address.zip" size="5" ng:required 
    validate="regexp:zip"/> 

당신은 또한 양식 필드, 검증 방법 및 오류 문자열을 포함하는 몇 가지 구조를 정의 할 수 있습니다 각 필드. 그런 다음 루프에서 정보 구조에 따라 각 필드의 유효성을 검사하십시오. 그렇게 구축 된 양식을 쉽게 관리 할 수 ​​있습니다. PHP에서

예 :

양식 데이터 :

$formData = array (
    array(
    'ID' => "name", 
    'validate' => '/.+/', 
    'label' => 'Your name', 
    'errorMsg' => "This field is required", 
    'type' => 'text' 
    ), 
array(
     'ID' => "Phone number", 
     'validate' => '/^[0-9+ ]+$/', 
     'label' => 'Numer telefonu', 
     'errorMsg' => "Please provide proper telephone number", 
     'type' => 'text' 
     ) 
); 

검사기 및 (여기에서 간단하고 지저분한 코드 미안) 형태 발생기 :

$s = ''; 
foreach ($formData as $input){ 
    $s .= sprintf('<label for="%s">%s</label>',$input['ID'],$input['label']); 
    if (isset($_POST[$input['ID']]) && !empty($input['validate']) && !preg_match($input['validate'],$_POST[$input['ID']])){ 
     $error = true; 
     $s .= sprintf('<div class="formErrorValidate">%s</div>',$input['errorMsg']); 
    } 
    if (isset($_POST[$input['ID']])) $htmlMsg = str_replace('%'.$input['ID'].'%',$_POST[$input['ID']],$htmlMsg); 
    if ($input['type'] == 'textarea'){ 
     $s .= sprintf('<textarea name="%s" id="%s">%s</textarea>',$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } else { 
     $s .= sprintf('<input type="%s" name="%s" id="%s" value="%s"/>',$input['type'],$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } 

}

+0

난 정말 이런 식으로 일을 생각해 본 적이 없어, 그것은 양식을 생성하고 유효성 검사 매우 간단한 방법을 보인다, 답장을 보내 주셔서 감사합니다 :) – Shogun