티스토리 뷰

728x90
반응형

 포스팅은 Apache Referer 기능에 대한 WebtoB 대체 방안에 대해 알아보겠습니다.



1. Apache Referer

apache에서는 출발지 즉 사용자 접속에 대한 제어가 가능합니다. 또한, 유저가 아닌 외부의 링크(referer)를 통해 특정 페이지나 파일들을 계속적으로 호출할 경우에도 제어가 가능합니다.
    1.1 사용자 제어
    httpd.conf 내에 Directory 내에 설정이 가능합니다.
 

<Directory "/">

Options FollowSymLinks

AllowOverride FileInfo

Order allow,deny

Allow from all

deny from 123.123.123. 123.123.125.125

</Directory>

Order 순서에 따라 모든 ip를 allow하고 표기된 123.123.123. 123.123.125.125 만 차단하는 설정이다.

 

1.2 외부의 링크 제어
httpd.conf 내에 Directory 내에 설정이 가능합니다.
 

###################################

SetEnvIF Referer "http://(.*\.)?amazonaws.com" block

SetEnvIF Referer "http://spam.test.com " block

SetEnvIF Referer "http://aaa.bbb.com" block

<Directory "/">

Options FollowSymLinks

AllowOverride FileInfo

Order allow,deny

Allow from all

deny from env=block

</Directory>

###################################

 

Order 순서에 따라 모든 url을 allow하고 block으로 선언된 Referer URL만 막는 설정이다.

 

1.3 Referer 활용 예제
디렉토리를 제한하는 방법
Ex) Directory “/home/nrson/test/avi“로 설정 된 위치의 동영상 파일들을 설정된 도메인에서 접근 해야만 사용할 수 있도록 하는 설정이다.

 

SetEnvIF Referer "http://localhost" local_test

SetEnvIF Referer "http://nrson.test.com" local_test

SetEnvIF Referer "http://127.0.0.1" local_test

<Directory "/home/nrson/test/avi">

Order deny ,allow

Deny from all

Allow from env=local_test

</Directory>


이미지 파일 확장자로 제한하는 방법이다.
Ex) Files로 설정 된 확장자의 동영상 파일들을 설정된 도메인에서 접근 해야만 사용할 수 있도록 하는 설정이다.

 

SetEnvIF Referer "http://localhost" local_test

SetEnvIF Referer "http://nrson.test.com" local_test

SetEnvIF Referer "http://127.0.0.1" local_test

<Files ~ ".(gif|jpg|png)$">

Order deny ,allow

Deny from all

Allow from env=local_test

</Directory>

 

2. WEBTOB ACCESS 절을 이용한 구현
Client 에서 접속을 시도할 때, IP address 나 network/netmask 들을 기준으로 요청의 허용/제한을 설정하고, 요청 허용/제한이 적용되는 순서를 설정할 수 있다. Access 절은 DIRECTORY/URI/EXT/TCPGW 절에 적용될 수 있으며, 각각에서 정의한 resource 를 허용/제한한다
    2.1 환경 설정 및 설명
    $WEBTOBDIR/config/http.m 파일에 ACCESS 절이 존재하는지 여부를 확인한다.

 

*ACCESS
access1
Order = "allow, deny",
Allow = "all"
access2
Order = "allow, deny",
Allow = "211.1.1.10, 211.1.1.20"
access3
Order = "allow, deny",
Allow = "211.1.1.0/255.255.255.0"
access4
Order = "deny, allow",
Deny = "211.1.1.30"
access5
Order = "allow, deny",
Allow = "all",Deny = "211.1.1.30"
 

 

2.2 옵션 설명 옵션 내용

 

옵션

내용

필수 옵션

ACCESS name = <string>

Access 절의 이름을 임의로 정할 수 있다.

선택 옵션 

Method = <literal>

적용 할 HTTP 메소드를 설정한다.

MethodException = <literal>

제외 할 HTTP 메소드를 설정한다.

Order = <literal>
Default - "Deny,Allow"

Allow, AllowIf, Deny, DenyIf, Method가 적용되는 순서를 설정한다 (하단 표 참조)

Allow = <literal>

요청이 허용되는 IP 주소나 network/netmask들을 설정

Deny = <literal>

요청이 거절되는 IP 주소나 network/netmask들을 설정

Allowif = <literal>
(WEBTOB 4.1.3.0에서
신규 추가 된 옵션)

“<header field name>
<regular expression>” 설정
요청에 포함된 <header field name> 헤더 값이 <regular expression>의 패턴과 match된다.
<regularexpression>은 Perl compatible regular expression을 사용한다.

Denyif = <literal>
(WEBTOB 4.1.3.0에서
신규 추가 된 옵션)

AllowIf와 동일한 방식으로 설정한다


# Order에 따른 처리 순서

 

옵션

내용

Deny, Allow

Method > Deny > DenyIf > Allow > AllowIf 순서로 match한다.

- 요청 메소드가 Method 항목에 포함되지 않을 경우: 요청 허용.
- Deny, DenyIf와 match 하지만 Allow, AllowIf와 match하지 않음: 요청 거절.
- 이 외 모든 경우: 요청 허용.

Allow, Deny

Method>Allow>AllowIf>Deny>DenyIf 순서로 match한다.

- 요청 메소드가 Method 항목에 포함되지 않을 경우: 요청 거절.
- Allow, AllowIf와 match 하지만 Deny, DenyIf와 match하지 않음: 요청 허용.
- 이 외 모든 경우: 요청 거절.


3 Referer 처리 테스트
webtob에서 index.html 파일을 호출하여 다른 uri로 다시 한번 호출하는 방법이다.

3.1 테스트 샘플 코드

 

Webtob 환경 파일 (http.m)
~~~~~~ 생략 ~~~~~~~~~,
*VHOST
referer_t DOCROOT="/pinfra/user/narason/webtob/docs",
            PORT = "8089",
            HOSTNAME = "192.168.15.211",

            SERVICEORDER = "uri,ext",
            Headers = "nocache1,nocache2",
            IndexName = "test.html"
~~~~~~ 생략 ~~~~~~~~~,

 

*URI

uri1 Uri = "/test", Svrtype = JSV, vhostname = "referer_t", svrname = "MyGroup", AccessName = accesslog
uri2 Uri = "/", Svrtype = HTML, vhostname = "referer_t", svrname = "html"

 

~~~~~~ 생략 ~~~~~~~~~,

 

*ACCESS

accesslog
    Order = "allow,deny",
    DenyIf ="Referer
http://192.168.15.211:8089*"

 

*HEADERS

nocache1 action = "AddResponse", FieldName = "Cache-Control", FieldValue = "no-cache,no-store"
nocache2 action = "AddResponse", FieldName = "Pragma", FieldValue = "no-cache"

 

*EXT

htm MimeType = "text/html", SvrType = HTML

  

1. http://192.168.15.211:8089/index.html 호출
(index.html 파일)
<html>
<body>
<script language="javascript">
location.href="/test/index.jsp"
</script>
</body>
</html>

 

        결과 화면 

  

2. webtob index.html 발신 측 header 정보 확인
(Request-Line) GET /index.html HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Encoding gzip, deflate
Accept-Language ko-KR
Connection Keep-Alive
Host 192.168.15.211:8089
If-Modified-Since Tue, 08 Jan 2013 05:59:21 GMT
If-None-Match "0-6f-50ebb5b9"
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP02)

  

3. http://192.168.15.211:8089/index.html 에서 redirect 한 index.jsp 호출 여부 확인
(index.jsp 파일)
<%@ page language="java" session="true" contentType="text/html; charset=euc-kr" %>
<html>
<head><title>서버 테스트 Page</title></head>
<body align="center" bgcolor="#8CA1FF">
<FONT COLOR="#FFFFFF"><B># This page is test.jsp File</B><br><br></FONT>
</body>
</html>


        결과 화면 

             

   Access log를 거치지 않았을 경우의 index.jsp 결과 화면   

 

4. webtob index.html에서 redirect 된 수신 측 header 정보 확인
(Request-Line) GET /test/index.jsp HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Encoding gzip, deflate
Accept-Language ko-KR
Connection Keep-Alive
Cookie org.apache.tapestry.locale=ko; JSESSIONID=P0XbsV9XNnmOjGrRXz4b0Zj6705KQlepjrVnbM7quVrOkmOssWouOZ1Ni932rAZQ.infrasvr_servlet_engine1
Host 192.168.15.211:8089
Referer http://192.168.15.211:8089/index.html
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP02)    


3.2 정규 표현식을 이용한 URL 처리
정규표현식을 이용한 DenyIf 수정
 

*ACCESS
accesslog
Order = "allow,deny",
DenyIf ="Referer
http://.*.168.15.*:8089*"

   

    1차, 2차 ip가 무엇으로 들어오든 2차, 3차 도메인이 168.15일 경우 모두 막는 설정
    첨부한 javaScriptTest.html 파일에서 정규표현식 테스트 하실 수 있습니다.
 

 

Regexp string: Referer http://.*.168.15.*:8089
Subject string: Referer http://192.168.15.211:8089
에 각각 위와 같이 입력 값을 넣고 위에 표기한 빨간색 버튼을 누르시면 하단의 결과 창에 결과 값이 나옵니다.
만약 아래와 같이 나올 경우 해당 정규표현식으로 Subject string:이 도출되지 않습니다.
Regexp string: Referer http://*.168.15.*:8089
Subject string: Referer http://192.168.15.211:8089
 

 

< 참고 자료 >
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=57388 사이트 참고

728x90
반응형