>  기사  >  백엔드 개발  >  핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)

핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)

不言
不言앞으로
2019-01-26 10:26:283808검색

이 기사에서는 핫링크가 무엇인지 설명합니다. 리칭 방지 리소스(예제 포함)를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법에는 특정 참조 값이 있으며 필요한 친구가 참조할 수 있습니다. 이 내용이 도움이 되기를 바랍니다.

일부 제품은 폐쇄 생태계 음악 웹사이트, 비디오 웹사이트 등 도난당한 링크를 통해 제품에 액세스하는 것을 방지하기 위해 안티-리칭 조치를 채택합니다. 그들은 이미 저작권 비용을 지불했으며 당연히 귀하가 사용하는 것을 원하지 않습니다. 그들의 자원은 무료입니다. 하지만 많은 사람들이 핫링크를 전문으로 하기 때문에 핫링크, 안티 핫링크, 안티 핫링크 회피의 원리도 이해해야 합니다.

Hotlinks

바이두 백과사전의 핫링크 정의 인용:

핫링크는 서비스 제공자가 자체적으로 서비스를 제공하지 않고 다른 유익한 최종 사용자 인터페이스(예: 광고)를 우회하기 위해 기술적 수단을 사용하는 콘텐츠를 말합니다. 최종 사용자의 브라우징 및 클릭률을 속이기 위해 다른 서비스 제공업체를 자신의 웹사이트의 최종 사용자에게 직접 제공합니다. 수혜자는 자원을 전혀 또는 거의 제공하지 않는 반면, 실제 서비스 제공자는 아무런 혜택도 받지 못합니다.

일반 핫링크

우리는 웹사이트가 서버에서 html 파일을 요청하여 서비스를 제공한다는 것을 알고 있습니다. 이 파일에는 html 파일이 로드될 때 이러한 정적 리소스가 로드됩니다. , 차례로 요청을 시작하고 지정된 위치를 채우면 전체 페이지 로드가 완료됩니다.

핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)

이 이미지의 URL을 가져와 자체 HTML 파일에 포함하면 웹사이트에서 해당 리소스에 액세스할 수 있습니다. 리소스는 다양한 HTTP 요청을 통해 독립적으로 액세스되므로 원본을 필터링할 수도 있습니다. site.html 파일입니다. 이것은 가장 간단한 핫링크입니다.

위험: 사용자가 방문하면 도난당한 링크 웹 사이트에 액세스하지 않지만 여전히 웹 사이트의 대역폭 리소스를 점유하고 운영자가 대역폭 비용을 지불해야 합니다. 동시에 사용자는 웹사이트의 광고, 주변 장치, 홍보 및 기타 리소스에 액세스할 수 없습니다.

분산 핫링크

분산 핫링크는 더 복잡하며 서버에 배포하려면 특수 프로그램이 필요합니다. 이는 단일 웹 사이트나 단일 URL을 대상으로 하지 않지만 전체 네트워크에서 모든 유용한 리소스를 훔치고 해당 위치에 저장됩니다. 사용자가 실제로 데이터베이스에 액세스하면 자체 트래픽으로 완전히 변환됩니다.

위험: 노동, 돈, 저작권 지불을 통해 얻은 자원은 온라인 상점 사진, 정기 간행물, TV 시리즈 등 도난당한 링크를 통해 무료로 사용할 수 있습니다. 결과적으로 그들의 회원과 서비스는 수익을 낼 수 없습니다.

핫링크 방지 분류

원본 사이트에 대한 핫링크의 위험성을 이해한 후에는 자연스럽게 이러한 동작을 방지하고 우리의 이익을 보호하기 위한 몇 가지 수단을 사용해야 합니다.

워터마크 추가

이것은 백엔드 프로그램을 사용하여 사진 및 기타 리소스에 워터마크를 일괄적으로 추가하는 방법입니다. 이러한 방식으로 핫링크를 수행하는 동안 자신의 웹사이트를 홍보할 수도 있습니다. 핫링크를 적극적으로 찾아보세요.

리소스 이름 변경

핫링크는 지정된 URL을 통해 이루어지기 때문에 이 URL에는 리소스의 경로와 이름이 포함되어야 합니다. 따라서 파일이나 디렉터리의 이름을 수시로 변경하면 핫링크를 빠르게 피할 수 있으며, 하지만 다운로드 중인 리소스가 중단될 수도 있습니다.

참조 페이지 제한

http 요청의 헤더 정보에는 요청이 시작되는 페이지를 나타내는 Referer 필드가 있습니다. 해당 페이지가 별도의 페이지에서 열리거나 서버에서 요청되는 경우 이 필드는 비어 있습니다. 따라서 리퍼러 필드의 값을 통해 제한을 설정할 수 있습니다. 그렇지 않으면 요청이 금지됩니다. 하지만 URL 매칭을 위해서는 화이트리스트 파일을 매번 열어야 하기 때문에 성능이 저하됩니다.

암호화 인증

클라이언트는 사용자 인증 정보와 리소스 이름을 결합하여 정보를 암호화하고, 암호화된 문자열을 URL의 매개변수로 사용하여 요청을 시작하고, 서버에서 이를 복호화하여 전달합니다. 인증. 요청된 리소스를 반환합니다. 이 방법은 주로 분산된 핫링크를 방지하기 위해 사용됩니다.

Anti-hotlinking 프로그램

위의 세 가지 Anti-Hotlinking 방법 중 우리는 일반적으로 세 번째 방법을 사용하는데, 이는 Referer 속성을 사용하여 Anti-Hotlinking을 완료하는 것입니다. 오늘은 Anti Hotlinking과 이에 대한 방지 방법을 주로 공유하겠습니다. 방법.

백엔드 프로그램 제한

이런 종류의 제한은 서버 측 컴퓨팅 리소스를 소비하므로 Nginx 제한만큼 일반적으로 사용되지 않습니다.

$from = parse_url($_SERVER['HTTP_REFERER']);
if ($from['host']!='xxx.com' && $from['host']!='www.xxx.com') {
    die('你丫在盗链');
}

Nginx 제한 사항

nginx 구성 파일을 수정하여 이 작업을 수행할 수 있습니다. 수정이 완료된 후 nginx를 다시 시작해야 합니다.

// 这里指定需要防盗链的资源,如gif/jpg等
location ~* \.(gif|jpg|png|jpeg)$ {
    // 设置资源的过期时间
    expires 30d;
    // 设置合法的引用页,也就是防盗链的白名单;
    // none blocked保证用户在新页面打开时依然能够打开,如果不希望用户能够保存删掉这两项
    valid_referers none blocked *.hugao8.com *.baidu.com *.google.com;
    // 对于非法的引用页,可以重写图片,也可以直接返回403或404页面
    if ($invalid_referer) {
        rewrite ^/http://www.it300.com/static/images/404.jpg;
        #return 404;
    }
}

Referer-Policy

Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 首部识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

Referer属性出现在请求头中,也在请求头中被设置,但是在浏览器的安全策略里,该值无法被js所指定:

$.ajax({
        url: 'http://www.baidu.com',
        beforeSend(xhr) {
            // 在发送ajax请求前设置header头部
            xhr.setRequestHeader("Referer", "http://translate.google.com/");
            xhr.setRequestHeader("User-Agent", "stagefright/1.2 (Linux;Android 5.0)");
        },
        success(data) {
            console.log(data);
        },
        error(err) {
            console.log(err);
        }
});

然而浏览器会报错:

핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)

<meta>
<a>
</a><a></a>

防反盗链

前端JS不能在头部设置Referer字段,和跨域一样是因为浏览器的安全策略,那么同样的在服务端进行请求就不会有这些限制,我们在服务端请求时就可以自由的修改Referer字段。

我们通过简单的PHP例子来完成这个功能:

<?php $url = &#39;http://t11.baidu.com/it/u=3008889497,862090385&fm=77&#39;;
$refer = &#39;https://www.baidu.com&#39;;
$ch = curl_init();
//以url的形式 进行请求
curl_setopt($ch, CURLOPT_URL, $url);
//以文件流的形式 进行返回  不直接输出到浏览器
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//浏览器发起请求 超时设置
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
//伪造来源地址 
curl_setopt ($ch, CURLOPT_REFERER, $refer);
$file = curl_exec($ch);
curl_close($ch);
header(&#39;Content-Type: text/html&#39;);
// 对图片进行base64编码,然后返回给前端展示
$file = base64_encode($file);
echo "<img  src=&#39;data:image/jpeg;base64,{$file}&#39; / alt="핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)" >";
?>

我们第一次请求注释了伪造来源地址这一行,第二次请求不注释这一行,这样可以验证执行结果:
핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)

핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)

总结

盗链和反盗链是一个对立面,技术不断升级,最终的目标也是为了开放资源和保护知识产权。在互联网生态里,我们通过反盗链保护我们的利益,也使用防反盗链的这种方式来扩大我们的内容,无论站在哪一方,都需要做到知己知彼。

위 내용은 핫링크란 무엇입니까? 리칭 방지 리소스를 요청하기 위해 PHP에서 리퍼러를 위조하는 방법(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
이전 기사:cakephp가 뭐예요?다음 기사:cakephp가 뭐예요?