우리 2번째 집.
by 라임
아파치 외부 링크 금지

오늘은 무단링크를 방지하는 스크립트를 설치했다.

무단링크라... 무단링크는 이런 것이다. 퍼스널디비에서 계정을 받았다. 거기에 파일을 올리고는 그 파일을 다른 게시판에서 다음과 같이 올린다.
<a href="http://fileserver1.personaldb.net/****">파일링크</a>

이렇게 하면 다른 사람들이 이 파일을 가져갈 수 있게 된다.

하지만 이러면 퍼스널디비는 단지 자신의 서버와 네트워크를 빌려줄 뿐 아무런 이득을 얻지 못한다. 심지어 그 파일을 받아가는 사람도 이 파일이 어디에서 왔는지 알지 못한다. 그래서 시스템관리자는 무단 링크를 방지하기 위하여 여러가지 방법을 사용하게 된다.

제일 좋은 방법은 이런식의 파일접근을 원천적으로 막는 것이다. http://~~ 이런 방식으로 아예 파일에 접근할 수 없도록 웹서버에 파일을 올려놓지 않으면 된다. 필요하면 내부에서 파일을 읽어서 다시 외부로 뿌려주는 방식을 취하는 것이다. 많은 수의 다운로드 자료실들이 이러한 형태를 취한다. 제일 좋다.

하지만 홈페이지 서비스를 하는 경우에는 이것이 좀 어렵다. 기술적으로도 좀 어렵지만 가장 큰 문제는 사용자가 엄청 불편해지고, 시스템이 많은 자원을 소비한다.

그래서 차선책이 바로 Referer를 사용한 무단링크 방지책이다.

가장 많이 사용되는 아파치 웹서버의 경우 Referer를 사용한 무단링크방지법을 제공한다.
간단하게 다음과 같은 내용을 httpd.conf 파일에 추가하면 된다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</Directory>

설명은 다음과 같다.
<Directory "/home/dduma"> : 여기 쓰인 디렉토리에 대해서는
AllowOverride None : htacess.conf 파일을 사용하지 않는다.
SetEnvIf Referer abc.com in HTTP_REFER : HTTP_REFER 라는 변수에 넣는다.
Order deny,allow : 먼저 거부조건을 나중에 허용조건을 설정한다.
Deny from all : 모두 거부한다.
Allow from env=HTTP_REFER : HTTP_REFER 변수에 있는 것만 허용한다.

이러면 abc.com 만 빼고는 다 무단링크는 허용되지 않는다.


하지만 이렇게 하면 문제가 생긴다.
먼저 abc.com에서 링크된 것은
<img src=http://abc.com/test.gif>와 같이 그림을 링크하면 나타나지만
<a href=http://abc.com/test.exe>다운받아라</a> 와 같이 다운받을 수 있게 하면 모두 허용이 거부된다.

이것을 방지하기 위하여 다음을 넣자.
SetEnvIf Referer ^$ in HTTP_REFER
그러면 다운도 되고 다 잘 된다.


그럼 끝인가?
아니다. 이러면 아직 두가지 문제점이 남는다.

첫번째 문제는 다운받을 수 있도록 무단링크를 걸었을 때 마우스 왼쪽버튼으로 클릭하면 허용거부라는 메세지가 나오지만 마우스 오른쪽 버튼을 클릭하여 다운받기를 누르면 다운이 허용된다.
이것은 열심히 궁리한 결과 절대 막을 수 없다는 결론이 나왔다. 이것을 막으면 위에 언급한 것처럼 정상적으로 링크하고 다운받는 것도 금지되기 때문이다.

두번째 문제는 만일 검색엔진 같은 곳에 링크가 되어 있으면 역시 허용이 거부된다. (왜? 무단링크니까...)
하지만 우리는 검색엔진에 링크거는 것은 허용하고 싶다. (이걸 허용하지 않는 바보가 어딨냐?)
그래서 위의 것들을 다음과 같이 고쳤다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
SetEnvIf Referer ^$ in HTTP_REFER
<FilesMatch ".(avi|mge?g|exe|jpe?g|mp3|gif|png|zip|asx|asf|wmv|wma|bmp)$">
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</FilesMatch>
</Directory>

즉 중간에 FilesMatch 어쩌고 하는 지시자가 들어갔다.
이것은 쓰여진 확장자만을 무단링크 방지 파일대상으로 삼는다. 그러니까 .htm 파일같은 것은 무단으로 링크가 걸려도 좋다는 뜻이다.
이렇게 하면 검색엔진에 등록되어도 허용이 거부되지 않는다.

이상 무단링크 방지하기 방법을 알아보았다. 하지만 역시 완전하지는 않네... 몇가지 허점이 눈에 띈다. 이것을 알면 사람들이 악용할 소지가 전혀 없는 것은 아니다. 하지만 이 정도로도 무단링크의 90%정도는 없어진다.

시스템 관리자들은 모두 한번씩 해보시기를...


by 라임 | 2006/02/13 16:05 | NetWork | 트랙백 | 덧글(6)
트랙백 주소 : http://laim.egloos.com/tb/2198389
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 랜덤여신 at 2007/09/25 16:17
좋은 글 고맙습니다. 인터넷에 널린 무수한 펌질과는 달리 독립적인 방법이군요.
Commented by 아이 at 2009/11/29 19:35
감사합니다.

많은 도움이 되었습니다.
Commented by hodol at 2011/06/03 10:02
감사합니다. 잘 읽고 갑니다.
Commented by ㅇㅇ at 2011/11/13 20:22
왠만하면 댓글 안남기지만, 정말로 좋은 게시글이라고 생각해서 이렇게 댓글 남깁니다.
정말 감사합니다.
Commented by 까치 at 2012/03/22 18:16
고맙습니다. 좋은정보 얻어갑니다.
Commented by kalcapt at 2012/04/17 21:50
이햐! 너무 감사합니다!!^^
동영상 강좌를 100%까진 아니더라도 다운받지 못하고 특정 사이트에서만 플레이가 가능하게 설정할 일이 있었는데..
덕분에 깨끗이 해결했습니다!
감삼다~^^

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >


카테고리
이전블로그
이글루링크
최근 등록된 덧글
이햐! 너무 감사합니다!!..
by kalcapt at 04/17
고맙습니다. 좋은정보 ..
by 까치 at 03/22
왠만하면 댓글 안남기지..
by ㅇㅇ at 11/13
감사합니다. 잘 읽고 갑..
by hodol at 06/03
You're Great !!!
by phper at 04/27
메모장
Candle


라이프로그
rss

skin by 소로진