1. 什么是referer?
referer是HTTP协议的一个头部字段,在HTTP请求头中指明了请求来源,即访问该页面的前一个页面的URL地址。
通过referer我们可以获取用户跳转到当前页面所在的URL,从而判断是否允许用户访问当前页面。
//获取referer的值
$referer = $_SERVER['HTTP_REFERER'];
2. 防止非法访问
2.1 什么是非法访问
非法访问是指未经允许或者不合理的方式来访问一个页面,例如跨站点攻击、爬虫爬取等。
2.2 防止非法访问的方法
为了防止非法访问,我们可以通过判断当前访问的页面的referer信息是否合法来进行验证。
//判断referer是否为空
if(!empty($_SERVER['HTTP_REFERER'])){
//获取当前访问页面的domain(域名)
$current_host = parse_url($_SERVER['HTTP_REFERER'])['host'];
//获取当前页面的domain
$target_host = $_SERVER['SERVER_NAME'];
//判断当前访问的页面是否为本站页面
if($current_host != $target_host){
//禁止非法访问,返回错误信息
echo "非法访问!";
exit;
}
}
2.3 REFERER信息伪造攻击的防范
REFERER信息是由客户端浏览器发送到服务器的,是可以被伪造的。如果不加以防范,就可能造成安全漏洞。对于此类攻击,我们可以采用如下方法进行预防:
使用SSL:采用SSL加密,可以有效预防Referer信息被截获和篡改。
Referer check:在业务层面上对Referer信息进行校验和检查。