양식을 만들 때는 사용자 데이터를 사용합니다. 첫 번째 관심사는 사용자 데이터를 비공개로 유지하고 안전하게 전송하는 것입니다. 어떤 조치를 취할 수 있는지 살펴보겠습니다.
양식이 안전한지 확인
첫 단계로, 최대한 적은 양의 데이터를 요청해야 합니다. 필요하지 않은 데이터를 요청하지 말고 항상 요청된 모든 데이터가 필요한지 여부를 물어봐야 합니다. 데이터가 적을수록 위험, 비용, 책임이 줄어듭니다. 또한 양식의 필드 수를 줄이면 덜 복잡하고 쉽게 작성할 수 있으며 이탈률을 낮출 수 있습니다.
특히 양식이 포함된 페이지에는 항상 HTTPS를 사용하세요. HTTPS를 사용하면 데이터가 서버에서 들어올 때와 서버로 다시 돌아갈 때 암호화됩니다.
공용 Wi-Fi를 사용하는 카페에 앉아 있다고 가정해 보겠습니다. 전자상거래 사이트를 개설하고 물건을 구매하기 위해 신용카드 정보를 입력합니다. 웹사이트에서 HTTP를 사용하는 경우 동일한 공용 Wi-Fi에 연결된 기술만 있으면 누구나 내 신용카드 정보를 볼 수 있습니다. 웹사이트에서 HTTPS를 사용하는 경우 데이터가 암호화되므로 누군가 데이터에 액세스하지 못하도록 보호됩니다.
또한 사이트에서 모든 HTTP 요청을 HTTPS로 리디렉션해야 합니다. 모든 트래픽을 HTTPS로 리디렉션하는 방법을 자세히 알아보세요.
사용자가 데이터를 비공개로 유지하도록 지원
첫 번째 모듈에서는 데이터를 전송하는 두 가지 방법, 즉 GET
요청을 사용하는 방법과 POST
요청을 사용하는 방법을 알아보았습니다.
GET
요청을 사용하면 양식 데이터가 요청 URL에 쿼리 문자열로 포함됩니다. GET
요청을 사용하는 양식을 제출하면 브라우저가 양식 데이터를 포함한 요청 URL을 방문 기록에 추가합니다.
검색 양식과 같은 이전 양식 제출을 조회할 때 편리합니다. 민감한 정보가 제출되고 브라우저 기록 또는 로컬 네트워크에 액세스할 수 있는 모든 사람이 이 정보를 볼 수 있다는 것은 좋지 않습니다.
개인 정보 또는 기타 민감한 정보가 제출될 수 있는 모든 양식에 POST
요청을 사용하세요.
이렇게 하면 데이터를 처리하는 백엔드 스크립트에서만 데이터를 볼 수 있습니다.
브라우저에서 직접 개인 정보를 저장하고 처리하면 어떨까요?
클라이언트 스토리지(예: localStorage
)를 사용하여 브라우저에 개인 정보를 저장할 수 있습니다.
이는 개인 정보 보호 측면에서는 이상적이지 않습니다.
마찬가지로 브라우저에 액세스할 수 있는 모든 사용자는 이 정보를 읽을 수 있습니다.
개인 데이터의 암호화된 값만 저장해야 합니다.
사용자가 안전하게 가입하고 로그인할 수 있도록 지원
사용자 계정 인증은 개인 정보 보호 및 보안 측면에서 복잡한 문제입니다. 자체 보안 인증 시스템을 빌드하는 대신 타사 ID 공급업체를 사용하는 것이 더 나을 수 있습니다.
계정 인증 및 비밀번호 관리 권장사항에 대해 자세히 알아보세요.
사용자가 개인 정보에 액세스하도록 지원
캘리포니아의 CCPA와 인도의 PDPA를 포함하여 많은 리전에 데이터 보호 및 개인 정보 보호 관련 법률 및 규정이 있습니다. 유럽 연합 (EU)에서 제공되는 모든 웹사이트는 EU에 기반을 둔 사이트가 아니더라도 개인 정보 보호법 (GDPR)을 준수해야 합니다.
GDPR은 EU 거주 사용자의 개인 정보 수집 및 처리에 관한 가이드라인을 마련해 두고 있습니다. 개인 정보를 처리하려면 동의가 필요하며, 사용자는 언제든지 저장된 개인 정보를 요청할 수 있으며 데이터 유출을 공식적으로 발표해야 합니다. 이는 사용자의 개인 정보를 보호하는 데 도움이 되므로 사용자에게 유익합니다. GDPR에 대해 자세히 알아보세요.
귀하가 개인 정보를 어떻게 처리할 계획인지 사용자에게 반드시 알려야 합니다. 투명성은 신뢰의 열쇠입니다. 사용자는 항상 사용자를 위해 저장된 모든 데이터에 액세스하고, 수정하고, 삭제할 수 있어야 합니다
사용자가 개인 정보를 업데이트할 수 있도록 하기
사용자가 비밀번호, 이메일 주소, 사용자 이름 등의 개인 정보를 쉽게 업데이트할 수 있게 합니다. 저장된 개인 정보의 변경사항을 사용자에게 알리고 사용자가 변경사항을 취소할 수 있도록 합니다. 예를 들어 사용자가 이메일 주소를 변경하면 이전 이메일 주소와 새 이메일 주소로 이메일을 보낼 수 있습니다.
사용자가 관련된 모든 데이터를 포함하여 계정을 쉽게 삭제할 수 있도록 하고, 필요한 경우 데이터를 다운로드할 수 있도록 합니다. 계정 삭제는 일부 지역의 현지 법규입니다.
사이트의 개인 정보를 보거나 변경하려면 추가 인증 단계(예: 현재 비밀번호 다시 입력)를 요구합니다.
자세한 내용은 웹 애플리케이션 개인 정보 보호 권장사항을 참조하세요.
모든 데이터의 상태가 양호한지 확인
이전 모듈에서는 프런트엔드의 유효성 검사를 알아봤습니다. 프런트엔드 확인이 중요하지만 사용자가 잘못된 데이터를 제출할 수도 있습니다. 다음 단계로 데이터베이스에 데이터를 저장하기 전에 백엔드의 데이터도 검증해야 합니다. 이렇게 하면 데이터베이스에 잘못된 데이터가 저장되지 않습니다.
유효성 검사는 데이터 형식이 유효한지 확인하는 데 도움이 되지만 사용자가 입력한 데이터는 신뢰해서는 안 됩니다. 어떻게 하면 데이터를 안전하게 출력할 수 있을까요? 교차 사이트 스크립팅 (XSS)을 방지하고 모든 데이터를 HTML에 안전하게 포함시키려면 출력 전에 데이터를 정리해야 합니다.
출력 전에 데이터 정리에 대해 자세히 알아보고 가능한 경우 Sanitizer API를 사용하세요.
모든 제출 내용은 실제 사용자가 제출하도록 합니다.
데이터 보호를 위해 봇의 스팸 제출을 방지하는 다양한 옵션이 있습니다.
첫 번째 옵션은 reCAPTCHA와 같은 서비스를 사용하여 실제 사용자와 봇을 구분하는 것입니다. 페이지에 자바스크립트 스니펫을 포함하고 제출 버튼에 속성을 추가해야 합니다.
reCAPTCHA는 다양한 검사를 수행하여 사용자가 맞는지 확인합니다. 예를 들어 사용자에게 이미지를 식별하도록 요청할 수 있습니다. 봇과 같은 자동화된 소프트웨어는 이러한 문제를 해결할 수 없으며 양식을 제출할 수도 없습니다.
꿀단지
또 다른 옵션은 시각적으로 숨겨진 양식 입력란인 'honeypot'이라고 하는 것입니다. 인간은 화분 밭을 보지 못하지만 봇이 그 밭을 채울 것입니다. 백엔드에서 처리 스크립트를 통해 필드가 완료되었는지 확인할 수 있습니다. 그렇다면 봇에서 전송한 것일 수 있으므로 무시해도 됩니다.
스팸 차단에 도움이 되는 Akismet과 같은 서비스도 있습니다. Akismet 필터는 참여하는 모든 사이트에서 캡처된 스팸에 관한 정보를 결합한 다음 이러한 스팸 규칙을 사용하여 향후 스팸을 차단합니다. Akismet은 사용자에게 정보를 투명하게 공개하며 대부분의 스팸을 걸러냅니다.
이해도 테스트
보안 및 개인 정보 보호에 관한 지식 테스트
양식을 사용하여 개인 정보를 전송할 때 선호하는 방법은 무엇인가요?
GET
요청POST
요청스팸을 방지하려면 어떻게 해야 하나요?