Saturday, September 28, 2013

Apache 서버의 .htaccess 활용하기

해당 디렉토리에 .htaccess 파일을 사용하기 위해서는 httpd.conf파일에서  AllowOverride 부분을 수정해야 합니다.  All로 하면 모든 기능 사용이 가능하고, AuthConfig로 하면 인증기능을 사용가능, FileInfo 는 txt 등 다른 파일 확장자를 가진 파일을 php로 인식하게 만들어 줍니다.

<Diretory /home/*/public_html>
   AllowOverride FileInfo (또는 All 도 가능)
</Diretory>
 
1) IP 차단

   - 해킹으로 의심되는 IP(예 1.1.1.1)가 있다면 .htaccess 파일에
   
       deny form 1.1.1.1 를 추가하면 됩니다.

       예) deny from 1.1.1.1                
             deny from 2.2.2.2

             deny from 1.1.1.1  2.2.2.2   (위와 같이 따로 적어도 되고 이와 같이 붙여줘도 됨)

             deny from 3.3.3.0/255.255.255.0    (3.3.3.*  대역을 차단 시)

             deny from all
             allow from 4.4.4.4.       (특정 IP만 허용할 경우)


2) order

   - order 는 디폴트 접근정책을 지정하고 Allow 혹은 Deny  평가 되는 순서를 지정합니다.

      Order Allow,Deny     매치가 있으면 Allow 또는 Deny  -> 디폴트는 Deny
      Order Deny,Allow     매치가 있으면 Allow 또는 Deny  -> 디폴트는 Allow

      -> 설정파일의 순서는 중요하지 않으며, Allow, Deny 각각 하나의 그룹으로 취급됩니다.

      예)
 
      Order Allow, Deny
      Allow from 1.1.1.1
      Deny from 1.1.1.1

      디폴트는 Deny 이지만,  1.1.1.1 이 Allow 와 Deny 둘다 설정 -> Deny 됨

      Order Allow, Deny

      디폴트가 Deny 이므로 Deny 됨

3) 인증

   - httpd에 다음과 같이 설정해야 합니다.

       AllowOverride AuthConfig

   - .htaccess  파일에 다음과 같이 넣습니다. (해당 디렉토리는 /home/test)

      AuthType Basic
   AuthName "Restricted Files"
   AuthUserFile /home/test/password
   Require user test

   - AuthUserFile 생성

      htpasswd -c password test

      또는 직접 php를 통해 생성

   <?php
   $user = 'test';

   $pass = 'pass';
   $hash = base64_encode(sha1($pass, true));
   $encoded = '{SHA}'.$hash;
   echo $user.':'.$encoded;
   ?>


      해서 나오는 값을 /home/test/password 로 저장하시면 됩니다.
   페이지는 열고 인증창이 뜨면 유저명 test, 패스워드 pass 라고 넣어 보세요.

   AuthType Basic
   AuthName "Restricted Files"
   AuthUserFile /home/test/password
   Require user test

   여기서
   Require user test -> Require valid-user
   로 변경하고
   /home/test/password 파일에 추가 계정을 등록해 주시면 됩니다.

   추가 등록은 다음라인에 아래와 같이 등록해 주시면 됩니다.
   test:{SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ=
   test1:{SHA}8FePHnF0saQcTqjG4X96ijuIySo=

  - 만일 특정아이피에서는 그냥 접근하고 그 아이피가 아닌경우 인증창이 나타나게     할 경우 Satisfy를 이용하면 됩니다.
    
    4.4.4.4 아이피는 그냥 접근할려면 .htaccess파일에 아래 내용을 추가.

    Satisfy any
    order allow,deny
    Allow from 4.4.4.4

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /home/test/password
    Require valid-user 


    - Basic은 id:pw 형식을 base 64 로 암호화 -> 스니핑 시 id/pw 노출(base 64 복호화)

    - Digest는 md5로 암호화 -> 해시 함수로 복호화 불가. 단 brutus나 dictionary 공격에 대비하여
                     2가지 조합일 경우 10자리, 3가지 조합일 경우 8자리 이상의
                    유추가 어려운 pw사용해야 함


5) AddType 설정

    AddType application/x-httpd-php .php .php3 .php4 .htm .html .txt

    -> txt 확장자 파일을 php로 인식시키는 설정으로 txt파일에 실행권한을 줍니다.

   php코드를 담은 txt 파일을 업로드 -> 실행 -> nobody 권한 획득 -> config.php 분석

   -> mysql 권한 확보 -> db 정보 획득 , ftp 계정 확보

   - 해결책

   1) php.ini 에 allowoverride none 설정

   2) 해당 업로드 폴더에 .htaccess 파일을 업로드(빈 파일로) 후 755 퍼미션으로 설정

      -> 추가 업로드 방지

   3) 게시판 업로드에서 .htaccess 파일 체크

 
 











No comments:

Post a Comment