developer tip

직접 URL 액세스에서 파일을 방지하는 방법은 무엇입니까?

copycodes 2020. 11. 30. 17:56
반응형

직접 URL 액세스에서 파일을 방지하는 방법은 무엇입니까?


Apache를 사용하고 있으며 로컬 호스트 에 다음과 같은 샘플 웹 폴더가 있습니다 .

      http://localhost/test/

test폴더의 파일 :

     index.html  
     sample.jpg  
     .htaccess  

샘플 소스 index.html:

<html>
  <body>
    <img src="sample.jpg" />
  </body>
</html>

에서 웹 사이트를 실행 http://localhost/test/하면 페이지에`sample.jpg '이미지가 표시됩니다.


문제:

  • http://localhost/test/sample.jpgURL 표시 줄에 이미지가 직접 표시되지 않도록하고 싶습니다 .

참고 : 아래 솔루션은 Firefox를 제외한 모든 브라우저에서 테스트했을 때 작동하는 것으로 나타났습니다 .


다음을 시도하십시오.

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

이미지에 직접 액세스하지만 사이트에 표시 할 수있는 경우 403을 반환합니다.

참고 : 이미지가있는 일부 페이지를 연 다음 해당 이미지의 경로를 주소 표시 줄에 복사하면 해당 이미지를 볼 수 있습니다. 이는 브라우저의 캐시 때문일 수 있습니다. 실제로 이미지가 서버에서로드되지 않았기 때문입니다 ( Davo에서, 아래 전체 댓글) .


rosipov의 규칙은 훌륭하게 작동합니다!

나는 라이브 사이트에서 공백 또는 특수 메시지를 표시하기 위해 사용합니다.;) 파일에 대한 직접 액세스 시도 대신 직접보기로부터 약간을 보호하고 싶습니다. 403 Forbidden보다 더 재미 있다고 생각합니다.

따라서 rosipov의 규칙을 사용 하여 {gif, jpg, js, txt} 파일에 대한 직접 요청을 'messageforcurious' 로 리디렉션합니다 .

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

보안을 염두에두고 xml, javascript ...와 같은 CMS 파일에 대한 직접적인 액세스를 허용하지 않는 정중 한 방법이라고 생각합니다. 요즘 웹을 스크롤링하는이 모든 봇에게 그들의 알고리즘이 내 '에서 무엇을 만들지 궁금합니다. messageforcurious '.


우선, 메인 아파치의 설정 파일 httpd.conf가있는 곳을 찾으십시오. Debian을 사용하는 경우 여기에 있어야합니다 /etc/apache/httpd.conf.. Vim 또는 Nano와 같은 일부 파일 편집기를 사용하여이 파일을 열고 다음과 같은 줄을 찾습니다.

Options Includes Indexes FollowSymLinks MultiViews

그런 다음 단어 색인을 제거하고 파일을 저장하십시오. 줄은 다음과 같아야합니다.

Options Includes FollowSymLinks MultiViews

완료되면 apache를 다시 시작합니다 (예 : Debian에서 /etc/init.d/apache 다시 시작). 그게 다야!


귀하의 의견에 따라 다음과 같은 것이 필요합니다.

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

내 localhost에서 테스트했으며 제대로 작동하는 것 같습니다.


내 웹 서버에서 사용할 때 다음과 같이 로컬 호스트의 이름 만 바꿀 수 있습니다.

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

참고 URL : https://stackoverflow.com/questions/10236717/how-to-prevent-a-file-from-direct-url-access

반응형