返回列表 发新帖
查看: 193|回复: 0

Discuz X3.4中相关新更新应用的比较实用的函数

[复制链接]

1万

热度

1万

元宝

1万

贡献

金牌草根

发表于 2017-8-12 12:52:44 | 显示全部楼层 |阅读模式
判断是否为机器人、判断是否为移动设备

这个自己收集比较麻烦

//判断是否为机器人、爬虫
function checkrobot($useragent = '') {
static $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
static $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';

$useragent = empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent;

if(!strexists($useragent, 'http://') && preg_match("/($kw_browsers)/i", $useragent)) {
return false;
} elseif(preg_match("/($kw_spiders)/i", $useragent)) {
return true;
} else {
return false;
}
}

//判断是否为移动设备
function checkmobile() {
global $_G;
$mobile = array();
static $mobilebrowser_list ='iPhone|Android|phone|WAP|NetFront|JAVA|Opera\sMini|UCWEB|Windows\sCE|Symbian|Series|webOS|SonyEricsson|Sony|BlackBerry|IEMobile|dopod|Nokia|samsung|PalmSource|Xda|PIEPlus|MEIZU|MIDP|CLDC';
if(preg_match("/$mobilebrowser_list/i", $_SERVER['HTTP_USER_AGENT'], $mobile)) {
$_G['mobile'] = $mobile[0];
return true;
} else {
if(preg_match('/(mozilla|chrome|safari|opera|m3gate|winwap|openwave|myop)/i', $_SERVER['HTTP_USER_AGENT'])) {
return false;
} else {
$_G['mobile'] = 'unknown';
if($_GET['mobile'] === 'yes') {
return true;
} else {
return false;
}
}
}
}

防止XSS跨站点注入

通过检测是否含有左尖括号’<'、双引号来判断,发现此类字符,立即exit。Beta版小bug

function _xss_check() {
$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp,'CONTENT-TRANSFER-ENCODING')!==false) {
system_error('request_tainting');
}
return true;
}

获取客户端IP地址

使用正则/^([0-9]{1,3}\.){3}[0-9]{1,3}$/判断是否合法,但不够严格。直接使用函数ip2long()即可。这里都是IPV4.

function _get_client_ip() {
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
}
return $ip;
}


本文来源于网友学习研究交流 www.caogen8.co,请以学习研究交流为主。
如果您没有贡献积分,可以直接免费领取,免费领取
如果你需要加入本学习研究交流,请以学习研究交流为目的,免责声明
如果找不到您要的资源,请搜索一下,点击搜索
返回列表 发新帖
 懒得打字嘛,点击右侧快捷回复【最新发布】   【赞助草根吧享更多权益】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

收藏帖子 返回列表 搜索

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

小黑屋|手机版|草根吧