下面是详细讲解PHP简单防盗链实现方法的攻略:
什么是防盗链
防盗链是指在网站运营过程中,因为其他站点未经允许地使用了网站的图片、视频、音频等内容或者链接,直接调用了相关资源而占用了网站服务器带宽和资源,导致网站性能下降或者出现其他问题。为了解决这一问题,网站可以通过一定技术手段,对盗链行为进行识别并拒绝服务。
PHP简单防盗链实现方法
第一步:获取请求头referer信息
referer是一个HTTP头部字段,指示了产生了该请求的源URI。可以通过PHP中的$_SERVER['HTTP_REFERER']
获取该信息。
示例代码:
$referer = $_SERVER['HTTP_REFERER'];
第二步:判断referer信息是否符合规则
针对盗链情况,可以设定一定规则,比如只允许某些站点调用资源,或者在某些情况下允许所有站点调用。通过判断referer是否符合规则,来确认是否允许访问。
示例代码:
// 允许所有来源站点
$allow = array();
if (empty($referer)) {
// 没有referer,判定为不合法
die('不合法请求');
}
$parse_url = parse_url($referer);
if (!isset($parse_url['host'])) {
// 解析不出host,判定为不合法
die('不合法请求');
}
$host = $parse_url['host'];
if (!in_array($host, $allow)) {
// 不在允许的站点列表中,判定为不合法
die('不合法请求');
}
第三步:返回资源
如果通过判断,referer信息符合规则,就可以返回相应资源了。将资源输出到浏览器即可。
示例代码:
// 输出图片
header("Content-type: image/jpeg");
readfile('/path/to/image.jpg');
// 输出视频
header("Content-Type: video/mp4");
readfile('/path/to/video.mp4');
示例说明
示例一:只允许特定站点调用图片资源
假设网站仅允许https://example.com站点调用图片资源。则可以将$allow的值设置为['example.com']。
$allow = array('example.com');
$referer = $_SERVER['HTTP_REFERER'];
if (empty($referer)) {
// 没有referer,判定为不合法
die('不合法请求');
}
$parse_url = parse_url($referer);
if (!isset($parse_url['host'])) {
// 解析不出host,判定为不合法
die('不合法请求');
}
$host = $parse_url['host'];
if (!in_array($host, $allow)) {
// 不在允许的站点列表中,判定为不合法
die('不合法请求');
}
// 输出图片
header("Content-type: image/jpeg");
readfile('/path/to/image.jpg');
示例二:允许所有站点调用视频资源
假设网站允许所有站点调用视频资源。则可以将$allow的值设置为空数组。
$allow = array();
$referer = $_SERVER['HTTP_REFERER'];
if (empty($referer)) {
// 没有referer,判定为不合法
die('不合法请求');
}
$parse_url = parse_url($referer);
if (!isset($parse_url['host'])) {
// 解析不出host,判定为不合法
die('不合法请求');
}
$host = $parse_url['host'];
if (!in_array($host, $allow)) {
// 不在允许的站点列表中,判定为不合法
die('不合法请求');
}
// 输出视频
header("Content-Type: video/mp4");
readfile('/path/to/video.mp4');
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php简单防盗链实现方法 - Python技术站