얕고넓은지식/Computer knowledge

아파치 외부 링크 금지 .htaccess 설정하기

쪽마 2016. 9. 21. 15:18

.htaccess는 많은 기능이있겠지만..

그중에서도 내가 사용하는 기능은

무단링크를 방지하는 기능이다.




어떤때 사용하면 좋으냐..하면..

예를들어 내가 운영하는 서버에 누군가 파일을 올려뒀다

그리고 다른곳에서 그 파일을 링크만 걸어서

다운로드받는다면..

나의 서버엔 부하가 걸려서 트래픽만 늘어날뿐이지..

전혀 도움이 되지않는다..

해서 이런걸 외부유출을 막기위해


.htacces


를 잘 설정해서 사용하게된다.


가장 좋은 방법은 이런식의 파일접근을 원천적으로 막는 것이다. 

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 test.com in HTTP_REFER       : HTTP_REFER 라는 변수에 넣는다.

Order deny,allow                                     : 먼저 거부조건을 나중에 허용조건을 설정한다.

Deny from all                                         : 모두 거부한다.

Allow from env=HTTP_REFER                     : HTTP_REFER 변수에 있는 것만 허용한다.



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






하지만 이렇게 하면 문제가 발생된다

먼저 test.com에서 링크된 것은 

<img src=http://test.com/test.gif>와 같이 그림을 링크하면 나타나지만

<a href=http://test.com/test.exe>다운받아라</a> 와 같이 다운받을 수 있게 하면 모두 허용이 거부된다.



이것을 방지하기 위하여 다음을 넣으면된다.


SetEnvIf Referer ^$ in HTTP_REFER


그러면 다운도 되고 다 잘 된다.






그럼 끝?

No!


이러면 아직 두가지 문제점이 남는다.


첫번째 문제는 다운받을 수 있도록 무단링크를 걸었을 때 

마우스 왼쪽버튼으로 클릭하면 허용거부라는 메세지가 나오지만 

마우스 오른쪽 버튼을 클릭하여 다운받기를 누르면 다운이 허용된다.

이것은 열심히 궁리한 결과 절대 막을 수 없다. 

이것을 막으면 위에 언급한 것처럼 정상적으로 링크하고 다운받는 것도 금지된다.


두번째 문제는 만일 검색엔진 같은 곳에 링크가 되어 있으면 역시 허용이 거부된다. (왜? 무단링크니까...) 

하지만 우리는 검색엔진에 링크거는 것은 허용하고 싶다. (이걸 허용하지 않는 바보가 어딨냐?)

그래서 위의 것들을 다음과 같이 고치면된다.




<Directory "/home/www">

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 어쩌고 하는 지시자가 들어갔다.

이것은 쓰여진 확장자만을 무단링크 방지 파일대상으로 삼는다. 

그러니까 .html 파일같은 것은 무단으로 링크가 걸려도 좋다는 뜻이다. 

이렇게 하면 검색엔진에 등록되어도 허용이 거부되지 않는다.






자....개인서버운영자들은 처음에 언급했듯이..

httpd.conf 에 위내용을 넣으면된다.

하지만 서버를 임대해서 사용하는 사람들은



.htaccess 에 위내용을 적으면 동일한 효과를 볼수있다

반응형