본문 바로가기

시스템/웹/포렌식 보안/웹 해킹/보안

웹 개발 보안 가이드라인

ASP

1. include 파일을 보호하자.

- 일반적인 디렉토리(/lib, /include, /library)를 사용하지 않도록 한다. include 파일들의

확장자를 .inc .lib등을 사용하는 경우 웹 페이지 상에서 텍스트 파일로 인식하지 않도록 .asp

붙여서 사용한다.(:config.inc.asp, lib.inc.asp)

- 별도의 확장자를 사용할 경우 아래와 같이 해당 확장자를 처리할 수 있도록 웹 서버에서 설정하여 준다.

 

2. Server.HTMLEncode

- 용도 : 특정 문자열에 대한 HTML encoding을 수행한다. 사용자가 입력한 값으로 HTML 페이지를

구성하기 전에 사용하면 Cross-SiteScripting 공격 등에 효과적이다.

- 적용 가능한 IIS : IIS 5.0이상

- 사용법

<%= Server.HTMLEncode("<script>alert(document.cookie);</script>")%>

- 결과(암호화적용후)

&lt;script&gt;alert(document.cookie);&lt;/script&gt;

 

3. Session.Abandon

- 용도 : Session 객체에 저장되어 있는 모든 정보를 삭제한다. 사용자 로그 아웃 프로세스에

사용해서 기존 세션 정보를 보호하기 위해서 사용할 수 있다.

- 적용 가능한 IIS : IIS 5.0이상

- 사용법

<% Session.Abandon %>

 

4. Session.Timeout

- 용도 : Session 객체에 Time-out 시간을 분단위로 지정한다. 사용자로부터 지정된 시간 동안 요청이

없을 경우 세션이 자동으로 끊어진다.

- 적용 가능한 IIS : IIS 5.0이상

- 사용법

. Session.Timeout : 세션 Timeout 시간을 기본값인 10분으로 설정한다.

. Session.Timeout = 15 : 세션 Timeout 시간을 명시한다.

(권장 시간 : 4 ~ 20)

 

5. ASPError 객체의 output을 사용자에게 전달하지 말자.

 

6. DB 접근을 위해서 COM+ 객체 사용을 고려하자

 

7. SQL 쿼리를 ASP에서 직접 생성하는 것을 지양하고, Stored procedure를 사용하도록 고려하자.

- 직접 생성 방식

strQuery = "SELECT something FROM table WHERE foo='" + var1 + "' AND bar="" +

var2 + "";

- Stored procedure를 사용한 생성 방식

strQuery = sp_somefunc(var1, var2)

 

 

PHP

1. [PHP 4.0 이상] 환경 설정(php.ini) 내용 중 register_global "on"으로설정할 경우, PHP 스크립트의변수 값을 임의로 변경할 수 있는 취약성이 있다.

따라서 register_global "off"로 설정한 후, $_GET,

$_POST 문을 사용해서 사용자가 전달한 값을 얻어야 한다.

register_global = Off

 

2. PHP 스크립트 오류를 사용자에게 보내지 않기 위해서 PHP 환경 설정파일(php.ini)에서 아래와 같이설정한다.

log_error = On

display_errors = Off

 

3. utf8_decode()

- 용도 : UTF-8 형식의 입력 값을 ISO-8859-1 형식으로 전환해준다. 필터링 규칙을 적용하기 전에

사용할 것을 권장한다.

- 적용 가능한 PHP 버전 : PHP 3.0.6 이상

 

4. strip_tags()

- 용도 : 문자열로부터 HTML 태그와 PHP 태그를 없앤다. 사용자가 입력한 값을 HTML 화면에 출력할

경우 사용해서 Cross-SiteScripting 공격에 대비할 수 있다.

- 적용 가능한 PHP : PHP 3.0.8 이상

- 사용법

. strip_tags('<script>'); : 모든 HTML에서 <script> 태그를 제거한다.

. strip_tags('<script>', '<script<iframe>')

첫 번째 인자로 전달된 문자열은 제거하고, 두 번째 인자로 지정된 태그는 허용한다.

 

5. htmlspecialchars()

- 용도 : 특정 문자열에 대한 HTML encoding을 수행한다. 사용자가 입력한 값으로 HTML 페이지를

구성하기 전에 사용하면 Cross-SiteScripting 공격 대비를 위해서 사용할 수 있다.

- 적용 가능한 PHP : PHP 3 이상

- 사용법

htmlspecialchars("<a href='test'>Test</a>")

- 결과

&lt;a href='test'&gt;Test&lt;/a;&gt;

 

6. addslashes()

- 용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 분여서 반환한다. 해당 문자에는 작은 따옴표,

큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다.

- 적용 가능한 PHP 버전 : PHP 3 이상

 

7. include 파일을 보호하자.

- 일반적인 디렉토리(/lib, /include, /library)를 사용하지 않도록 한다.

- include 파일들의 확장자를 .inc .lib등을 사용하는 경우 웹 페이지 상에서 텍스트 파일로 인식하지

않도록 .php를 붙여서 사용한다. (:config.inc.php, lib.inc.php)

- 별도의 확장자를 사용할 경우 아래와 같이 해당 확장자를 처리할 수 있도록 웹 서버에서 설정하여

준다.

Httpd.conf

AddType application/x-httpd-php .lib .inc .html .htm .php .xml

 

8. session_destroy

- 용도 : Session 객체에 저장되어 있는 모든 정보를 삭제한다. 사용자 로그 아웃 프로세스에 사용해서

기존 세션 정보를 보호하기 위해서사용할 수 있다.

- 적용 가능한 PHP 버전 : PHP 3 이상

- 웹 애플리케이션 취약성 점검 도구를 사용한다.

- 웹 애플리케이션 취약성 점검을 위해서 자동화 툴을 사용해서 일반적인취약점을 제거한다.

- 공개 도구들

. Nikto(공개프로그램) - http://www.cirt.net/code/nikto.shtml

. Whisker(공개프로그램) - http://www.wiretrip.net

. Retina(상용프로그램-eEye) - http://www.eeye.com

 

Java

1. Java Class 역 컴파일 문제

- Java 언어의 Byte-code 특성으로 인하여 Java class는 쉽게 역 컴파일이 가능하다. 만약 Java

Applet에 중요 정보 (, 원격지 접속을 위한 ID/PW, DBQuery, 직접 제작한 암호화 알고리즘,

프로그램 로직등) hard-coding 했다면, 이를 발견한 공격자는 해당 정보를 악용할 수 있는 위험이

존재한다. 따라서 외부로 전송되는 Java class 파일에는 중요 정보를 hard-coding하는 것을 지양해야

한다.

- Sun Microsystems에서 Java 프로그램 개발 시 고려해야할 다양한 보안사항을 제공하고 있다.

- Secure Code guidelines(Sun Microsystems) :

http://www.java.sun.com/security/seccodeguide.html