php判断来源网址地址并且限制非法来源(代码收集整理)
php判断来源网址地址并且限制非法来源(代码例子)
$fromHost = array(
'httple.net',
'localhost',
'127.0.0.1'
);
$s = 'http://www.httple.net/chong/abc.shtml';
$urlArr = parse_url($s);
$host = isset($urlArr['host'])?$urlArr['host']:'';
$host = strtolower(str_ireplace('www.','',$host));
echo $host.'-->';
echo in_array($host,$fromHost)?'允许通过':'非法来源';
PHP设置页面限制ip和来源访问的方法(代码例子)
<?php
$client_ip = getip();
$referer = getreferer();
$allow_ip = '192.168.0.100';
$allow_referer = 'http://www.xxx.cn';
if($client_ip==$allow_ip && strpos($referer, $allow_referer)===0){
echo 'allow access';
}else{
echo 'deny access';
}
// 获取访问者ip
function getip(){
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
$cip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$cip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(!empty($_SERVER['REMOTE_ADDR'])){
$cip = $_SERVER['REMOTE_ADDR'];
}else{
$cip = '';
}
return $cip;
}
// 获取访问者来源
function getreferer(){
if(isset($_SERVER['HTTP_REFERER'])){
return $_SERVER['HTTP_REFERER'];
}
return '';
}
?>
php禁止浏览器直接访问
<?php
$fromurl="index.html"; //跳转往这个地址。
if( $_SERVER['HTTP_REFERER'] == "" )
{
header("Location:".$fromurl);
exit;
}
?>
php禁止直接从浏览器输入地址访问.php文件的方法
比如说http://www.httple.net/xx.php 这个文件我不想让别人直接从浏览器输入地址访问。
但是如果从任何网站连接http://www.httple.net/xx.php过来不可以访问的话,本机建立连接也无法访问跳转到另外的地址。
1.在xx.php文件头部写上以下代码就可以了
复制代码 代码如下:
$fromurl="http://www.httple.net/"; //跳转往这个地址。
if( $_SERVER['HTTP_REFERER'] == "" )
{
header("Location:".$fromurl); exit;
}
这样只需要简单伪造来源就可以了,对此我们还可以进行如下操作:
2. 在程序中定义一个标识变量
复制代码 代码如下:
define('IN_SYS', TRUE);
- 在config.php中获取这变量
复制代码 代码如下:
if(!defined('IN_SYS')) {
exit('禁止访问');
}
如何防止用户从地址栏直接访问后台页面
使用 $_SERVER[‘HTTP_REFERER’] 将很容易得到链接到当前页面的前一页面的地址。一个例子如下:
index.php(实际地址为:http://www.httple.net/php/index.php):
<a href="test.php">链接</a>
test.php(实际地址为:http://www.httple.net/php/test.php):
echo $_SERVER['HTTP_REFERER'];
在浏览器访问 index.php,点击链接到 test.php,得到的输出结果为:
http://www.httple.net/php/index.php
session_start();
$v_url=$_SERVER['HTTP_REFERER'];
if($v_url != "xxxxxx/admin.php")) {
session_destroy();
header("Location: xxxxxx/admin.php"); //refer back to login page
}
PHP页面禁止直接访问,只允许指定来路域名访问
一般基于这样要求的用户都是希望某个页面不希望别人文章到,或者不喜欢别人直接打开某个php页面,或者这个php是执行程序,直接访问会出错,为了解决这个问题,我们就需要禁止别人直接访问该页面,而只能从自己指定的网址中访问。比如说表单处理程序页面,只能通过form表单页面提交数据之后跳转到这个页面,如果未提交表单直接访问该页面将会自动转向表单页面。实现方式只要在禁止直接访问的php页面头部加一段以下代码即可:
<?
$fromurl="http://域名/upload.php"; //定义一个来路网址
if( $_SERVER['HTTP_REFERER'] != $fromurl )//如果来路网址不是这个
{
header("Location:".$fromurl);//执行跳转到这个网址
exit;//结束
}?>
php 处理 非法访问
原理比较简单,用到了两个php文件,index.php的作用是模拟用户登录,然后再session中写入“身份”, 然后再访问该网站其他的页面的时候就会带着这个身份验证进行登录。
index.php模拟身份验证
<?php
session_start();
$_SESSION['name']='郭璞';
echo "Hello ".$_SESSION['name'];
目标资源页session.php
<?php
session_start();
$name = $_SESSION['name'];
if(!$name) {
echo "403 Forbidden!请您先登录,然后在查看相关的信息!";
die('//-^-\\');
}else{
echo "认证通过了!";
}
效果演示
没有身份标记时提示相关信息
模拟验证
模拟验证通过后访问资源页面
URL判断法
我个人觉得,根据URL方式来处理的一个比较好的方法是通过路由设置,通过一个路由大总管,处理一切外部请求,想来效果一定会是不错的吧。
下面介绍一下一个简易版的实现,功能就是防外链处理。核心就是通过Referer来实现。这点比较简单,做过爬虫的一下子就会明白了,就不多说哦。
源文件
<?php
$targeturl = "http://localhost/phpstorm/Test/index.php";
if($_SERVER['HTTP_REFERER']!=$targeturl) {
//header("Location:".$targeturl); exit;
echo "本站防外链哦,请到 <br /><a href='index.php'>点我访问资源页!!!</a><br />访问我们的资源哦!";
}else{
echo "可以正常的访问资源页面了!";
}
涉及到的index.php文件简单的设置一个超链接即可,作用就是为资源也添加上一个Referer,来保证资源只能在本站访问的效果。
index.php文件内容
<?php
echo "首页哦!";
echo "<h1><a href='url.php'>点我访问资源页!!!</a></h1>";
演示效果