아파치 다운로드:다운로드하기 전에 해당 페이지를 확인했는지 확인하세요.

StackOverflow https://stackoverflow.com/questions/54669

문제

현재 진행 중인 작업:

내 웹사이트 사용자가 다운로드를 시작하기 전에 페이지를 볼 수 있는지 확인하고 싶습니다.페이지를 보지 않고 파일에 직접 핫링크를 시도하는 경우 다운로드가 허용되기 전에 웹페이지로 이동해야 합니다.

쿠키를 보내고 다운로드가 시작되기 전에 (.htaccess를 통해) 쿠키가 있는지 확인하는 것보다 더 나은 제안이 있습니까?

웹페이지와 다운로드 파일은 서로 다른 서버에 위치합니다.

환경:

  • 모든 머신의 Apache 2
  • 모든 컴퓨터에서 PHP 5
  • "웹페이지" 서버에서 사용 가능한 MySQL 5(다운로드 서버에서는 액세스할 수 없음)

Nathan은 제가 해결하려고 하는 문제가 무엇인지 물었고, 사실 그것은 예를 들어 포럼에서 핫링크를 방지하고 싶다는 것입니다.사람들이 대역폭을 사용하여 우리 서버에서 다운로드하는 경우 다운로드가 시작되기 전에 광고가 포함된 페이지를 보여주고 싶습니다.완전히 안전할 필요는 없지만 서버 비용을 조달하려면 돈을 벌어야 합니다. 그렇죠?:)

도움이 되었습니까?

해결책 6

나는 사용할 것이다 mod_auth_token 사용자에게 "최근 링크"가 있는지 확인합니다.

mod_auth_token을 사용하면 만료되는 링크를 만들 수 있습니다.누군가가 기존 링크를 가져와 다른 웹사이트에 게시하기로 결정하면 이 링크는 지정된 시간이 지나면 만료됩니다.그러면 사용자를 잡아 내가 원하는 HTML 페이지로 리디렉션할 수 있는 403 FORBIDDEN이 발생합니다.

다른 팁

파일에 대한 핫링크를 허용하는 대신 웹에서 액세스할 수 있는 경로 외부에 파일을 저장하세요.대신 다운로드를 시작하는 PHP 스크립트로 다운로드 요청을 보내세요.요청한 페이지가 읽고 싶은 페이지인지 확인하기 위해 검사를 수행할 수 있습니다.

Apache mod_rewrite RewriteRule이 이를 수행할 수 있습니다.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.example.com/page.html$
RewriteRule file.exe http://www.example.com/page.html [R=301,L]

기본적으로 요청을 하면 file.exe 함께 오지 않았다 page.html 리퍼러로서 301 사용자를 다음으로 리디렉션합니다. page.html.

당신은 사용할 수 있습니다 분산 서버 측 쿠키 대신 세션을 사용하지만 그만한 가치보다 더 많은 문제가 있을 수 있습니다.

당신은 또한 접근을 금지하다 리퍼러가 없거나 잘못된 리퍼러가 있는 요청.하지만 그것은 쿠키보다 훨씬 더 가짜입니다.

그것은 당신이 얼마나 관심을 가지고 있는지에 달려 있습니다.

여기서 해결책은 해결하려는 문제에 따라 다릅니다.포럼 등에 직접 링크가 게시되지 않는지 확인하려는 경우 .htaccess로 참조 페이지를 확인하는 것만으로도 충분합니다.물론 리퍼러는 쉽게 위조될 수 있으므로 누군가 그렇게 할 위험이 문제라면 다른 조치를 취해야 합니다.

좀 더 안전한 기능이 필요한 경우 쿠키를 사용하면 됩니다.파일 서버와 웹 서버가 다른 상자에 있기 때문에 PHP 세션을 사용할 수 없습니다.하지만 시간의 해시와 일부 비밀 값을 기반으로 쿠키를 만들 수 있습니다.

cookievalue = sha1('secretvalue'.date('z-H'));

사용자가 실제 파일을 요청하면 파일 서버는 이 쿠키를 다시 생성하고 사용자와 일치하는지 확인합니다.즉, 사용자가 쿠키를 위조하더라도 한 시간 후에는 유효하지 않으므로 누가 신경쓰고 비밀 값을 모르기 때문에 자신의 새 쿠키를 생성할 수 없습니다.

.htaccess 추천 트릭을 제안하려고 했지만 그다지 안전한 방법은 아닙니다.사용자 정의 http 참조를 추가하여 PHP 스크립트를 만드는 것은 쉽습니다.거기에 다운로드 페이지를 입력하면 해당 페이지에서 온 것으로 간주됩니다.

이것이 관련 문제입니까?다운로드 페이지의 맥락에 대해 알려주실 수 있나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top