对来源ip进行访问控制

HTTP_CLIENT_IP:可通过http头伪造
HTTP_X_FORWARDED_FOR:可通过http头伪造
REMOTE_ADDR:可能是用户真实IP也可能是代理IP
服务端获取IP地址 http://www.taoyiz.com/util/ip 其代码如下:
$s_onlineip = getenv(‘HTTP_CLIENT_IP’);
echo “HTTP_CLIENT_IP:”.$s_onlineip.”<br/>\n”;
$s_onlineip = getenv(‘HTTP_X_FORWARDED_FOR’);
echo “HTTP_X_FORWARDED_FOR:”.$s_onlineip.”<br/>\n”;
$s_onlineip = getenv(‘REMOTE_ADDR’);
echo “REMOTE_ADDR:”.$s_onlineip.”<br/>\n”;
$s_onlineip = $_SERVER[‘REMOTE_ADDR‘];
echo “\$_SERVER[‘REMOTE_ADDR‘]:”.$s_onlineip.”<br/>\n”;
客户端代码:
伪造IP测试:
$url = ‘http://www.taoyiz.com/util/ip’;
$data_string = ‘test=test’;
$URL_Info    =    parse_url($url);
$request = ”;
if (!isset($URL_Info["port"]))
$URL_Info["port"]=80;
$request.=”POST “.$URL_Info["path"].” HTTP/1.1\n”;
$request.=”Host: “.$URL_Info["host"].”\n”;
$request.=”Referer: “.$URL_Info["host"].”\n”;
$request.=”Content-type: application/x-www-form-urlencoded\n”;
$request.=”X-Forwarded-For:192.168.1.4\n”;//HTTP_X_FORWARDED_FOR的值
$request.=”client_ip:192.168.1.5\n”;//HTTP_CLIENT_IP的值
$request.=”Content-length: “.strlen($data_string).”\n”;
$request.=”Connection: close\n”;
$request.=”\n”;
$request.=$data_string.”\n”;
$fp = fsockopen($URL_Info["host"], $URL_Info["port"]);
fputs($fp, $request);
$result = ”;
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
fclose($fp);
echo $result;
输出:
HTTP_CLIENT_IP:192.168.1.5
HTTP_X_FORWARDED_FOR:192.168.1.4
REMOTE_ADDR:127.0.0.1
$_SERVER[‘REMOTE_ADDR‘]:127.0.0.1
代理IP测试:
$cUrl = curl_init();
curl_setopt($cUrl, CURLOPT_URL, $url);
curl_setopt($cUrl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cUrl, CURLOPT_HEADER, 1);
curl_setopt($cUrl, CURLOPT_USERAGENT, “Mozilla/99.99″);
//curl_setopt($cUrl, CURLOPT_TIMEOUT, 10);
curl_setopt($cUrl, CURLOPT_PROXY, ’125.77.194.103:80′);
$c = curl_exec($cUrl);
curl_close($cUrl);
echo $c;
输出:
HTTP_CLIENT_IP:
HTTP_X_FORWARDED_FOR:
REMOTE_ADDR:125.77.194.103
$_SERVER[‘REMOTE_ADDR‘]:125.77.194.103

如果通过客户端ip来进行访问控制:

public function login() {
        //设定IP段登录
        if(getenv("HTTP_CLIENT_IP")) {
            $onlineip = getenv(‘HTTP_CLIENT_IP‘);
                 }
                 elseif(getenv(‘HTTP_X_FORWARDED_FOR‘)){
                         $onlineip = getenv(‘HTTP_X_FORWARDED_FOR‘);
                 }
                 elseif(getenv(‘REMOTE_ADDR‘)){
                         $onlineip = getenv(‘REMOTE_ADDR‘);
                 }
                 else{
                         $onlineip = $HTTP_SERVER_VARS[‘REMOTE_ADDR‘];
                 }
//                 echo $onlineip;
                 $adminip = $onlineip;
                 $arrayip = array(‘117.121.48.*‘,‘127.0.0.*‘);//ip段
                 $ipregexp = implode(‘|‘, str_replace( array(‘*‘,‘.‘), array(‘\d+‘,‘\.‘) ,$arrayip) );
                 $allow = preg_match("/^(".$ipregexp.")$/", $adminip);
       
                 if ($allow != 1) {
                         showmessage(L(‘你的ip地址不在被允许的范围内!‘),‘?m=admin&c=index&a=login‘,6000);

}

时间: 2024-10-19 07:13:57

对来源ip进行访问控制的相关文章

构造HTTP请求Header实现“伪造来源IP”(转)

原文:http://zhangxugg-163-com.iteye.com/blog/1663687 构造 HTTP请求 Header 实现“伪造来源 IP ” 在阅读本文前,大家要有一个概念,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以伪造数据包来源 IP ,但这会让发送出去的数据包有去无回,无法实现正常的通信.这就像我们给对方写信时,如果写出错误的发信人地址,而收信人按信封上的发信人地址回信时,原发信人是无法收到回信的. 一些D

超大文件(1TB)统计访问次数最多的来源IP及访问次数

题目解读 1. 文件格式:访问时间,来源IP,响应结果,响应耗时 2. 文件大小:超大规模,TB数量级 解题思路 首先,数据量过大,通过内存计算肯定是不可行的. 考虑采用分治,将大文件切割成小文件,再对小文件分析,找出访问次数最多的,此时将问题转化为:切割小文件算法 具体思路如下: 将1T的文件按照IP的高8位(代码是按照高8位实现的,ipv4的高位地址不均匀,按照低8位>比较合理)分隔成2^8份. 每一份写入到文件名为"tmp_{高8位地址}"的文件中,文件中的数据为低24位的

企业常用Centos 7.4 --虚拟主机基于域名,端口,IP,Apache访问控制

构建虚拟主机 一共支持三种虚拟主机类型企业常用的是第一种基于域名的虚拟主机基于IP地址的虚拟主机,一台物理主机上需要两个网卡基于端口的虚拟主机 构建虚拟主机之基于域名 环境需求:一台linux作为DNS和web服务器,一台WIN10客户端作为测试 在我们的Linux先装两个 软件包 [[email protected] ~]# yum install bind httpd -y 已安装: bind.x86_64 32:9.11.4-9.P2.el7 httpd.x86_64 0:2.4.6-90

iptables禁止来源IP访问限制

#屏蔽公网 iptables -I INPUT -p tcp --dport 2222 -j DROP  #只允许某ip访问指定端口 iptables -I INPUT -p tcp --dport 2222 -s 123.123.123.123 -j ACCEPT  #添加白名单 允许某IP 访问此服务器 iptables -I INPUT -s 12.12.12.12 -j ACCEPT

机房变迁--防火墙IP、访问控制更新

一.简介: 1.品牌:天融信(型号:NGFW4000-UF) 2.连接方式:外网-->防火墙-->交换机 3.服务器迁移,所有ip地址切换 二.防火墙中配置的ip变更: 例:旧地址为:0.0.8.34 :新地址为:0.0.0.82 1.变更访问地址: a) 添加一个新访问地址: i. 用一根网线连接对应的网口(平时用的网线就可,也有较老的防火墙可能需要使用交叉线),本次是第一个网口(eth0).如果你的防火墙还是出厂的默认访问地址192.168.1.254,那些你应该连接的网口是MGMT接口.

Nginx实现基于ip的访问控制(Ngx_http_access_module模块)

Nginx实现基于ip的访问控制功能:(Ngx_http_access_module) 官方文档:http://nginx.org/en/docs/http/ngx_http_access_module.html 官方示例: The ngx_http_access_module module allows limiting access to certain client addresses.限定资源只被指定的客户端访问. Example Configuration: location / {

Varnish之二web缓存实践

一.实验说明 操作系统说明:Centos 7.2 主机名:node-proxy  IP:192.168.2.5(模拟外网)/192.168.2.18(模拟内网)  职责:双网卡,nginx负载均衡调度器 主机名:node01      IP:192.168.2.14(模拟内网)                        职责:varnish缓存服务器 主机名:node02      IP:192.168.2.15/192.168.2.101(模拟内网)          职责:httpd静态

CentOS 7.4 Tengine安装配置详解(二)

三.配置虚拟主机: 1.配置基于端口的虚拟主机: (1)在http{}配置段中新增如下server: server { listen 8000; server_name localhost; access_log /usr/local/tengine/logs/localhost8000-access.log main; location / { root /vhosts/web; index index.html index.htm; } } (2)创建测试页:# mkdir -pv /vho

Apache的IP访问控制

Apache防盗链主要是防止本网站的链接被别人盗用 使用Apache访问控制,禁用来源IP访问 1.修改网站的虚拟主机配置文件 从主配置文件中拷贝模板: [[email protected] logs]# vim /usr/local/apache2/conf/httpd.conf [[email protected] logs]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ........ &