다른 사람들이 말했듯이 두 가지를 모두 수행해야합니다. 이유는 다음과 같습니다.
고객 입장에서
일반 사용자 에게 더 나은 피드백을 제공 할 수 있으므로 먼저 클라이언트 측에서 입력의 유효성을 검사하려고합니다 . 예를 들어, 잘못된 이메일 주소를 입력하고 다음 필드로 이동하면 오류 메시지를 즉시 표시 할 수 있습니다. 이렇게하면 사용자는 양식을 제출 하기 전에 모든 필드 를 수정할 수 있습니다 .
서버에서만 유효성을 검사하는 경우 양식을 제출하고 오류 메시지가 표시되고 문제를 찾아 내야합니다.
(이러한 고통은 서버가 사용자의 원래 입력을 채운 상태로 양식을 다시 렌더링함으로써 완화 될 수 있지만 클라이언트 측 유효성 검사는 여전히 빠릅니다.)
서버 측
JavaScript를 쉽게 우회하고 위험한 입력을 서버에 제출할 수 있는 악의적 인 사용자로부터 보호 할 수 있기 때문에 서버 측에서 유효성을 검사하려고 합니다.
UI를 신뢰하는 것은 매우 위험합니다. UI를 악용 할 수있을뿐만 아니라 UI를 전혀 사용하지 않거나 브라우저를 사용하지 않을 수도 있습니다 . 사용자가 수동으로 URL을 편집하거나 자체 Javascript를 실행하거나 다른 도구를 사용하여 HTTP 요청을 조정하면 어떻게 되나요? curl
예를 들어 스크립트 에서 또는 스크립트 로 사용자 지정 HTTP 요청을 보내면 어떻게 됩니까?
( 이것은 이론적이지 않습니다. 예를 들어, POST
사용자가 각 회사의 검색 양식을 채운 다음 수집하고 정렬 한 것처럼 요청을 보내서 여러 파트너 항공사, 버스 회사 등으로 사용자 검색을 다시 제출 한 여행 검색 엔진에서 작업했습니다. JS의 양식 JS는 결코 실행되지 않았으며 반환 된 HTML로 오류 메시지를 제공하는 것이 매우 중요했지만 API는 좋았지 만 이것이 우리가해야 할 일이었습니다. )
이를 허용하지 않는 것은 보안 관점에서 순진 할뿐만 아니라 비표준이기도합니다. 클라이언트는 원하는 방식으로 HTTP를 보내도록 허용해야하며 올바르게 응답해야합니다. 여기에는 검증이 포함됩니다.
서버 측 유효성 검사는 호환성 에도 중요합니다. 모든 사용자가 브라우저를 사용하더라도 JavaScript를 사용할 수있는 것은 아닙니다.
부록-2016 년 12 월
서버 측 응용 프로그램 코드에서는 제대로 수행 할 수없고 클라이언트 측 코드 에서는 완전히 불가능한 일부 유효성 검사가 있습니다 . 데이터베이스의 현재 상태에 의존하기 때문입니다. 예를 들어 "다른 사용자가 해당 사용자 이름을 등록하지 않았습니다"또는 "댓글을 달고있는 블로그 게시물이 여전히 존재합니다"또는 "기존 예약이 요청한 날짜와 겹치지 않습니다"또는 "계정 잔액이 여전히 해당 구매를 충당 할만큼 충분하지 않습니다. " 데이터베이스 만이 관련 데이터에 의존하는 데이터를 안정적으로 검증 할 수 있습니다. 개발자들은 정기적으로 문제를 해결 하지만 PostgreSQL은 좋은 솔루션을 제공합니다 .