组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?> $v = implode(",", $v);
$temp[] = $v;
}
// 去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
// 再将拆开的数组重新组装
$output = array();
foreach ($temp as $k => $v) {
if ($stkeep) $k = $starr[$k];
if ($ndformat) {
$temparr = explode(",", $v);
foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
// 合并二维数组 如重复 值以第一个数组值为准
function array2_merge($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array1 as $k => $v) {
isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
}
return $arr;
}
/*
* 对二维数组排序 两个数组必须有一个相同的键值
* $array1 需要排序数组
* $array2 按照该数组key排序
* */
function array2_sort_key($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array2 as $k => $v) {
if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) {
$arr[$v[$key]] = $array1[$v[$key]];
} else {
$arr[] = $v;
}
}
return $arr;
}
?>
谁动了我的宽带?记一次HTTP劫持的发现过程。http劫持的反思。编程频道|福州电脑网
谁动了我的宽带?记一次HTTP劫持的发现过程。http劫持的反思。
编程之家930
更新时间:2026-04-03 20:24:06
日常遇到的劫持一般为DNS劫持,可在路由器里强制指定公共DNS解决。本文记录了自己家用宽带HTTP劫持的发现过程。相比DNS劫持,HTTP劫持则更为流氓,解决起来也比较棘手。
近来在家上网时,iPhone Safari网页里经常弹出“在手机淘宝中打开连接吗?”的提示框,如下图:
作为一名iOS码农,很自然的知道这是网页在调用淘宝app的 URL Scheme tbopen:// ,这是干什么的呢?当然是淘宝客的推广链接,点了之后打开淘宝去领券,如果你按提示下单了,推广者就能拿到返利。问题在于,网页为什么会发出这种请求,结合当前网站是http的,隐隐觉得可能是被劫持了。下面记录一下排查过程。
谁在劫持
先说一下环境,家里宽带是联通百兆,路由器华硕AC86U,刷的梅林(仅开启虚拟内存插件),路由器直接拨号,且当时安装条件限制,家里没有光猫,接线员直接接到了一楼的交换机上。
- 是网站自己挂的广告吗?
在Wi-Fi下,每次用Safari隐身模式反复访问截图里这个网站,仍会出现这个提示,概率大概30%-40%。切换手机联通4G网络,移动4G,则一次都不会出现。换用电脑Safari和Chrome,也一次不会出现。
结论:仅在iPhone手机端Wi-Fi环境才会出现 - 是路由器刷的梅林固件导致的吗?
翻箱倒柜找出了以前买的 TPLink-WR700n,就是下图这个小路由器(简直是神器,小巧玲珑,AP和Router模式任意切换),设置好拨号账号密码后换掉华硕继续测试,震惊了,劫持弹窗仍然存在。
结论:梅林没问题,只能是运营商的锅了。
怎样劫持
IIS7网站监控可以做到提前预防各类网站劫持、并且是免费在线查询、适用于各大站长、政府网站、学校、公司、医院等网站。他可以做到24小时定时监控、同时它可以让你知道网站是否被黑、被入侵、被改标题、被挂黑链、被劫持、被墙及DNS是否被污染等等功能、更是拥有独家检测网站真实的完全打开时间、让你作为站长能清楚的知道自己网站的健康情况!
官方地址:IIS7网站监控
官方图
由于梅林里已经设置DNS为114,排除了DNS劫持。确定是运营商的接入点的问题,接下来就是看看它究竟是怎么劫持的。这里使用Charles抓包iPhone(还没必要祭出Wireshark大杀器)具体设置不在这里讲了,在百度里随机访问网页,待出现劫持时,停止记录,开始分析记录日志。从后往前,找出返回数据里包含 tbopen 的请求。不出意外,很容易就发现了:
原请求为http://static.geetest/static/js/fullpage.8.9.3.js,经过确认,https://www.geetest/极验,是业界提供安全与风控解决方案的平台,不可能返回 tbopen 这样的数据的。在Charles里复制此http请求的curl命令出来,使用阿里云VPS里进行访问,获取到的则为真实的JS内容。
•
curl -H ‘Host: static.geetest’ -H ‘Accept: /’ -H ‘User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1’ -H ‘Accept-Language: zh-cn’ -H ‘Referer:http://pass.52pk/’ --compressed ‘http://static.geetest/static/js/fullpage.8.9.3.js’
使用自己的Mac重放这个curl命令,还是有很高几率被劫持。进一步,修改此请求的User-Agent字段,去掉手机标识符,仅保留为Safari,继续重放,则不会出现被劫持。同时,注意到发生劫持后,有个新的同样的js请求发出,url里多了个参数utm_id=1024001,会返回正确的JS内容,这样做的目的,猜测可能是为了区分请求,好让真正的JS能正常返回不影响网页加载,否则可能出现劫持后再被劫持,无法加载出正确的JS内容。
至此,整个劫持的过程大致清晰了:联通的接入点会根据UA过滤出移动设备中的http JS请求,然后一定几率返回劫持后的伪JS内容,在里面嵌入淘宝客推广链接。
劫持的JS内容如下,里面有淘宝客推广链接,建议阿里妈妈的相关人士解决一下?
代码比较简单,将自己的JS脚本挂载到页面DOM上,使用setInterval延迟20ms去调用tbopen,打开淘宝app领券。
想在手机端暂时屏蔽的话,可以在surge里加个Header Rewrite规则修改UA[Header Rewrite]^http://* header-replace User-Agent Safari/530
投诉
用手机录屏两段视频作为证据,先打联通客服投诉电话,客服按套路说会派人来检查。一天过后回电说检修人员说是客户家里问题,无法解决。???根本没人联系我,且上门检查。没关系,心平气和的告诉客服小妹,你们解决不了那俺只能向上投诉了。这里不用跟客服急眼,先向运营商投诉本来也不指望他们能马上解决,该走的流程还是得走一下。找到省通信管理局网站,留言说明了情况,第二天临下班前就有回访电话,把自己录的视频作为证据都发过去,没多久运营商回电说安排人带路由器检查确定问题。检查的小哥没多久也回电了解情况,先问是否重设了DNS为114,(梅林早已设置过),无解后约了个时间说来检查。约定的检查日期来了,我不停的重试测试,还是会被劫持,早上10:30左右,路由器记录到网络重连,之后再测试,再也没出现过劫持,然而检查人员也并未登门检查,看来是悄悄把接入点给改了。至此,一场没有结局的投诉就这样不明不白的解决了。
反思
整个过程中,面对网络运营商,用户人微言轻,举证困难,运营商可以随时修改设置关闭劫持。通管局指定运营商自查,并不是指定第三方来审查。运营商“我查我自己”,究竟是内部个别员工作祟还是自身作祟,也不得而知。网络安全服务提供商极验,对自己提供的服务未采用https协议传输,在这两年风风火火的全民https时代,显得尤为落后,更何况自身提供的就是反欺诈等服务,到头来反而自身服务被劫持,作为受害者兼背锅侠,也是冤枉。
最后的最后,站长们还没上https的赶快上吧
本文发布于:2024-10-17,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:谁动了过程发现http
发布评论