웹 개발에서 XSS (크로스 사이트 스크립팅 공격)는 일반적이고 위험한 보안 취약점입니다. 악성 스크립트 코드를 주입함으로써 공격자는 사용자가 웹 페이지를 탐색 할 때 공격자가 디자인 한 코드를 실행하여 민감한 정보를 훔치거나 세션을 납치하거나 페이지 컨텐츠를 조작 할 수 있습니다. XSS 공격을 방지하기 위해 개발자는 사용자 입력 또는 동적 컨텐츠를 엄격하게 필터링하고 탈출해야합니다.
이 기사는 HTMLSpecialchars () 함수와 결합 된 PHP에서 MB_EREGI_REPLACE () 함수를 사용하여 사용자 입력의 안전한 교체 및 출력을 달성하고 XSS 공격을 보호하는 목적을 달성하며 교체 작업 전에 안전한 취급을 수행하는 방법을 소개합니다.
XSS 공격은 주로 브라우저 측에서 발생합니다. 공격자는 악의적 인 스크립트를 페이지에 포함시켜 브라우저가 실행 된 후 공격으로 이어집니다. 보호의 핵심은 사용자 입력 컨텐츠를 필터링 및 탈출하는 데 있습니다.
필터 : 위험한 태그, 속성 및 스크립트를 제거하거나 교체하십시오.
탈출 : 브라우저가 코드로 실행되는 것을 방지하기 위해 특수 HTML 문자를 엔터티로 탈출하십시오.
PHP의 htmlspecialchars () 함수는 XSS를 방지하는 일반적인 방법입니다. <> " '및와 같은 문자를 해당 HTML 엔티티로 변환하여 브라우저가 코드를 실행하는 대신 일반 텍스트로 표시하도록합니다.
MB_EREGI_REPLACE () 는 PHP의 다중 바이트 스트링에 대한 안전한 정기적 인 교체 기능입니다. 사례에 민감한 일반 매칭을 지원하며 중국어와 같은 다중 바이트 문자를 포함하는 문자열 처리에 적합합니다.
문법:
mb_eregi_replace($pattern, $replacement, $string);
문자열의 민감한 단어 나 위험한 내용을 일치시키고 대체하는 데 사용될 수 있으며 컨텐츠 필터링을위한 강력한 도구입니다.
먼저 htmlspecialchars ()를 사용하여 입력 문자열 <br>를 피하십시오 이로 인해 악의적 인 HTML 또는 JS 코드가 브라우저에서 직접 실행되는 것을 방지합니다.
그런 다음 mb_eregi_replace ()를 사용하여 민감한 단어 또는 위험한 태그를 필터링하거나 교체하십시오 <br> 예를 들어, 잔류 공격 스크립트를 피하기 위해 <Script> 태그를 보안 텍스트로 바꾸십시오.
주입을 방지하기 위해 안전한 처리 후 내용을 출력하십시오 .
<?php
// 사용자 입력 컨텐츠,악의적 인 스크립트를 포함 할 수 있습니다
$input = '<script>alert("XSS공격")</script><b>일반 텍스트</b>';
// 첫 번째 단계:먼저 탈출하십시오HTML특수 문자,브라우저가 스크립트를 실행하는 것을 방지하십시오
$safe_input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
// 2 단계:민감한 단어 나 태그를 교체하십시오,여기<script>예로,대체하십시오“[금지 된 태그]”
$pattern = '<script.*?>.*?</script>';
$replacement = '[금지 된 태그]';
// 사용mb_eregi_replace민감한 태그를 교체하십시오,사건을 무시하십시오
$filtered_input = mb_eregi_replace($pattern, $replacement, $safe_input);
// 처리 된 컨텐츠를 출력하십시오
echo $filtered_input;
?>
htmlspecialchars ()는 스크립트 실행을 방지하기 위해 < , > 와 같은 기호를 엔터티로 빠져냅니다.
mb_eregi_replace ()는 <cript> 태그와 일치하고 케이스를 무시하고 프롬프트 텍스트로 바꾸는 데 사용됩니다.
이러한 방식으로 입력에 복잡한 케이스 믹싱 태그가 포함되어 있더라도 안전하게 필터링 할 수 있습니다.
교체 중 정기적 인 표현은 우회를 방지하기에 충분히 엄격해야합니다.
필터링은 전능하지 않으며 화이트리스트 정책 및 컨텐츠 보안 정책 (CSP)을 결합하는 데 더 효과적입니다.
다양한 환경 (HTML, JavaScript, URL 등)의 출력은 해당 보안 이스케이프를 수행해야합니다.
MB_EREGI_REPLACE ()는 다중 바이트 환경에 적합하며 차량 코드를 피합니다.
HTMLSpecialchars ()를 사용하여 사용자 입력을 먼저 탈출 한 다음 가능한 악의적 인 스크립트 태그를 MB_EREGI_REPLACE () 함수로 바꾸면 PHP 응용 프로그램의 XSS 보호 기능을 효과적으로 향상시킬 수 있습니다. 실제 프로젝트에서 이러한 다중 계층 보안 처리는 보안 위험을 크게 줄이고 사용자 데이터 및 시스템 보안을 보호 할 수 있습니다.
샘플 코드와 관련된 샘플 URL 도메인 이름 :
$url = "https://m66.net/path/to/resource";
echo "<a href=\"$url\">안전한 링크</a>";