반응형
fckeditor 사용하면서 보안상 이슈가 있어서 수정.

절대경로를 상태경로로 변경해야 방화벽 룰셋을 통과하는 부분에 대한 링크
http://dev.fckeditor.net/ticket/2875
http://www.geeklog.net/forum/viewtopic.php?showtopic=86782

mod_security 의 htaccess Tip
- 회사서버에는 적용되지 않는 상태
http://www.askapache.com/htaccess/mod_security-htaccess-tricks.html#menu0-el9

구글링
http://www.google.co.kr/search?hl=ko&newwindow=1&q=fckeditor+file+browser+modsecurity+error&aq=f&aqi=&aql=&oq=&gs_rfai=


mod_security 룰셋 추가설정
KISA에서 받은 룰셋중 fckeditor 를 사용하면서 오류가 나는 부분이 있어서 아래와 같이 수정

# dir|page 가 들어가 있으면서 https가 요청되는 경우가 fckeditor 에서 발생하기 때문에 수정
SecRule REQUEST_URI "(dir|page|)" chain
#SecRule REQUEST_URI "=(http|https|ftp)\:/"
SecRule REQUEST_URI "=(https|ftp)\:/"
SecRule REQUEST_URI "shell_exec\(" "msg:'PHP Injection Attacks'"

반응형

'개발도 하냐?' 카테고리의 다른 글

디자이너에게 배우다.  (1) 2010.07.07
PHP 코딩 규약 - PEAR  (0) 2010.06.25
Prototype URL encode, decode  (0) 2010.06.19
정규표현식(regular expressions)  (0) 2010.06.16
HTTP 응답코드  (0) 2010.06.13
반응형
Prototype URL encode, decode 
    String.prototype.URLEncode = function URLEncode() {
        var SAFECHARS = "0123456789" +     // Numeric
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
     "abcdefghijklmnopqrstuvwxyz" +
     "-_.!~*'()";     // RFC2396 Mark characters
        var HEX = "0123456789ABCDEF";
        var plaintext = this;
        var encoded = "";
        for (var i = 0; i < plaintext.length; i++) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                encoded += "+";    // x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                encoded += ch;
            } else {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) {
                    alert("Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
              "(URL encoding only supports 8-bit characters.)\n" +
        "A space (+) will be substituted.");
                    encoded += "+";
                } else {
                    encoded += "%";
                    encoded += HEX.charAt((charCode >> 4) & 0xF);
                    encoded += HEX.charAt(charCode & 0xF);
                }
            }
        } // for
        return encoded;
    };




    String.prototype.URLDecode = function URLDecode() {
        var HEXCHARS = "0123456789ABCDEFabcdef";
        var encoded = this;
        var plaintext = "";
        var i = 0;
        while (i < encoded.length) {
            var ch = encoded.charAt(i);
            if (ch == "+") {
                plaintext += " ";
                i++;
            } else if (ch == "%") {
                if (i < (encoded.length - 2)
     && HEXCHARS.indexOf(encoded.charAt(i + 1)) != -1
     && HEXCHARS.indexOf(encoded.charAt(i + 2)) != -1) {
                    plaintext += unescape(encoded.substr(i, 3));
                    i += 3;
                } else {
                    alert('Bad escape combination near ...' + encoded.substr(i));
                    plaintext += "%[ERROR]";
                    i++;
                }
            } else {
                plaintext += ch;
                i++;
            }
        } // while
        return plaintext;
    };
반응형

'개발도 하냐?' 카테고리의 다른 글

PHP 코딩 규약 - PEAR  (0) 2010.06.25
mod_security AND fckeditor  (0) 2010.06.21
정규표현식(regular expressions)  (0) 2010.06.16
HTTP 응답코드  (0) 2010.06.13
CakePHP Framework  (0) 2010.06.09
반응형


외부사이트의 조회수를 가져와야 하는경우 정규식

유투브 :  \d+(\,*)\d+
플리커 : Viewed (\d+) times




출처 : http://user.chollian.net/~spacekan/source/string/regExp.htm

Special characters in regular expressions

특수문자 의미
\
다음 글자가 일반적인 글자가 아니고 특수문자로 사용된다는 지정이다. 특수문자로 사용할 문자앞에 backslash(\)를 붙여준다. \w는 w가 특수문자로 사용됨을 나타낸다. \w의 의미는 모든 문자를 가리킨다.

또는 반대로 특수문자를 일반적인 문자로 지정하게 한다. \\는 backslash(\)문자를 나타낸다. \\\/는 slash(/) 문자를 나타낸다.

^
input이나 line의 시작문자. /^A/는 "Amatch"와는 맞지만 "an Amatch"와는 맞지 않는다.
$
input이나 line의 끝문자. /A$/는 "abA"와는 맞지만 "aAb"와는 맞지 않는다.
*
앞 문자가 0번 이상 있으면 맞다. 없어도 되고 여러개 있어도 된다. /ab*c/는 "abbbc"와 맞다. "ac"와도 맞다. 하지만, "ax"와는 맞지 않는다.
+
앞 문자가 1번 이상 있으면 맞다. 1개 이상 있어야 하고 여러개 있어도 된다. /ab+c/는 "abbbc"와 맞다. 하지만, "ac"와는 맞지 않는다.
?
앞 문자가 0번이나 1번은 있어야 맞다. /ab?c/는 "abc"와 맞고 "ac"와도 맞다. 하지만, "abbc"와는 맞지 않는다.
.
개행문자(\n)외에 모든 문자이면 맞다. /.c/는 "Xc", "1c"와 맞다. 하지만, "ca", "\\nc"와는 맞지 않는다. (\\n은 \n의 뜻이다. 특수문자로 사용되는 \를 문자로 표현하기 위해서 앞에 \를 붙여준다. )
(x)
문자 'x'를 검색하고 맞으면 'x'를 기억한다. /a(bc)/는 "abcd"에서 검색되고 "bc"를 기억한다. 이 기억된 것은 RegExp 객체의 $1에서 $9까지로 또는 배열 [1]에서 기억된 숫자 [n]개 까지로 호출될 수 있다.
x|y
'x'나 'y'가 있으면 맞다. /abc|xx/는 "abc ZZZ"나 "xx ZZZ"와 맞다.
{n}
앞 문자가 n개 있으면 맞다. n은 양수 정수이다. /X{2}/는 "abcXX"와 맞다. "abcXXX"와도 맞고 처음 2개의 "XX"가 검색된다.
{n,}
앞 문자가 최소한 n개 있으면 맞다. n은 양수 정수이다. /X{2,}/는 "abcXX"와 맞다. "abcXXX"와도 맞고 3개의 "XXX"가 검색된다.
{n,m}
앞 문자가 최소한 n번에서 m번까지 있다면 맞다. /a{1,3}/은 "ab", "aaab"와 맞다.
[xyz]
xyz 중에서 아무런 문자가 있어도 맞다. 이것은 [x-z]과 같은 지정이다.
[^xyz]
xyz 중에서 하나의 문자라도 없으면 맞다. 이것은 [^x-z]과 같은 지정이다.
[\b]
backspace
\b
공백같은 것으로 단어의 경계되는 부분에 있는 문자이다. /\bX/는 "Xxx"와 맞다. /X\b/는 "xxX"와 맞다.
\B
\b와 반대이다. 단어 경계에 있지 않은 문자만 맞다. /X\Bz/는 "XXz Xzz"에서 두번째의 "Xz"가 검색된다.
\cX
control-X 문자와 맞다. /\cM/은 control-M 문자이다.
\d
숫자는 맞다. [0-9]와 같은 지정이다. /\d/는 "hi5"에서 "5"를 검색한다.
\D
숫자가 아닌 것은 맞다. [^0-9]와 같은 지정이다. /\D/는 "hi5"에서 "h"를 검색한다.
\f
form-feed(\f) 문자와 맞다.
\n
linefeed(\n) 문자와 맞다.
\r
carriage return(\c) 문자와 맞다.
\s
space, tab, form feed, line feed를 가지고 있는 white space 문자와 맞다.[ \f\n\r\t\v]와 같은 지정이다. /\s\w*/는 "abc Xz"에서 "Xz"를 검색한다.
\S
white space 문자가 아닌 하나의 문자이다. [^ \f\n\r\t\v]와 같은 지정이다. /\S\w*/는 "abc Xz"에서 "abc"를 검색한다.
\t
tab 문자
\v
vertical tab 문자
\w
underscore(_)문자를 포함하는 알파벳과 숫자 0에서 9까지의 문자. [A-Za-z0-9_]와 같은 지정이다.
\W
\w의 반대이다. [^A-Za-z0-9_]와 같은 지정이다. /\W/는 "50%"에서 "%"를 검색한다.
\n
n은 양수 정수이다. ()로 묵은 것을 지정한다. \1은 RegExp.$1, \2는 RegExp.$2의 값을 사용한다. /ab(c)de\1/은 "abcdec"와 맞다.
\o숫자, \x숫자
escape문자로 ASCII codes 값을 넣을 수 있게한다. 8진, 16진 10진수를 넣을 수 있다.
반응형

'개발도 하냐?' 카테고리의 다른 글

mod_security AND fckeditor  (0) 2010.06.21
Prototype URL encode, decode  (0) 2010.06.19
HTTP 응답코드  (0) 2010.06.13
CakePHP Framework  (0) 2010.06.09
editplus setting  (0) 2010.06.06
반응형


우선 테스트 자동화 도구는 테스트 수행의 어떤 단계를 자동화 하느냐에 따라 크게
테스트의 관리/실행(execution)/생성(generation)/측정(measurement) 자동화 도구로 분류할 수 있습니다.

- 첫번째로, 테스트의 관리(management)를 자동화하는 도구는 테스트 과정에서 산출되는 테스트 케이스/슈트/스크립트 및 각종 문서들을 통합관리하는 기능을 제공합니다.
- 두번째로, 테스트의 실행(execution)을 자동화하는 도구는 테스트 대상 프로그램의 수행 및 제어를 자동화하는 기능을 제공합니다.
- 세번째로, 테스트의 생성(generation)을 자동화하는 도구는 테스트 대상 프로그램에 입력으로 주어지는 테스트 케이스 및 테스트 스텁(stub) 등을 자동으로 생성하는 기능을 제공합니다.
- 네번째로, 테스트의 측정(measurement)을 자동화하는 도구는 테스트 수행에 따른 커버리지(coverage) 측정 등의 과정을 자동화합니다.

위의 네 가지 분류는 테스트 자동화 도구를 상호 배타적으로 분류하는 기준은 아닙니다. 다시말해 하나의 테스트 도구가 위의 네 가지 분류에 모두 속할 수도 있다는 것입니다. 예를 들어, 어떤 GUI Record/Playback 자동화 도구가 테스트 대상 GUI 응용프로그램을 수행하고 사용자로부터 주어지는 모든 이벤트를 기록한 후 저장하였다가 회귀(regression) 시험과정에서 저장된 데이터를 다시 활용하는 기능을 제공하고 테스트 수행결과에 대해 다양한 커버리지 측정결과를 제공한다면, 이 자동화 도구는 위의 네 가지 분류에 모두 속할 수 있는 것이죠.

또한, 위의 분류에서 테스트의 실행(execution) 자동화 도구와 생성(generation) 자동화 도구는 테스트 케이스 및 테스트 하니스(harness) 등의 테스트 수행에 필요한 입력 및 환경 등을 자동으로 생성하느냐에 따라 중요한 차이점을 갖습니다.

[출처] STEN - http://www.sten.or.kr/bbs/board.php?bo_table=test_story&wr_id=1659


테스트 자동화 도구들

Selenium



http://seleniumhq.org/download/
http://wiki.openqa.org/download/attachments/400/Selenium+IDE.swf

Selenium 사용에 대한  강규영님의 강좌 동영상 - http://barcamp.tistory.com/18

Selenium 사용 한글 설명 : http://kwon37xi.springnote.com/pages/804128.xhtml

Amazon의 E2C 클라우드를 이용해서 Selenium으로 대규모 부하 테스트를 할 수 있는 사이트

http://saucelabs.com/

Selenium 스크립트를 만든후에, 로드하면 Amazon 클라우드를 이용하여 부하테스트를 하고, 그 결과를 리포팅.
Load R*와 같은 툴을 사용할 수 없는 곳이나, 이미 Selenium으로 테스트 코드를 구현해 놓은 곳에서는 저비용으로
유용하게 사용가능.

Selenium과 Continuous Integration 통합
http://www.javajigi.net/pages/viewpage.action?pageId=267845637

Selenium 한글화
http://alankang.tistory.com/198

HtmlUnit

http://sourceforge.net/projects/htmlunit/

http://samie.sourceforge.net/

JUnit
http://github.com/KentBeck/junit/downloads

jsspec
http://code.google.com/p/jsspec/
매뉴얼 : http://jania.pe.kr/aw/moin.cgi/JSSpec/Manual
JSSpec용 EditPlus ACP,STX 파일 : http://hiphapis.net/entry/AcpStxForJSSpec

유닛테스트에서 시각과 시간
http://alankang.tistory.com/176





반응형
반응형


editplus 사용자를 위한 소스코드 정리기입니다.


프로그램 그룹으로 등록해서 사용.(텍스트필터로 실행)
제 경우 인수는 2t D D D,script,?,?php $(CurSel) 사용



사용법

[들여쓰기][코드들여쓰기] [태그리스트1] [태그리스트2] [태그리스트3] ($CurSel)
---------------------------------------------------------------------------
ex) 2t D D D $(CurSel)

    * 들여쓰기
      0~9까지의 숫자, 탭문자를 이용하고 싶으면 t를 사용
    * 코드들여쓰기
      0~9까지의 숫자, 탭문자를 이용하고 싶으면 t를 사용
      코드 정렬을 안하려면 n을 사용한다
    * 태그리스트1
      들여쓰기할 태그 리스트, D를 이용하면 기본 태그를 사용한다.
      기본 목록은 tr,td,div,ol,ul,li 이다.
      추가하고 싶다면, D뒤에 컴마(,)를 이용 추가하면 가능하다.
      D를 없애고 직접 적어주는것도 가능하다.
    * 태그리스트2
      들여쓰기는 안하지만 한줄에 하나만 있어야할 태그 리스트.
      D를 이용하면 기본 태그를 사용한다.
      기본 목록은 html,head,body,title,meta,table,link,map,select 이다.
    * 태그리스트3
      정리를 안할 태그 리스트, D를 이용하면 기본 태그를 사용한다.
      기본 목록은 pre,style 이다.
      script, ?, ?php 를 넣어두면 php와 javasript가 html의 정렬과 상관없이 정렬된다.



참고 : http://blogdoc.nate.com/820498

반응형
반응형
보안서버 구축 후, 일반 사용자에게 암호화 되고있는 효과를 보여주기 위해서는 http 패킷을 보여줘야 한다.
(http가 plain text로 통신되며 안전하지 않은 것을 눈으로 보여주기 위해서 이 문서를 작성.)

http로 통신되는 내용을 보기위한 방법은 여러가지 존재하는데
그 중 윈도우 사용자를위한 패킷분석도구를 사용해서 http를 살펴보자.
libpcap, ehtreal 기반의 훌륭한 패킷분석도구가 오픈소스로 제공되니 설치해보자.

Packetyzer - 패킷분석기

http://sourceforge.net/projects/packetyzer/


설치를 일반적인 윈도우 프로그램과 동일하게 진행하고 난 후
아래의 아이콘을 클릭하면 패킷을 분석하기 시작한다.



이 상태에서 브라우저를 열고 대상사이트를 방문하여, 로그인 같은 과정을 진행한다.
그리고 위의 버튼을 한번더 클릭하면 패킷분석이 중단된다.

여러가지 네트워크 관련 트래픽이 일어나는 pc의 경우라면 많은 내용이 빠르게 흘러가면서 캡처될것이다.
그 중 원하는 내용만 별도로 보기위해서 프로그램 하단의 filter를 이용하자.


설정한 주소만 보여달라는 필터를 설정을 한 후 apply버튼을 누르면 해당하는 ip의 내용만 나타난다.

아주 다양한 유형의 필터를 설정해서 볼수 있으므로,
필터의 상세한 내용은 프로그램 상단메뉴의 > Windows > Show FilterList 를 보자.

내용을 살펴보면 아래처럼 아이디와 비밀번호를 평문으로 전달하고 있는것을 볼 수 있다.




이번에는 브라우저의 주소를 보안서버가 적용된 https로 접속하여 패킷을 분석해보자.
그 결과 전달된 내용이 암호화 되고 있음을 볼 수 있다.


반응형
반응형
http://www.faqs.org/rfcs/rfc2616.html

- 200
[OK]  클라이언트의 request가 성공적으로 수행됐다.
request처리결과로 클라이 언트에게 전달되는 정보는 사용된 method에 따라서 달라진다.
[GET] request가 지정한 자원이 response메세 지로 전달 된다.
[HEAD] response메세지에는 요청된 자원에 관한 정보를 나타내는 header만이 포함된다.
[POST] 지 정된 동작의 수행결과를 포함하거나 결과를 설명하는 엔터티가 전달된다.

- 201
[ Created] request 가 처리되었고 그 결과로 새로운 자원이
생성되었다. 생성된 새로운 자원을 나타내는 URI값이 response메시지로 전달된 다. 서버가 이와 같은 status code를 클라이언트에게 전달하기 위해서는 새로운 자원을 먼저 생성시켜야 한다.
response 메시지를 전달 할때까지 새로운 자원이 생성되지 못하면 status code 202(Accepted)를 보내야 한 다. POST method만이 서버에 새로운 자원을 생성시킬 수 있다.

- 202
[Accepted] request 가 수락되었으나 response메시지를 전달할
때까지 그 프로세싱이 완료되지 못했으며 또한 언제까지 request의 수행결과 를 사용자가 볼 수 있을지를 확실히 판단할 수 없다. 이와 같은 status code는 request가 수락된 것 (accepted)만을 나타낼뿐 궁극적으로 그 request가 처리될 것이라는 보장
할 수 없을 때 사용된 다. status code 202는 Web브라우저와 같이 서버의 처리결과를 전달받을 때까지계속 기다리게 되는 클라이언트를 위한 것 은 아니다.
WEb브라우저와는 다른 일종의 batch프로세서(하루에 한번정도 실행되는)의 request를 서버가 받아들 일 수 있도록 하기위한 것이다.

- 204
[No Content] 서버가 request를 처리했지만 클라이언트에 게 전달할 새로운 정보가 없다. 이 status code를 전달받는 Web브라우저는 현재 디스플레이 중인 내용을 변경시키지 않아 야 한다. 이 code를 정의한 주된 목적은 현재 디스플레이 중인 문서의 내용을 변경시키지 않으면서 CGI스크립트 등에 입력을 전 달할 수 있도록하기 위해서이다.

- 300
[Multiple] HTTP/1.0을 사용하는 경우에는 이 code 가 직접적으로Choices 사용되지는 않는다. 다만, 3xx클래스에 속하는 status
code의 디폴트값으로 사용된 다. 그 의미는 301, 302, 304만이 HTTP/1.0에 정의되어 있으므로 그 외의 status code값을 전달받는 경우에 는 300으로 간주한다는 의미가 되는 것이다.

- 301
[Moved] 요청된 자원의 URI값이 완전히 변경되었 으므로 앞으
Permanently 로는 새로운 URI값을 사용하여야 한다. 새로운 URI값은 Location헤더를 통해서 클 라이언트에게 전달된다. 또한
HEAD method를 제외한 모든 경우에 response메시지의 entity body를 통해 서 새로운 URI의 하이퍼링크를 포함하는 짧은 메시지를 전달해 주어야 한다. Web브라우저는 POST method를 사용 한 request의 결과로 301 status code를 전달받는 경우에는 자동으로 새로운 URI에 접속해서는 안된다. 반드 시, 사용자의확인을 거쳐야 한다.

- 302
[Moved] 요청된 자원의 URI값이 임시로 변경되었다. 따라 서 추후
Temporarily 에도 현재의 URI값을 계속 사용하여야 한다. 새로운 URI값은 Location헤더를 통해 서 클라이언트에게 전달된다.
또, HEAD method를 제외한 모든 경우에 response메시지의 entity body 를 통해서 새로운 URI의 하이퍼링크를 포함하는 짧은 메시지를 전달해 주어야 한다. Web브라우저는 POST method를 사용 한 response의 결과로 302 status code를 전달받는 경우에는 자동으로 새로운 URI에 접속을 해서는 안된다. 반드 시 사용자의 확인을 거쳐야 한다.

- 304
[Not] conditional GET method가 사용된 경우 에 전달된다.
[Modified] request를 처리한 결과 If-Modified-Since헤더에 지정된 날짜/시간 이래 로 지정된 문서가 변경된 사실이 없는 경우
서버는 이 status code로 응답해야 한다. 이때, entity body 는 전송되지 않는다. reseponse메시지로 전달되는 헤더들은 주로 cache와 관련된 정보를 포함하게 된다.
cache manager(대 개의 경우는 Web브라우저 자체에 그 기능이 포함된다)는 304 response에 포함된 헤더의 값을 cache된 entity들 에 반영할 수 있도록 하여야 한다.

- 400 
[Bad Request] request메시지의 syntax가 잘 못되어서 서버가 request를 처리할 수 없다. 재접속을 하는 경우에 클라이언트는
반드시 올바른 request메시지를 사용 해야 한다.

- 401
[Unauthorized] request가 user quthentication을 필요 로 한다는 것을 클라이언트에게 알려주기 위해서 사용된다.
WWW-Authenticate헤더를 통해서 요청된 자원에 적용되 는 hallenge를 전달한다. 401 response를 받은 클라이언트는 적절한 Authorization credentials 를 포함하는 Authorization헤더와 함께 다시 request메시지를 전송한다.
request메시지에 그와 같 은 Authorization credentials이
포함된 경우에 401 status code가 전달되 면 user authentication이 실패한 것을 나타낸다.

- 403 
[Forbidden] 서버 가 request의 처리를 거절하는 것을 나타낸다. 이와 같은 응답을 받은 경우에는 동일한 request를 반복하지
말아 야 한다. 왜냐하면 무조건 request가 거절되는 것이기
때문이다. 403 status code는 request를 거절하 는 이유를
명시적으로 밝히고 싶지 않거나 달리 대응할 적절한 status code가 없을때 사용된다.

- 404
[Not Found] Request- URI에 해당하는 자원을 찾을 수 없을 경우에 사용된다. 그런 상태가 일시적인 것인지 아니면 언제나 그렇게되는지를 나타내는 어 떤 정보도 전달되지 않는다. 이런 상태를 클라이언트에게 알리고 싶지 않은 경우에는 403code를 대신 사용해도 된다.

- 500 
[Internal] 서 버프로그램에서 예기치 않은 오류가 발생하여서 request Srever Error  를 처리할 수 없다.

- 501
[Not] request 를 처리하기 위해서는 필요한 기능을 서버가 갖추고 Implemented  있지 못하다.

- 502
[Bad] gateway 나 proxy로 동작하는 서버가 사용하는 것으로 자신
Gateway 의 위쪽에 있는 서버로 부터 잘못된 response메시지 를 전송 받았다는 것을 나타낸다.

- 503
[Service] 과부하나 서버 maintenance때문에 서버 가 잠시동안 request Unavailable 를 처리해 줄수 없는 상태에 있다.
 
반응형

'개발도 하냐?' 카테고리의 다른 글

Prototype URL encode, decode  (0) 2010.06.19
정규표현식(regular expressions)  (0) 2010.06.16
CakePHP Framework  (0) 2010.06.09
editplus setting  (0) 2010.06.06
hidden frame  (0) 2009.12.27
반응형
보안서버에 대해서 잘 모른다면 http://www.kisa.or.kr/jsp/notice/notice_detail.jsp?b_No=4&d_No=143 에서
보안서버구축가이드를 다운로드 받아서 읽어보시기 바랍니다.

보안서버를 구축하기 위해서는 신뢰할수있는 root CA가 발급한 인증서가 필요하죠.
무료로 보안서버를 구축하기 위해서는 인증서가 필요한데
startssl 사이트에서 인증서를 발급받아서 사용가능합니다.

startssl 사이트에 방문해서 몇가지 절차를 거치면 보안서버에 사용가능한 인증서가 발급 됩니다.
(발급과정은 http://www.lovelgw.com/Blog/194 참고)

이메일용 또는 도메인용으로 발급받아서 사용 가능한데 ,
우선 이메일용을 먼저 발급받아서 도메인까지 사용하도록 변경해야 합니다.

그리고, 도메인에 ssl 인증서로 사용할 목적인 경우에는 도메인소유자의 이메일주소가 필요하며,
인증을 모두 받아서 정상적으로 로그인하면 아래와같은 제어판을 사용가능 합니다.



발급과정에서 획득되는 key 와 crt 파일을 이용해서 웹서버에 SSL 인증을 위한 준비를 진행합니다.
(Apache 서버의 ssl 적용은 많은 글들이 있으니 다루지 않습니다.)


SSL 서버를 구축한 후 불여우, 오페라, IE7 으로 테스트 해보니
IE를 제외한 다른 브라우저는 추가 설치없이 무리없이 사용가능한데...ie사용자를 생각하면 우리나라에서 그냥 쓸수 없다는 말..
구글링을 해보니 ie의 경우 root CA를 업데이트 해주고 나서 정상적으로 사용가능한것을 알았습니다.
(http://www.istartedsomething.com/20091010/microsoft-free-root-certificate-authority-windows/)
- 최근의 운영체제들은 대부분 사용가능하지만, 제 개발환경의 경우 CA업데이트가 아직 적용안된상태네요.

제 경우처럼 IE에 StartSSL이 Root 인증기관으로 등록되어 있지 않아서 인증서를 사용할 수없는 사람은
오류메세지를 만나게 될것입니다.

IE의 root CA를 업데이트 하지 않아서 신뢰할수 없는 인증서라는 메세지를 만나는 경우라면
아래의 경로 IE의 root CA를 업데이트 하고 난 후 정상사용 가능합니다.(아래 링크를 참고하세요)
http://support.microsoft.com/kb/931125

업데이트파일 :
IE로 서비스중인 도메인에 https로 접속을 해서
보안되지 않은 내용을 포함하고 있다는 메세지를 만난다면, 브라우저의 보안설정을 아래와 같이 변경해주시기 바랍니다.



모든 설정을 완료했다면, 웹페이지 하단에 아래와 같은 스크립트를 삽입해서 SSL작동되고 있는 모습을 알려주면 좋겠죠

<script type="text/javascript" src="https://www.startssl.com/seal.js"></script>

접속 후 아래와 같은 로고를 볼수있습니다.
(제 경우는 IE에서 스크롤링 스크립트가 문제가 있네요.)

다른 모양의 로고를 삽립하기 위해서는 https://www.startssl.com/?app=24 를 방문해보면 여러가지 모양의 이미지가 있으니 사이트에 적용해 보세요.


IE에서 본 인증서


반응형

'오픈소스SW' 카테고리의 다른 글

웹어플리케이션 테스트  (0) 2010.06.16
http 패킷 보기  (1) 2010.06.13
iptable rule  (0) 2010.06.10
CentOS 5.2.x PHP UPDATE  (0) 2010.06.09
Apache 웹방화벽 ModSecurity 사용하기  (1) 2010.06.08
반응형

#!/bin/sh

#iptables Path
iptables=/sbin/iptables

# SERVER IP 받아오기.
HOST_IP="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
NETMASK="`/sbin/ifconfig eth0 | grep 'inet addr' | awk '{print $4}' | cut -d : -f 2`"

# rule delete
# 모두 지우고 다시 재설정합니다.
$iptables -F

######### 비정상적 패킷은 드롭시킨다. 로그에 남긴다. ###############
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#iptables -A FORWARD -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "NMAP-XMAS:"
#iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "SYN/FIN:"
#iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "SYN/RST:"


#Drop RST/ACKs to limit OS detection through pinging
iptables -A FORWARD -p tcp --tcp-flags RST RST,ACK -j DROP
#iptables -A FORWARD -p tcp --tcp-flags RST RST,ACK -m limit --limit 5/minute -j LOG --log-level notice --log-prefix "RST/ACK:"

# INPUT Rules 설정
$iptables -Z INPUT
$iptables -P INPUT ACCEPT

# local 과 자기자신의 IP 는 허용.
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A INPUT -s 도메인 -j ACCEPT

#  알 수 없는 패킷 즉,  NETWORK 상태가 INVALID 인 패킷들을 막아 버린다.
#  정상적인 접근에서는 나올 수 없는 상태.
$iptables -A INPUT -m state --state INVALID -j DROP

# ssh service
# ssh 접속 지역 지정.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 22 -j ACCEPT

# etc service
# 25(메일), 80(웹)은 모든 곳에서 ACCEPT 입니다. 반드시...
$iptables -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

# AUTH 는 서비스를 하지 않더라도 열어야 합니다. 클라이언트에서 요청합니다.
$iptables -A INPUT -p tcp --dport 113 -m state --state NEW,ESTABLISHED -j ACCEPT

# mysql
# 기본적으로 mysql 은 local에서만 접속하면 됩니다. DB 공유를 할 경우 대역 지정.
$iptables -A INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT

# mysql DB공유 대역설정
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 3306 -j ACCEPT

# ICMP service
# ping은 별 의미가 없지만...
$iptables -A INPUT -s 아이피.0.0/16 -p icmp --icmp-type echo-request -j ACCEPT

# 서버로 들어오는 SYN packet 을 모두 거절한다.
$iptables -A INPUT -p tcp --syn -j REJECT

# Drop All packet
# 원활한 서비스를 위해 65535 포트까지만 DROP 을 합니다. 물론 다 막아도 상관 없습니다.
$iptables -A INPUT -p tcp --dport 0:65535 -j DROP
$iptables -A INPUT -p udp --dport 0:65535 -j DROP
$iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

# 각종 서비스들에 대해 최대의 성능을 발휘할 수 있도록 TOS 설정을 한다.
$iptables -t mangle -A OUTPUT -p tcp -s 0/0 --sport 80 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 22 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 21 -j TOS --set-tos 0x10
$iptables -t mangle -A OUTPUT -p tcp -d 0/0 --dport 20 -j TOS --set-tos 0x08
$iptables -t mangle -A OUTPUT -p tcp -s 0/0 --sport 23 -j TOS --set-tos 0x10

# 외부 서비스를 위한 설정. / udp service
# dns 상호 쿼리를 위해서...
#$iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT

# TCP service
# ftp-data, 서버자체가 클라이언트가 될 경우...
$iptables -A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
$iptables -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

# ftp service
# ftp 를 이용할 수 있는 대역을 지정하였습니다. 좀더 세밀해 질 수 있겠죠.
#$iptables -A INPUT -s 아이피.0.0.0/8 -p tcp --dport 21 -j ACCEPT
#$iptables -A INPUT -s 아이피.0.0/16-p tcp --dport 21 -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 21 -j ACCEPT

# telnet
# telnet은 현재 서비스 하지 않습니다.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 23 -j ACCEPT

# pop3s 를 이용하는 관계로 995번을 열고 있습니다.
#$iptables -A INPUT -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT

# ip 대역 예제.
# ip 대역뿐만 아니라 아래와 같이 상태접속을 지정할 수도 있습니다.
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0/24 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$iptables -A INPUT -s 아이피.0.0/16 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

# UDP service
# udp 서비스는 하나뿐이죠?
#$iptables -A INPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

echo -e "\nDone.\n"

exit;

Inline Translator가 로드되지 못했습니다. 다시 시도하시려면 새로고침해주세요.
반응형

'오픈소스SW' 카테고리의 다른 글

http 패킷 보기  (1) 2010.06.13
보안서버 구축에 사용되는 무료인증서 StartSSL  (0) 2010.06.13
CentOS 5.2.x PHP UPDATE  (0) 2010.06.09
Apache 웹방화벽 ModSecurity 사용하기  (1) 2010.06.08
jquery datepicker 사용  (0) 2010.06.05
반응형

서버의 보안점검을 실시한 결과 php 패키지를 업데이트하라고 권고해서
업데이트하기로 결정.

To upgrade to PHP 5.2.x on CentOS/RHEL/Fedora:
http://www.atomicorp.com/wiki/index.php/PHP

yum update를 해보니..업데이트할패키지가 거의 1G정도..

업데이트가 끝나면 php.ini 와 php.conf 파일을 복구해주자.

mv /etc/php.ini.rpmnew /etc/php.ini
mv /etc/httpd/conf.d/php.conf.rpmnew /etc/httpd/conf.d/php.conf

이전에 사용하던 설정들이 있다면 *.rpmsave 에서 다시 확인해서 수정해준다.

웹서비스 재시작
service httpd restart



업데이트 전
[root@ns ~]# cat /etc/redhat-release
CentOS release 5.2 (Final)

업데이트 후
[root@ns ~]# cat /etc/redhat-release
CentOS release 5.5 (Final)
[root@ns ~]# php --version
PHP 5.2.5 (cli) (built: Sep 22 2008 14:55:04)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.0, Copyright (c) 1998-2007, by Zend Technologies
[root@ns ~]#


Inline Translator가 로드되지 못했습니다. 다시 시도시려면 새로고침해주세요.
Inline Translator가 로드되지 못했습니다. 다시 시도하시려면 새로고침해주세요.
반응형

'오픈소스SW' 카테고리의 다른 글

보안서버 구축에 사용되는 무료인증서 StartSSL  (0) 2010.06.13
iptable rule  (0) 2010.06.10
Apache 웹방화벽 ModSecurity 사용하기  (1) 2010.06.08
jquery datepicker 사용  (0) 2010.06.05
php 문자열처리 관련 function  (0) 2010.06.05

+ Recent posts