현재 위치: > 최신 기사 목록> XSS 공격을 방지하기 위해 MB_SCRUB 및 HTMLSPECIALCHARS를 결합하는 방법은 무엇입니까?

XSS 공격을 방지하기 위해 MB_SCRUB 및 HTMLSPECIALCHARS를 결합하는 방법은 무엇입니까?

gitbox 2025-07-17

XSS (Cross-Site Scripting Attack)는 웹 개발에서 일반적이고 위험한 보안 위협입니다. 악성 스크립트 코드를 주입함으로써 공격자는 브라우저가 예기치 않은 동작을 수행하고 사용자 정보를 도용하고 세션을 납치하며 사용자의 브라우저를 제어하게합니다. XSS를 방지하기 위해 개발자는 일반적으로 사용자 입력을 엄격하게 필터링하고 인코딩합니다. PHP에서 htmlspecialchars () 는 가장 일반적으로 사용되는 보호 방법 중 하나입니다. 그러나 사용자가 제출 한 컨텐츠에 유효하지 않거나 불법적 인 문자 시퀀스가 포함 된 경우 htmlspecialchars () 만 사용하면 취약성을 완전히 막을 수 없습니다. 현재보다 강력한 처리를 위해 MB_SCRUB ()를 결합해야합니다.

MB_SCRUB 란 무엇입니까?

MB_SCRUB () 는 PHP 8.2에 도입 된 함수로, 법적 문자열을 만들기 위해 불법 문자를 포함하는 멀티 바이트 문자열을 "청소"하는 데 사용됩니다. 전송 또는 처리 중에 다중 바이트 문자가 잘린 경우, 유효하지 않은 문자 시퀀스가 형성 될 수 있습니다. 이 불법 순서가 htmlspecialchars () 로 직접 전달되는 경우 특정 조건에서 예상 탈출 메커니즘을 우회 할 수 있습니다.

예를 들어, 불법 UTF-8 바이트 시퀀스는 실수로 브라우저에서 구문 분석 될 수있어 스크립트 주입이 발생할 수 있습니다.

 <span><span><span class="hljs-comment">// 예:불법 바이트를 포함하는 입력</span></span><span>
</span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"\xC0&lt;script&gt;alert('XSS');&lt;/script&gt;"</span></span><span>;

</span><span><span class="hljs-comment">// 직접 사용하십시오 htmlspecialchars(불안정한)</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span></span>

위의 예에서 $ 입력 에 불법 UTF-8 바이트가 포함 된 경우 브라우저는 이러한 바이트를 무시하고 후속 <Script> 태그를 실행할 수 있습니다.

HTMLSpecialchars와 함께 MB_SCRUB를 사용하는 방법은 무엇입니까?

이 문제를 해결하기 위해 먼저 MB_SCRUB ()를 사용하여 문자열을 청소 한 다음 HTML 엔티티 탈출을 위해 htmlspecialchars () 로 전달할 수 있습니다.

 <span><span><span class="hljs-comment">// 안전 관행:먼저 청소하십시오,다시 탈출</span></span><span>
</span><span><span class="hljs-variable">$clean</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_scrub</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-variable">$safe</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$clean</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$safe</span></span><span>;
</span></span>

이 조합의 장점은 다음과 같습니다.

  1. MB_SCRUB ()는 캐릭터 시퀀스의 합법성을 보장합니다 . 불법 인코딩을 처리 할 때 브라우저 오류를 방지하기 위해 잘못된 문자가 고정되거나 제거됩니다.

  2. htmlspecialchars ()는 Tag Escape : Converts < , > " , ' 및 기타 문자를 HTML 주입을 방지하기 위해 HTML 엔티티에 제공합니다.

실용적인 조언

  1. 교차 플랫폼 일관성을 보장하기 위해 항상 UTF-8로 설정된 문자를 지정하십시오 .

  2. 특히 HTML로 출력 할 때 모든 사용자 입력을 청소하고 탈출하십시오 .

  3. XSS 위험을 더욱 줄이기 위해 Content-Security-Policy (CSP)와 함께 사용하십시오 .

  4. MB_SCRUB () 함수를 사용하려면 PHP 8.2 이상으로 업그레이드하십시오 .

요약

htmlspecialchars () 는 XSS를 방지하는 기본 도구이지만 전능 한 것은 아닙니다. 사용자 입력에 불법 문자 인코딩이 포함되어 있으면 보안 취약성이 발생할 수 있습니다. MB_SCRUB ()를 추가하여 불법 문자를 효과적으로 지우고 보호 강도가 향상됩니다. 높은 보안 표준을 추구하는 PHP 개발자에게는이 조합이 홍보 할 가치가 있습니다.