안전한 입출력 처리
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
안전한 입출력 처리는 애플리케이션, 서버 또는 시스템이 외부로부터 받는 입력과 생성하는 출력을 안전하게 다루는 방법을 의미한다. 입력 처리 시에는 코드 인젝션, 디렉토리 순회 등의 취약점을 예방하기 위해 입력 확인이 중요하며, 화이트리스트와 블랙리스트 방식이 사용된다. 화이트리스트 방식은 허용된 입력만 처리하고 나머지는 차단하여 알려지지 않은 공격에 대한 방어에 효과적이다. 출력 처리 시에는 사이트 간 스크립팅 취약점 예방을 위해 출력 암호화(인코딩)가 사용된다.
입력 처리는 애플리케이션, 서버 또는 기타 컴퓨팅 시스템이 사용자, 클라이언트, 네트워크 등 외부로부터 들어오는 데이터를 어떻게 다루는지에 대한 것이다.
출력 처리는 애플리케이션, 서버 또는 시스템이 HTML, 프린팅, 로깅 등 출력을 처리하는 방식이다. 출력에는 사용자, 클라이언트, 네트워크, 데이터베이스 등에서 제공된 입력이 포함되는 경우가 많다는 점을 유념해야 한다.
2. 입력 처리
안전한 입력 처리는 코드 인젝션, 디렉토리 순회와 같은 취약점을 예방하는 데 핵심적인 역할을 한다.[1]
2. 1. 입력 확인
입력 확인은 데이터를 사용하기 전에 안전성을 검증하는 단계이다.
이를 위한 가장 안전한 방법은 '''화이트리스트''' 전략을 사용하는 것이다. 이 방식은 의심스러운 입력을 종료하고 실행을 계속할지를 결정한다.[1]
2. 1. 1. 화이트리스트와 블랙리스트
화이트리스트는 허용되는 입력 목록을, 블랙리스트는 차단되는 입력 목록을 정의한다. 보안 전문가들은 일반적으로 블랙리스트보다 예측 불가능한 공격을 방어하는 데 더 효과적인 화이트리스트 방식을 선호한다.[1] 한국에서는 개인정보 처리 시, 정보통신망법에 따라 최소한의 정보만 수집하고, 불필요한 정보는 수집하지 않도록 하는 것이 중요하다.[2] 이는 화이트리스트 방식과 유사한 접근 방식이다.[3]
보안 전문가들은 블랙리스트가 우연히 나쁜 입력을 안전하게 다룰 수 있으므로 화이트리스트를 선호한다. 그러나 어떤 경우에 화이트리스트 솔루션은 쉽게 구현되지 않을 수 있다.[1]
2. 1. 2. 입력 문제에 대한 종료/정지/중단
이것은 매우 안전한 전략이다. 만약 예상치 못한 문자들이 입력에 발생하면, 실행을 중단한다. 그러나 만약 좋지 않게 구현되었다면, 공격자가 시스템에 예상치 못한 입력을 뿌려서 서비스 거부 공격을 유발할 수 있다.
2. 1. 3. 입력 필터
입력을 필터링하는 방식은 입력 문제들에 대한 종료/정지/중단보다 덜 전통적인 보안 원리로 사용된다.2. 2. 입력 암호화(인코딩)
악의적인 입력을 무력화하기 위해 입력을 암호화한다. 예를 들어, SQL 삽입 공격을 방지하기 위해 특수 문자를 이스케이프 처리한다.
SQL 인코딩: `'' ' OR 1=1 --'`는 `\ \'\ OR\ 1\=1\ \-\-'`로 암호화된다.
PHP에서 이것은 `mysql_real_escape_string()`[1] 또는 `PDO::quote()`[2] 함수를 사용해서 수행될 수 있다.
2. 3. 기타 해결책
프로그래밍 언어와 보호 대상에 따라 다양한 해결책이 존재한다.
특히, SQL 삽입을 예방하기 위해서는, '''매개변수화된 쿼리''' ('''준비된 문장'''과 '''바인드 변수'''로도 알려짐)가 코드 명료성과 수행 능력을 향상시킬 뿐만 아니라, 보안을 향상시키는 데 유용하다.
3. 출력 처리
안전한 출력 처리는 주로 사이트 간 스크립팅 취약점을 예방하는 데 중점을 두지만, 마이크로소프트 오피스 문서나 일부 API를 생성할 때 매크로 삽입을 방지하는 등 다른 분야에서도 중요하게 활용될 수 있다.
3. 1. 출력 암호화(인코딩)
암호화는 출력될 내용을 처리하므로, 잠재적으로 위험한 문자열들을 안전하게 만들 수 있다. 일반적으로 안전한 문자로 알려진 문자열들은 종종 그대로 남는다. 간단한 암호화는 `a–z`, `A–Z` 그리고 `0–9`를 내버려 둘 것이다. 다른 문자열들은 예상치 않은 방식으로 해석되며, 적절하게 암호화된 표현으로 대체된다.
HTML 인코딩에서 `<script>`는 `&lt;script&gt;`로 인코딩된다.
PHP에서 이것은 `htmlspecialchars()` 함수를 통해 수행된다.[3]
참조
[1]
웹인용
mysql_real_escape_string - Manual
http://php.net/mysql[...]
PHP
2012-11-02
[2]
웹인용
PDO::quote - Manual
http://php.net/manua[...]
PHP
2012-11-02
[3]
웹인용
htmlspecialchars - Manual
http://php.net/htmls[...]
PHP
2012-11-02
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com