php学习之路-http协议,防盗链
最近在学习php,今天主要是学习了有关http协议的相关知识,http协议是超文本传输协议(HTTP-Hypertext transfer protocol),底层是基于TCP/IP的,可以在网络中传输数据,图片,视频等。通过httpwatch这个软件,可以查看到所有的页面请求的信息,数据是由请求页面产生,因为我使用的是Apache,所以产生的数据会经过Apache的二次封装,会新增一些数据,在被请求的页面中可以通过$_SERVER这个数组获取到请求的信息。比较常用的有:REMOTE_ADDR(请求的ip),SERVER_PORT(端口号)等等。
然后我又进一步了解了http的两种不同请求的区别:POST和GET,区别主要有三点:
1.通过GET请求的数据会出现在http的地址中,而POST则是出现在请求的内容中。
2.GET请求发送的数据有大小限制为2083k,POST没有限制,因此传输的数据较大时,应该采用POST请求。
3.将页面保存设为收藏夹时,POST可以保存有参数的链接,而GET不能保存。
通过php中的HTTP_REFERER属性可以防盗链的效果,实现步骤如下:
1.新建一个a.html文件,保存到桌面,内容如下:
<a href="http://localhost/http/info.php">查看信息</a>
2.在apache中的htdocs文件夹中新建一个http文件夹,并创建一个info.php,将a.html复制过来,info.php内容如下:
<?php
//判断HTTP_REFERER是否存在
if(isset($_SERVER['HTTP_REFERER'])){
//判断请求的来源是否是当前的项目
if(strpos($_SERVER['HTTP_REFERER'], "http://localhost/http")==0){
echo $_SERVER['HTTP_REFERER'];
echo "这是我的信息";
}
}else{
//访问拒绝,跳转到失败页面
header("Location:error.html");
}
?>
代码解释:首先通过isset()方法判断HTTP_REFERER是否存在,若存在,判断是否是以"http://localhost/http"开头,若返回为true,则访问正确,输出“这是我的信息”。
若返回false,则跳转到失败的页面。
3.新建一个error.html页面,提示“访问被拒绝”。
小结:虽然使用这种方法可以简单的实现防盗链,但是可以防止就可以进行破解,如果对http的信息进行重写,那么就可以实现伪造一个HTTP_REFERER属性,从而达到
破解防盗链的网站,附上一段简单的实现方法,还在更深入的研究中。这是本人第一次写博客,希望大家多多指导,~~。
<?php
function getRemoteFile($url, $refer = '') {
$option = array(
'http' => array(
'header' => "Referer:$refer")
);
$context = stream_context_create($option);
return file_get_contents($url, false, $context);
}
echo getRemoteFile("http://localhost/http/info.php");
?>