CODE CAVE

[웹해킹] XSS - 간단한 방어 방법 (PHP, 출력인코딩) 본문

Web

[웹해킹] XSS - 간단한 방어 방법 (PHP, 출력인코딩)

코드케이브 2023. 9. 5. 23:35

[웹 보안] 출력 인코딩을 통한 XSS 방지

지난 포스팅에서 XSS 공격을 하는 아주 기본적인 체험에 대해 다뤘었습니다.

 

[웹해킹] XSS - 5분만에 체험 해보기

웹 해킹 기법중 하나인 'XSS', 5분만에 체험 해보기 안녕하세요! 오늘은 웹해킹의 대표적인 주제 중 하나인 'XSS'에 대해 함께 알아보도록 하겠습니다. XSS가 무엇인지, 그리고 어떻게 작동하는지 초

kkotkkio.tistory.com

오늘은 반대로 이러한 'XSS' 공격을 방지하는 방법 중 하나인 '출력 인코딩'에 대해 알아보겠습니다. 출력 인코딩은 사용자의 입력을 안전하게 화면에 출력하는 방법으로, XSS 공격을 효과적으로 방지할 수 있습니다.


출력 인코딩이란?

출력 인코딩은 사용자로부터 받은 입력을 그대로 화면에 출력하기 전에 특정 문자들을 안전한 형태로 변환하는 과정입니다. 예를 들어, <와 > 문자는 각각 &lt;와 &gt;로 변환됩니다. 이렇게 변환하면 브라우저는 이 문자들을 HTML 태그로 해석하지 않게 됩니다.


간단한 예시로 알아보기

1. 사용자로부터 입력을 받는 간단한 HTML 폼을 만들어보겠습니다.

<form method="post" action="process.php">
    <label for="userInput">댓글을 작성해주세요:</label>
    <textarea name="userInput" id="userInput"></textarea>
    <input type="submit" value="제출">
</form>

2. PHP를 사용하여 사용자의 입력을 안전하게 출력하는 코드를 작성합니다.

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $userInput = $_POST["userInput"];
    echo "사용자의 댓글: " . htmlspecialchars($userInput);
}
?>

위의 PHP 코드에서 htmlspecialchars 함수는 사용자의 입력에서 특수 문자를 안전한 형태로 변환해줍니다. 따라서 사용자가 <script>와 같은 스크립트 코드를 입력하더라도, 이 코드는 실행되지 않고 그대로 화면에 출력됩니다.

 

위 출력 인코딩은 웹 보안의 기본 중 하나로, 간단한 방법으로 XSS 공격을 방지할 수 있습니다. 웹사이트를 운영하거나 개발할 때, 사용자의 입력을 화면에 출력할 때는 항상 출력 인코딩을 적용하는 습관을 들이는 것이 좋을것 같네요!


이외 방어 방법

출력인코딩 외에 다양한 방법들이 있는데, 이에 대해서는 간단히 개념정도 정리해보았고

향후 다른 포스팅에서 하나하나 간단한 예시와 함께 포스팅 예정입니다 :)

1. 입력 검증 (Input Validation)

사용자로부터 받은 모든 입력에 대해 검증을 수행합니다. 예를 들어, 숫자만 허용되는 필드에 문자열이 입력되면 거부하는 것과 같은 방식입니다.

2. 컨텐츠 보안 정책 (Content Security Policy, CSP)

CSP 헤더를 사용하여 페이지에서 실행되는 스크립트의 출처를 제한합니다. 이를 통해 외부 스크립트의 실행을 방지하거나 인라인 스크립트의 실행을 제한할 수 있습니다.

3. HTTPOnly 및 Secure 플래그 사용

쿠키에 HTTPOnly 및 Secure 플래그를 설정하여, 스크립트를 통한 쿠키 접근을 방지하고 HTTPS를 통해서만 쿠키가 전송되도록 합니다.

4. 외부 라이브러리 및 프레임워크 업데이트

사용하는 라이브러리나 프레임워크에 보안 취약점이 발견되면, 공격자가 이를 이용할 수 있습니다. 따라서 정기적으로 업데이트를 수행해야 합니다.

5. 사용자 입력에 대한 에스케이프 처리

데이터베이스 쿼리, OS 명령어, HTML/XML/JSON 데이터 등 사용자 입력을 포함하여 사용할 때 적절한 에스케이프 처리를 수행합니다.

6. 웹 어플리케이션 방화벽 (WAF) 사용

WAF를 사용하여 악의적인 웹 트래픽을 감지하고 차단합니다.

7. 정기적인 코드 리뷰 및 보안 테스트

코드 리뷰를 통해 보안 취약점을 찾아내고, 펜 테스트나 자동화된 보안 스캔을 통해 애플리케이션의 보안 상태를 확인합니다.