[apache] 외부링크 금지

Linux RSS Icon ATOM Icon 2011/05/26 14:50 visualp

[원문] - http://www.21-japan.com/?document_srl=26832

아파치외부링크금지 

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

무단링크라... 무단링크는 이런 것이다. 퍼스널디비에서 계정을 받았다. 거기에 파일을 올리고는 그 파일을 다른 게시판에서 다음과 같이 올린다.
<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%정도는 없어진다.

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

2011/05/26 14:50 2011/05/26 14:50
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.visualp.com/rss/response/382

댓글+트랙백 ATOM :: http://blog.visualp.com/atom/response/382

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다

트랙백 RSS :: http://blog.visualp.com/rss/trackback/382

트랙백 ATOM :: http://blog.visualp.com/atom/trackback/382