설치할 수 없는 곳에서 코드 하이라이팅 쓰기

2009/05/05 11:54
크리에이티브 커먼즈 라이선스
Creative Commons License
전에 구글에서 배포하는 코드 하이라이팅 설치방법을 적은적 있는데 .. 사내 그룹웨어(?)에선 .. 지원하지 않아 코드 옮길때 무지하게 지저분 했었다.

그래서 .. 알려준곳 ... 여기 를 클릭하면 됩니다!

뭐 코드하이라이트가 구글에서 제공하는것 보다 좋진 않지만 .. 그래도 매우 깔끔하네요!


저작자 표시 비영리 변경 금지

Pupustory Dev/Tip

  1. Blog Icon
    sloth

    오.. 내가쓰던건 알록달록유치했는데
    이거슨 깔끔하게나오는듯
    퍼가염

naver로 부터 벗어나기 !! (1편 구글 메일로 이사가자 !!)

2008/09/08 22:49
크리에이티브 커먼즈 라이선스
Creative Commons License
지식iN 서비스 이후 대한민국 인터넷은 네이버 제국이 되버렸다. 수년전 전지현을 앞세워 '진작좀 잘하지 그랬어..'라는 노골적인 메시지로 카페 서비스를 활성화 한 이후로 그 독점은 더욱 강력해졌다. 다음과의 양대산맥이란 말은 어느세 '상대가 없으니 다음이라도..'라는 식으로 비춰지기 시작했고, 블로그 서비스도 네이버에게 뒤저버린 지금은 '모든길은 네이버로 통한다'는 얘기가 되버렸다.

물론 나도 네이버를 쓴다. 카페, 블로그,메일 등등의 서비스 외에도 다양한 컨텐츠를 소비한다. 그러다 얼마전부터 생각했다. '내가 사용하는 네이버가 그렇게 강력한 점은 무엇이지?' 결론부터 말하자면 없다. 메일 서비스는 애초부터 타 서비스와 다를 바 없었고, 대용량 서비스는 애초에 다른 곳보다 늦었다. 블로그는 항상 느끼는거지만 왜이렇게 느린지 모르겠다. 카페는 일부를 제외하곤 아직 daum이 더 큰다.(물론 이것은 필자 개인의 생각이다.) 그렇게 보면 '그냥 남들이 많이 쓰니까..' 내 시작 홈페이지도 네이버가 되었고, 시작 페이지가 네이버니 모든 서비스도 네이버에 촛점을 맞추게 되었다.

지금 내가 다니고 있는 회사의 이메일은 별도의 메일서버를 사용하지 않고 gmail을 이용한다. 개인 gmail이 아니라 google 파트너페이지를 이용한다. 덕분에 좋은점은 기본적으로 '웹메일'이므로 어디서든 접근이 가능하다는 것과, 빠른 발송 대용량 메일 및 google 토크, google 캘린터 이다. 물론, 유료로 사용하는 서비스는 이것들이 기본으로 제공 된다. 하지만 쓸데없이 액티브x를 떡칠하거나 신경도 쓰지 않는 화면을 치장하며 느린 것 보다 훨씬 간편하고 단순해서 끌린다. (이게 구글의 최대 강점인지도 모른다.)

그래서 오늘은 생각했다. 네이버에서 벗어날 수 있는 대안은 무엇인가?

더보려면 클릭!!





Pupustory Dev/Tip

dp.SyntaxHighlighter를 이용한 코드 하이라이트

2008/06/17 23:45
크리에이티브 커먼즈 라이선스
Creative Commons License
이전에 올렸던 포스트는 .. css를 추가해야되서 ... 좀 불편하다.

사실 이것도 .. .js를 왕창 추가해야되는 불편함은 있지만..

한번 하게 되면, pre 로 묶어주기만 하면 되니 .. 전보단 더 편하다.

사용방법은 다음과 같다.

1. http://code.google.com/p/syntaxhighlighter/ 에서 [SyntaxHighlighter_1.5.1.rar] 파일을 다운 받는다.

2. tistory 스킨 / 파일올리기 를 통해 해당 파일의 scripts 파일을 모두 올린다.(플래시 파일역시 올려야 한다!)

3. skin.html의 맨 마지막에 다음을 추가 한다.

4. skin.html에 상단부분 스타일시트 부분에 다음을 추가 한다.
<link type="text/css" rel="stylesheet" href="./images/SyntaxHighlighter.css"></link>

5. 글 작성시 html모드로 변경하고, 해당 부분을 묶어 준다.

     ex > <textarea class="cpp" name="code">
 int main() { return 0; }
</textarea>
             (class 부분은 언어를 기입하면 된다.)


Pupustory Dev/Tip

  1. Blog Icon
    지나가다가

    이걸 보면서 그냥 티스토리에 욕밖에 안나가네요...
    그렇게 요구하는 사람이 많은데...만들어 안주니...무료라서...그런지 뭐..
    이것땜에 워드프레스로 옮기려다 두루 찾아보는 중입니다....

    함 적용해봐야겟네요....

  2. 그러게 말입니다. 그냥 기본적으로 적용해주지 . 아니면 글쓸때 이지윅에서 블럭 지정해서 해당부분은 코드 하일라이팅 해주던가 해주지 .. 이거 적용할때 너무 불편합니다 ㅠㅠ

  3. 안녕하세요. 잘 쓰고 있습니다...

    권해주신대로 textarea를 사용했더니 구글 리더에서 해석해주지 않습니다.

    다른 리더는 어떨런지 모르겠지만,,,

    그래서 그냥 pre로 사용하고 있습니다.

    그럼 좋은 하루 되시길....

  4. 이거 보고 개발 블로그 티스토리로 확 옮겨버렸어요
    WP를 code-highlight 때문에 썼는데 이런 방법이 있었다니...
    적용 잘 되네요 ^^ 감사합니다

  5. 와,, 덕분에 코드를 한결 깔끔하게 볼 수 있게 되었네요~ ^^

    덕분에 좋은거 알고 갑니다~ 감사해요~~

[펌] http error code

2008/06/09 10:44
크리에이티브 커먼즈 라이선스
Creative Commons License
=======================
출처 :: http://blog.naver.com/sant2013/30030861283
=======================
HTTP 에러 코드 에러 메세지
100 Continue
101 Switching Protocols
200 OK, 에러 없이 전송이 성공.
202 Accepted, 서버가 클라이언트의 명령을 받음.
203 Non-authoritative Information, 서버가 클라이언트 요구 중 일부만 전송.
204 Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음.
205 Reset Content
206 Partial Content
300 Multiple Choices, 최근에 옮겨진 데이터를 요청.
301 Moved Permanently, 요구한 데이터를 변경된 임시 URL에서 찾음.
302 Moved Permanently, 요구한 데이터가 변경된 URL에 있음을 명시.
303 See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음.
304 Not modified
305 Use Proxy
400 Bad Request(요청 실패). 문법상 오류가 있어서 서버가 요청사항을 이해하지 못함.
401.1 Unauthorized(권한 없음). - 접속 실패. 이 에러는 서버에 로그온하려는 요청 사항이 서버에 들어 있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서 서버 운영자에게 요청해야 함.
401.2 Unauthorized(권한 없음). - 서버 설정으로 인한 접속 실패. 이 어레는 서버에 로그온하려는 요청사항이 서버에 들어 있는 권한과 비쇼했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한 www-authenticate head field를 전송하지 않아서 발생.
401.3 Unauthorized(권한 없음). - 자원에 대한 ACL에 기인한 권한 없음. 이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일 수도 있고 클라이언트가 해당 주소로 접속할 때 이용되는 또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인.
401.4 Unauthorized(권한 없음). - 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미. 서버에 접속하는 데 이용되는 인증 과정이 필터 프로그램에 의해 거부된 것임.
401.5 Unauthorized(권한 없음). - ISA PI/CGI 어플리케이션에 의한 권한 부여 실패. 이 에러는 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI 프로그램이 설치되어 있어 사용자의 권한을 검증. 서버에 접속하는 데 이용되는 인증 과정이 이 프로그램에 의해 거부됨.
402

Payment Required, 예약됨.

403.1 Forbidden(금지). - 수행 접금 금지. 이 에러는 CGI나 ISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생.
403.2 Forbidden(금지). - 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생.

403.4

Forbidden(금지). - SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안, 유지되고 있는 것일 때 발생.
403.5 Forbidden(금지). - SSL 128필요. 이 에러는 접근하려는 페이지가 SSL로 보안, 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인.
403.6 Forbidden(금지). - IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP 주소로 사용자가 접근하려 했을 때 발생.
403.7 Forbidden(금지). - 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생. 자원을 이용할 수 있는 사용자임을 입증하는데 사용.
403.8 Forbidden(금지). - 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않았거나 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생.
403.9 Forbidden(금지). - 연결된 사용자 수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생.
403.10 Forbidden(금지). - 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생.
403.11 Forbidden(금지). - 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생.
403.12 Forbidden(금지). - Mapper 접근 금지. 이 에러는 클라이언트 인증용 map이 해당 웹사이트에 접근하는 것을 거부할 경우에 발생.
404 Not Found, 문서를 찾을 수 없음. 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인.
405

Mothod not allowed(메소드가 허용 안 됨). 이 에러는 Request 라인에 명시된 메소드를 수행하기 위해 해당 자원의 이용이 허용되지 않았을 경우에 발생.

406 Not Acceptable(받아들일 수 없음). 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 "Not Acceptable" 내용을 가진 사항이 있을 경우에 발생.
407 Proxy Authemtication Required(Poxy 인증이 필요함). 이 에러는 해당 요청이 수행되도록 프록시 서버에게 인증을 받아야 할 경우에 발생.
408 Request timeout(요청시간이 지남).
409 Conflict
410 Cone(영구적으로 사용할 수 없음).
411 Length Required
412 Precondition Failed(선결 조건 실패). 이 에러는 Request-header field에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생.
413 Request entity too large
414 Request-URI too long(요청한 URI가 너무 김). 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생.
415 Unsupported media type
500 Internal Server Error(서버 내부 오류). 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생.
501 Not Implemented(적용 안 됨). 이 에러는 웹 서버가 요청사항을 수행하는 데 필요한 기능을 지원하지 않는 경우에 발생.
502 Bad gateway(게이트웨이 상태 나쁨). 이 에러는 게이트웨이 상태가 나쁘거나 서버가 과부하 상태일 때 발생한다.
503 Service Unavailable(서비스 불가능). 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다.
504 Gateway timeout
505 HTTP Version Not SupportedHTTP 에러 코드표

[출처] HTTP 에러 코드표|작성자 sant2013


Pupustory Dev/Tip

[펌] OWASP(Open Web Application Security Project) 10 대 취약점

2008/06/09 09:47
크리에이티브 커먼즈 라이선스
Creative Commons License

==================================

본문 출처 >> [  http://s4int.tistory.com/13  ]

==================================

취약한 환경 설정과 부주의, 취약한 소프트웨어로 인하여 WWW 연결을 통해 보안상 심각한 문제가 유발될 수 있다. WWW 서비스는 공개적으로 서비스를 제공하는 형태로 설계되었으며, 일반적으로 주요한 내부 자원을 외부에 제공하는 기능을 하도록 설계되었다. 따라서 이전의 외부로부터의 접근 통제가 가능하였던 보안솔루션에 의해 공격자를 막는 것은 사실상 불가능 하다.

 

OWASP(Open Web Application Security Project) 10 대 취약점을 요약하면 다음과 같다.

 

1. 검증되지 않은 파라미터의 허용(Unvalidated Parameters)

웹 요청 정보가 웹 애플리케이션에 의해 처리되기 이전에 그 요청이 적절한 값인지 여부를 검증하지 않음으로 인해 허가되지 않은 자원에 접근할 수 있는 취약성이다.

url, 쿼리 문, HTTP 헤더, 폼 필드, 쿠키, 그리고 숨겨진 필드 등의 웹 요청(HTTP request)들을 강제로 브라우징 한다거나 명령어 삽입, SQL 문 삽입, 쿠키 위/변조 등을 통해서 보안메커니즘을 우회할 수 있게 된다.

 

[대처 방안]

다음과 같이 스펙 상에 허용된 값만을 받아들이는 허용(Positive) 방식을 사용하여 인자를 검증하여야 한다.

n        데이터 유형 (문자열, 수형, 실수형 등)

n        허용된 문자셋 (character set)

n        최대 / 최소 길이

n        Null 값의 허용 여부

n        반드시 필요한 인자와 그렇지 않은 인자

n        중복 허용 여부

n        숫자의 범위

n        타당한 것으로 지정된 값 (열거형 - enumeration 사용)

n        타당한 것으로 지정된 패턴 (정규식 사용)

 

2. 부적절한 접근 통제(Broken Access Control)

인증되지 않은 사용자가 시스템에 접근하여 중요한 파일 읽거나 권한 없는 기능들을 수행할 수 있는 취약성이다. 예를 들자면 허가되지 않은 사용자가 웹 요청을 통해서 유닉스 시스템 /etc/passwd 파일을 읽거나 윈도우 시스템의 웹 루트 디렉터리를 읽을 수 있는 등의 경로 유출(Path Traversal)을 허용하는 것이다. 이러한 취약성은 웹 컨텐츠와 기능에 적절한 접근 통제를 하지 못하는 것이 원인이다.

 

[대처 방안]

다음과 같은 접근 통제를 점검한다.

n        취약한 ID – 대부분의 웹 사이트는 일정한 형태의 아이디, , 인덱스를 사용하여 각 사용자와 역할, 컨텐츠, 접근 대상, 기능들을 구분한다. 공격자가 이런 값들을 유추할 수 있고, 입력받은 값들이 현재 사용자에게 허용된 적절한 값인지를 검증하지 않는다면, 공격자는 무엇에 접근할 수 있는지를 파악하기 위해 접근 통제 메커니즘을 이리저리 조사해볼 것이다. 웹 애플리케이션의 보호를 위해 특정한 아이디 값이 가진 비밀에 의존해서는 안된다.

 

n        접근 통제 점검을 우회하기 위한 강제 접근(forced browsing) – 많은 사이트들은 사용자가 내부 깊숙이숨어있는 특정한 URL에 접속하는 것을 허용하기 이전에, 특정한 검사를 통과하도록 요구한다. 이런 검사는 단순히 보안 검사를 수행하는 페이지를 우회하는 것만으로 통과 가능해서는 안된다.

 

n        경로 이동(path traversal) – 이런 종류의 공격은 정보를 요청하는 일부분에서 상대 경로(예를 들면 “../../target_dir/target_file”)를 사용하는 것과 관련이 있다. 이런 공격은 정상적인 방법으로는 직접적으로 접근 불가능하거나, 직접적으로 접근하는 경우 서버 측에서 거부하는 파일들에 접근하려고 시도할 때 사용한다. 이런 공격은 URL 이나 궁극적으로는 파일에 액세스하는데 사용되는 값(즉 시스템 콜이나 쉘 명령어)을 서버 측에 요청할 때 사용할 수 있다.

 

n        파일 허가권 많은 웹 서버와 웹 애플리케이션 서버는 OS의 파일 시스템에 의해 제공되는 접근 통제 항목에 의존하고 있다. 비록 거의 모든 데이터가 백엔드 서버에 저장되어 있다 하더라도, 웹 서버나 웹 애플리케이션 서버에 로컬로 저장되어 외부에서 접근할 수 없는 파일들은 항상 있게 마련이다. 이런 파일들에는 특정한 환경 설정 파일, 디폴트 예제 파일, 상당수의 웹 서버나 웹 애플리케이션 서버에 설치되는 예제 스크립트들이 있다. 웹 사용자들에 의해 접근 가능한 파일들만이 OS의 허가권 메커니즘을 사용해 명시적으로 읽기 가능하도록 설정되어야 하며, 대부분의 디렉터리에 대해선 읽기 권한을 제거해야 한다. 필요한 경우 극소수의 파일들에 대해서만 실행 권한을 주어야 한다.

 

n        클라이언트 측 캐쉬 많은 사용자들이 도서관, 학교, 공항, 혹은 다른 공공 장소에 설치된 공용 컴퓨터에서 웹 애플리케이션에 접속한다. 브라우저는 종종 웹 페이지를 캐쉬하는데, 이 캐쉬된 정보는 공격자가 이외의 다른 방법으로는 접근할 수 없는 사이트에 접속하기 위해 필요로 하는 정보이다. 개발자는 HTTP 헤더, 메타 태그 등 다양한 메커니즘을 사용하여 민감한 정보가 담겨있는 페이지가 사용자의 브라우저에 캐쉬되지 않도록 보장해야 한다.

 

3. 부적절한 계정과 세션 관리(Broken Account and Session anagement)

계정에 대한 증명(Account Credential)과 세션 토큰이 적절히 보호되지 못함으로 인해 패스워드나 키, 세션 쿠키, 그리고 다른 토큰 등을 악용하여 인증 메커니즘을 무력화 시키거나 다른 사용자의 아이디를 추측할 수 있는 취약성이다. 예를 들자면 사용자의 패스워드 변경, 패스워드 분실, 사용자 정보 수정 등을 포함하는 증명서와 동적 세션 관리가 적절히 개발되지 않아서 다른 사용자에 의해 추측되거나 가로채기를 당하는 것이다.

 

[대처 방안]

다음과 같은 항목들에 대해 보안 정책을 강화한다.

n        강력한 패스워드 패스워드는 최소 길이와 복잡도에 제한을 두어야 한다. 일반적으로 복잡한 패스워드라 함은 최소한 알파벳, 숫자, 특수 문자(최소 한 개 이상)를 조합하는 것을 요구한다. 사용자는 주기적으로 패스워드를 변경하여야만 하며, 이전에 사용하던 패스워드를 재사용하지 못하도록 해야 한다.

 

n        패스워드 사용 사용자는 일정 시간 이내에 일정 횟수 이상의 로그인 시도를 할 수 없으며, 로그인 시도가 지속적으로 실패하는 경우 이를 로그에 기록하여야 한다. 로그인 실패 시 사용자가 입력한 패스워드는 서버 측에 기록하지 말아야 한다. 이런 정보는 서버의 로그 파일에 접근할 수 있는 누군가가 다른 사용자의 패스워드를 파악하는데 사용될 수 있기 때문이다. 해당 시스템은 로그인 시도 실패 시 틀린 부분이 사용자명인지 패스워드인지를 명시하지 말아야 한다. 사용자는 이전 로그인의 성공 날짜와 시간, 그 이후로 몇 번이나 접속 시도가 실패했는지에 대한 정보를 받아볼 수 있어야 한다.

 

n        패스워드 변경 통제 사용자의 패스워드 변경이 허용된다면, 패스워드 변경 메커니즘은 어떤 상황에서도 단 하나만을 사용하여야 한다. 사용자가 패스워드를 변경할 때는 다른 계정 정보를 변경할 때와 마찬가지로 항상 이전 패스워드와 신규 패스워드를 물어보아야 한다. 해당 시스템 상에서 분실된 패스워드를 사용자에게 전자 메일로 발송한다면, 사용자가 전자 메일 주소를 바꾸려고 할 때도 항상 이런 인증 절차를 거치도록 해야 한다. 그렇지 않은 경우 공격자가 일시적으로 다른 사용자의 세션을 이용해 접속하여(예를 들면, 다른 사용자가 로그인해 있는 상태로 자리를 잠시 비운 사이 컴퓨터 앞으로 걸어가서) 해당 전자 메일 주소를 변경하고, ‘분실한패스워드를 메일로 보내달라고 요청하는 상황이 벌어질 수 있다.

 

n        패스워드 저장 모든 패스워드는 유출 사고로부터 보호하기 위해, 어디에 저장되는지에 상관없이 해쉬된 형태나 암호화된 형태로 저장되어야만 한다. 보통 해쉬 방식을 선호하는데 이 정보는 복호화할 수 없기 때문이다. 평문 패스워드를 사용하면서 이 패스워드를 전달하여 다른 시스템에 로그인 하는 경우에는 반드시 암호화를 사용하여야만 한다. 패스워드는 소스 코드 내부에 하드 코딩하는 일이 없어야 한다. 복호화에 사용되는 키는 해당 키를 습득하여 패스워드 파일을 복호화 하는데 사용할 수 없도록 강력하게 보호되어야만 한다.

 

n        전송 중의 자격 증명 보호 가장 효과적인 방법은 SSL과 같은 기술을 사용하여 로그인 트랜잭션 전체를 암호화하는 방법이다. 서버로 전송하기 이전에 클라이언트 단에서 패스워드를 해쉬하는 형태로 변경하는 단순한 방법으로는, 다른 공격자가 실제 패스워드를 모르는 상태에서 해쉬된 정보를 가로채어 서버로 그대로 전송하는 일이 발생하는 경우 별다른 보안을 제공하지 못한다.

 

n        세션 ID 보안 사용자의 전체 세션은 이상적으로는 SSL을 이용하여 보호되어야만 한다. 이런 경우에는, 세션 ID 유출을 불러오는 가장 심각한 위험인 세션 ID(예를 들면 세션 쿠키)를 네트워크 상에서 도청하는 방법이 별 소용이 없다. 그러나 속도 문제 혹은 다른 이유로 인해 SSL을 사용할 수 없는 경우라면, 다른 방법을 사용하여 세션 ID를 보호하여야만 한다. 첫째로 세션 ID URL에 포함하지 않아야 한다. 이렇게 하는 경우 해당 정보가 브라우저에 캐쉬될 수 있으며, referrer 헤더를 통해 전달될 수 있고, 실수로 친구에게 포워딩할 수도 있다. 세션 ID는 충분히 길고 복잡한 난수여서 손쉽게 추측할 수 없어야 한다. 세션 ID는 세션이 유지되는 중에도 자주 바뀌어 세션 ID가 타당하다고 받아들여지는 시간을 줄여야 한다. 세션 ID SSL로 전환되는 시기, 인증을 거칠 때 혹은 다른 중요한 변화가 있는 시기에 다른 값으로 변경되어야 한다. 사용자가 세션 ID를 임의로 선택하여 사용하는 일은 허용되지 않아야 한다.

 

n        계정 리스트 시스템은 사이트의 계정 리스트에 사용자가 접근하는 것을 허용하지 않도록 설계되어야만 한다. 사용자 리스트를 반드시 제공해야 한다면, 직접적으로 계정명을 제공하기 보다는 별명(예명)과 같은 다른 형태를 제공하기를 권한다. 이렇게 하는 경우, 해당 별명을 이용해 로그인 시도를 할 수 없으며, 사용자 계정을 공격하기 위한 다른 해킹을 시도할 수 없다.

 

n        브라우저 캐쉬 인증 및 세션 관련 정보는 GET 요청의 일부에 포함되어 전송되어선 안된다. 이런 경우에는 대신 POST 요청을 사용하여야 한다. 인증 페이지는 다양한 형태의 캐쉬 금지 태그를 이용함으로써 사용자가 브라우저의 뒤로버튼을 이용하여 인증 페이지로 돌아가지 못하도록 하고, 이전에 사용한 사용자 자격 증명을 재사용하지 못하도록 하여야 한다. 요즘의 여러 브라우저들은 autocomplete=false 플래그를 지원하여, 사용자 자격 증명을 자동완성 캐쉬에 저장하지 못하도록 하고 있다.

 

n        신뢰 관계 사이트의 아키텍쳐 상에서 가능한한 각 컴포넌트들 사이의 암묵적인 신뢰 관계를 피해야 한다. 각각의 컴포넌트는 그래서는 안되는 절대적인 이유가 있는 경우(속도나 가용성 문제와 같은)를 제외하고는, 서로 관련을 맺고 있는 다른 컴포넌트에 대해 인증을 수행토록 해야한다. 만일 신뢰 관계가 필요한 경우라면 강력한 절차상의 메커니즘 혹은 아키텍쳐 메커니즘을 사용하여 사이트의 아키텍쳐가 지속적으로 변화하더라도 이러한 신뢰 관계가 악용될 수 없도록 해야 한다.

 

4. 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)

Cross-site Scripting 취약점은 공격자가 웹 애플리케이션을 사용해서 다른 최종 사용자에게 자바스크립트와 같은 악성 데이터를 보낼 때 발생한다. 그 데이터는 클라이언트에서 실행되는 Java스크립트, VB스크립트, ActiveX, Flash등을 실행하는 코드들이 존재하게 된다. 최종 사용자들은 이렇게 악성 코드들이 포함된 웹 사이트의 링크를 클릭하거나 이메일에 포함된 내용을 읽거나 BBS에 게시된 게시물을 클릭하는 것만으로도 사용자의 환경 설정사항을 변경하거나, 쿠키(cookie)를 가로채고 잘못된 광고들 게시하는 등의 일들을 할 수 있다.

 

[대처 방안]

XSS 공격으로부터 웹 애플리케이션을 방어하는 최선의 방법은 애플리케이션 차원에서 HTTP 헤더, 쿠키, 쿼리 스트링, 폼 필드, 히든 필드 등의 모든 인자들에 대해 허용된 유형의 데이터만을 받아들이도록 입력값 검증을 실시하는 방법이다. 다음과 같이 왼쪽의 필드의 입력 데이터를 오른쪽의 필드로 변환해서 필터링한다.

From

To

<

& l t;

>

& g t;

(

& # 4 0;

)

& # 4 1;

#

& # 3 5;

&

& # 3 8;

 

5. 버퍼 오버플로우(Buffer Overflows)

웹 애플리케이션 컴포넌트가 사용자의 입력값을 적절히 점검하지 않는 언어로 작성되어 다운될 수 있으며, 특수한 경우에는 공격자가 해당 프로세스의 권한을 획득할 수 있다. 이 컴포넌트로는 CGI, 라이브러리, 하드웨어 드라이버, 웹 애플리케이션 서버 컴포넌트 등이 포함된다.

 

[대처 방안]

운영하고 있는 웹 서버 버전을 가장 최신버전으로 업그레이드 하거나 알려진 취약점을 제거할 수 있는 패치를 적용한다. 정기적으로 취약점 스케너를 통해서 취약점 여부를 점검하여 발견된 취약점에 대해서는 구성 설정을 변경하거나 패치를 적용하여 취약점을 제거한다.

 

6. 시스템 명령어 삽입 허용(Command Injection Flaws)

웹 애플리케이션에서 HTML 형식이나 쿠키, URL 파라미터 형식으로 시스템 명령어를 삽입허용함으로써 웹 상에서도 시스템 명령을 실행할 수 있는 취약점이다. SQL 쿼리문을 삽입허용하게 되면 DB인증 메커니즘을 무력화시켜서 중요한 데이터베이스 정보를 외부로 유출할 수 있다. 또한 데이터베이스의 DML(Data Manipulation Language), DDL(Data Definition Language) 언어가 모두 사용 가능하므로 데이터베이스의 유출뿐만이 아니라 무결성을 파괴할 수도 있다.

 

 [대처 방안]

n        반드시 필요하다면 모든 시스템 명령을 사용하는 모든 사용자의 입력값을 점검한다.

n        점검되지 않은 사용자 입력을 시스템 명령으로 전달하지 않는다.

n        점검되지 않은 사용자 입력을 파이프(|)로 전달하지 않는다.

n        점검되지 않은 사용자 입력을 perl open() 명령으로 전달하지 않는다.

n        점검되지 않은 사용자 입력을 C 언어와 PHP popen() 명령으로 전달하지 않는다.

n        점검되지 않은 사용자 입력을 ``(backticks)과 함께 사용하지 않는다.

n        운영체제의 시스템 명령이 사용자 입력에 존재하는지 점검한다.

n        모든 웹 애플리케이션엔 쉘 스크립트를 허용하지 않는다.

 

7. 부적절한 에러처리(Error Handling Problems)

적절하지 못한 오류 처리는 웹 사이트에서 다양한 보안 문제를 야기한다. 가장 보편적인 문제는 데이터베이스 덤프, 에러 코드등과 같은 상세한 내부 메시지들이 사용자에게 노출된다는 것이다. 이러한 정보들은 바로 악용 가능하지는 않지만 향후 발생할 수 있는 공격에 정보를 제공하게 된다. 이러한 문제를 야기하는 원인은 다음과 같다.

 

n        스크립팅 엔진의 설정 오류

n        Servlet/JSP Runner의 설정 오류

n        웹 서버의 설정 오류

n        데이터베이스의 설정 오류

 

이러한 문제를 통해 유출될 수 있는 정보들은 다음과 같다.

n        애플리케이션의 흐름

n        추가적인 웹 서버 정보

n        데이터베이스 형식 및 버전

n        운영체제 형식 및 버전

n        Scripting/Programming 언어의 형식 및 버전

n        물리적인 경로

n        변수 이름과 값

n        변수 형식

n        변수의 사용 목적

n        스크립트 소스 코드의 세그먼트

n        SQL 쿼리의 세그먼트

n        데이터베이스와 테이블의 구조

 

[대처 방안]

웹 애플리케이션이 잘못된 요청을 받았을 때 자체 제작한 오류 페이지로 이동하도록 설정한.

 

8. 취약한 정보 저장방식

대부분의 웹 애플리케이션은 패스워드, 신용카드 번호, 계정 기록과 같은 중요한 정보나 데이터베이스를 저장하고 있기 때문에 암호화 기술을 이용하여 보호하고 있다. 이러한 암호화 기술이 웹 애플리케이션에 적용될 때 다음과 같은 구현상의 오류로 인하여 보안 허점들을 내포하게 된다.

 

n        중요 데이터를 암호화하지 않는 경우

n        암호화에 사용되는 키나, 인증서, 비밀번호를 안전하지 않은 장소에 저장하는 경우

n        기밀 정보를 메모리 상에 부적절하게 저장하는 경우

n        부적절한 난수 발생 방법

n        부적절한 암호화 알고리즘 사용

n        자체 제작 암호화 알고리즘 사용

n        암호화에 사용되는 키 교환에 대한 지원 절차나 다른 유지 관리 절차를 구현하지 않는 경우

 

[대처 방안]

암호화 취약점에 대한 가장 손쉬운 대처 방안은 암호화 사용을 최소한으로 자제하고 반드시 필요한 정보만을 저장하는 것이다. 예를 들면 신용 카드 번호를 암호화하여 저장하기 보다는 필요할 때마다 사용자가 해당 번호를 집어넣게 한다. 암호화된 비밀번호를 저장하기 보다는 SHA-1과 같은 단방향 함수를 사용한다.

 

9. 서비스 방해 공격(Denial of Service)

웹 애플리케이션 측면에서는 공격과 정상적인 트래픽 사이의 차이를 구분하기 어렵다. 이런 구분을 어렵게 하는 다양한 요소들이 있지만, 다른 원인들 중에 가장 중요한 원인은 IP 주소만으로는 신원 확인이 어렵다는 점이다. HTTP 요청이 어디에서 들어왔는지를 파악할 신뢰할만한 방법이 없기 때문에 악의적인 트래픽을 필터링하기가 매우 어렵다.

 

[대처 방안]

기본적으로 서비스 방해 공격을 막아내는 것은 어려우며, 이런 공격을 완벽하게 방어할 수 있는 방법은 존재하지 않는다.

일반적인 규칙은 모든 사용자에게는 제한된 자원만을 할당하고 인증을 거친 사용자는 할당량을 통해 특정 사용자가 시스템에 미치는 부하를 제한할 수 있다.

인증받지 않은 사용자에 대해서는 불필요한 데이터베이스 접근이나 다른 값비싼 자원에 대한 접근을 피해야 한다.

 

10. 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application Server Misconfiguration)

웹 서버와 애플리케이션의 구성 설정은 보안 측면에서 중요한 의미를 가진다. 그러한 구성설정들이 다음과 같은 여러 가지 요인들로 인해 보안 문제를 야기할 수 있다. 이러한 보안문제들은 자동화된 스케닝 도구에 의해 공격자들에 의해 공격 당할 가능성이 매우 높다.

 

n        서버 소프트웨어 상에 존재하는 취약점을 패치하지 않은 경우

n        디렉터리 리스팅이나 디렉터리 이동(traversal) 공격을 허용하는 서버 소프트웨어 상의 취약점이나 취약한 환경 설정

n        불필요한 디폴트 파일, 백업 및 예제 파일(예제 스크립트, 예제 애플리케이션, 환경 설정 파일, 웹 페이지 등)

n        부적절한 파일 및 디렉터리 권한 설정

n        컨텐츠 관리나 원격 관리와 같은 불필요한 서비스 제공

n        디폴트 패스워드를 사용하는 디폴트 계정

n        디버깅 관련 기능이 허용되어 있거나 관리 기능이 접근 가능한 경우

n        상세한 정보를 제공하는 에러 메시지(보다 상세한 사항은 에러 처리 부분을 참조)

n        잘못 설정된 SSL 인증서와 암호화 설정

n        자체 인증서를 사용하여 인증 문제를 해결하거나 가로채기 공격(man-in-the-middle)에 대한 보안을 제공

n        디폴트 인증서 사용

n        외부 시스템을 이용한 부적절한 인증

 

[대처 방안]

n        최근에 발표된 보안 취약점 정보 파악

n        최신 보안 패치 적용

n        보안 강화 가이드라인의 업데이트

n        정기적인 내, 외부 취약점 스캐닝

n        보안 강화 가이드라인 준수 여부를 점검하기 위한 서버 보안 현황 내부 감사

n        전체 보안 현황을 문서화하여 경영진에게 정기적으로 보고

 

 [참고 자료]

OWASP Top Ten Most Critical Web Application Security Vulnerabilities (http://www.owasp.org)


Pupustory Dev/Tip