크로스 사이트 스크립팅 (XSS)은 일반적인 네트워크 보안 취약점입니다. 웹 페이지에 악의적 인 코드를 주입하면 사용자가 페이지에 액세스 할 때 코드가 실행되며, 이는 사용자 정보 유출, 악성 운영 실행 및 웹 사이트 제어로 이어질 수 있습니다.
예를 들어, 양식에 보호가없는 경우 공격자는 다음과 유사한 악성 스크립트를 삽입 할 수 있습니다.
<span class="fun"><script type = "text/javaScript"> Alert ( 'Hello World'); </script></span>
사용자가 양식을 제출하면 스크립트가 페이지에 주입되며 페이지를 방문하는 모든 사용자는 영향을받습니다.
XSS를 방지하는 첫 번째 단계는 모든 사용자 입력 데이터를 효과적으로 필터링하고 확인하는 것입니다. PHP에는 강력한 필터링 기능이 내장되어 있지만 데이터 보안을 보장하기 위해 비즈니스 요구에 따라 대상 검증 기능을 작성하는 것이 좋습니다. 예를 들어, 입력에 문자와 숫자 만 포함되어 있는지 확인하기 위해 함수를 정의 할 수 있습니다.
function isStringValid($str) {
return preg_match('/^[a-zA-Z0-9]+$/', $str);
}
또한, 실행 가능한 코드로 구문 분석되지 않도록 사용자가 입력 한 특수 문자를 피해야합니다.
function escapeOutput($str) {
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
이 기능은 htmlspecialchars ()를 사용하여 HTML 태그를 인코딩하여 JavaScript 코드 주입을 방지합니다.
CSRF (크로스 사이트 요청 위조) 토큰 사용은 효과적인 보호 수단입니다. 서버는 쿠키에 저장된 임의의 토큰을 생성하고 토큰을 숨겨진 필드 형태로 배치합니다. 양식을 제출할 때 서버는 두 토큰이 일관성이 있는지 확인하고 요청 소스가 합법적인지 확인하고 위조 요청을 방지합니다.
구현 아이디어는 임의의 문자열을 생성하고, 쿠키를 작성하고, 숨겨진 필드를 형성하고, 제출시 두 경기 여부를 확인하고 일치 만 처리하는 것입니다.
입력 검증 외에도 다른 보안 조치를 구성해야합니다.
Eval () 함수의 사용은 임의의 코드를 실행하고 보안 위험을 쉽게 증가시키기 때문에 금지됩니다.
컨텐츠 보안 정책 (CSP)을 활성화하고 브라우저에서로드 및 실행 된 리소스를 제한하며 XSS 공격 표면을 줄입니다.
업로드 채널을 통해 악의적 인 파일이 서버에 들어가는 것을 피하려면 파일 업로드 유형 및 크기를 제한하십시오.
데이터를 출력 할 때는 사용자 입력, 특히 HTML 태그가 포함 된 컨텐츠를 직접 삽입하지 마십시오. 스크립트 실행을 방지하기 위해 인코딩 기능을 사용하여 특수 문자를 피해야합니다. 예를 들어:
$string = '<script>alert("XSS");</script>';
echo '<label>' . $string . '</label>'; // 안전하지 않은 글
echo '<label>' . htmlspecialchars($string) . '</label>'; // 안전한 글쓰기
크로스 사이트 스크립팅 공격 (XSS)은 웹 보안에서 일반적이고 위험한 취약점입니다. CSRF 토큰을 사용하여 사용자 입력을 엄격하게 확인하고 필터링하여 보안 정책을 합리적으로 구성하고 출력 인코딩을 표준화함으로써 개발자는 XSS 공격의 위험을 효과적으로 줄일 수 있습니다. 보안 역학에 지속적으로주의를 기울이고 보호 조치를 업데이트함으로써 사용자 개인 정보 및 웹 사이트 보안을 더 잘 보호 할 수 있습니다.