10月21日,PHP紧急发布安全更新,一次性修掉两个远程代码执行漏洞。补丁上线的消息还没传开,攻击就已经开始了,Cloudflare在补丁发布前数小时就监测到首批攻击流量。如果你的站点跑在PHP上,现在最该问的是:**日志里哪些IP是趁乱打过来的?**做一次网站ip查询,把高频段和正常访客分开,就能锁定趁火打劫的那批来源。
一、两个漏洞,一个请求就能打穿
这两个漏洞编号是CVE-2026-109618和CVE-2026-109619,CVSS评分都是9.2。前者利用内存不足时的清理逻辑,让请求内存停留在未初始化状态,进而远程执行代码;后者是全局状态在请求释放后仍指向旧内存,属于释放后使用。两个漏洞都能在未认证的情况下触发,在Apache的mod_php模式下,甚至不经过应用代码、一个请求就直接命中。触发条件都埋在PHP每次请求必经的内存管理和错误处理里,只要站点还开着PHP,就躲不开这轮风险。受影响的PHP版本从8.2到8.5,官方已给出8.2.35、8.3.36、8.4.27、8.5.12四个修复版。
二、影响面有多大

看两个数字。W3Techs统计,PHP驱动了约75%的可识别网站,而基于PHP的WordPress又占了全部网站的约43%。PHP-FPM、Apache的mod_php、php-cgi、FrankenPHP、LiteSpeed这些部署方式全都受影响,其中mod_php风险最高,因为它能在应用代码执行前就触发漏洞。这意味着互联网上相当大一块站点,底层都跑着同一套引擎。攻击者不需要针对某个具体网站,扫描全网、命中任何一个未打补丁的PHP服务就行。多国政府网站本周紧急下线避险,正是因为这条攻击链不挑目标。
三、攻击源长什么样

漏洞公开后,第一波流量几乎都是自动化扫描:攻击者用脚本批量探测存活目标,再对命中的版本发利用请求。这类流量在日志里有明显特征------来源IP集中、请求密集、路径重复。真正动手前,先按IP把访问日志聚合一遍,高频段一拎就出来。
四、代码实操:用一次网站ip查询 识别扫描段
把日志里出现次数靠前的IP交给IP数据云,查它的归属地和网络类型,扫描器藏不住:
python
Python
import re
from collections import Counter
import requests
DC_KEYS = ("数据中心", "机房", "idc", "cloud", "hosting")
def lookup(ip):
if not str(ip or "").strip():
return None
try:
resp = requests.get(
"https://api.ipdatacloud.com/v2/query",
params={"ip": ip, "key": "你的KEY"},
timeout=5,
)
resp.raise_for_status()
body = resp.json()
except (requests.RequestException, ValueError):
return None
if not isinstance(body, dict):
return None
if str(body.get("code")) != "200":
return None
data = body.get("data")
if not isinstance(data, dict) or not data:
return None
return {
"country": str(data.get("country") or "").strip(),
"net_type": str(data.get("usage_type") or "").strip().lower(),
}
def top_ips(log_lines, n=10):
ips = []
for line in log_lines:
part = line.split(" ", 1)[0]
if part.count(".") == 3:
ips.append(part)
return Counter(ips).most_common(n)
def scan_report(log_lines):
report = []
for ip, cnt in top_ips(log_lines):
info = lookup(ip)
if info is None:
report.append((ip, cnt, "unknown", "查不到归属数据"))
continue
is_dc = any(k in info["net_type"] for k in DC_KEYS)
tag = "机房/数据中心段" if is_dc else "家庭/移动网络"
report.append((ip, cnt, info["country"], tag))
return report
判断还是那一条:**高频访问落在机房或数据中心段,基本可以归为自动化扫描或攻击流量;落在家庭宽带段、请求还稀疏的,才更像正常访客。**这一轮网站ip查询的价值,就在把机房段的高频来源一次性拎出来。查不到归属数据时标unknown,别把它当正常放过。扫完把机房段的高频IP拉进临时拦截名单,配合官方补丁一起上,才是完整的处置。
五、先打补丁,再做排查
排序别反了。第一优先是升级到8.2.35 / 8.3.36 / 8.4.27 / 8.5.12并重启工作进程,这步不落,排查再细也是给下一次攻击留门。补丁一时上不了的话,可以先设memory_limit=-1、收紧请求体大小上限,给攻击路径加一道临时缓冲。补丁打完后,再用上面的方式把已经进来的扫描段清一遍,看有没有被利用成功的痕迹。
六、识别是手段,升级才是解药
一次网站ip查询把扫描源从正常流量里分出来,价值在于让你知道攻击从哪来、打过几次,但漏洞的根在引擎本身,只有升级补丁能关掉这扇门。识别能帮你快一步发现,快一步发现能帮你少漏一台机器。
数据来源:
- CERT-EU:Security Advisory 2026-018(PHP两个远程代码执行漏洞官方公告)
- W3Techs:网站服务器端语言使用率统计
- Cloudflare:PHP漏洞首批攻击流量监测通报