#10640·parse-server

masterKeyIps 从未验证 CIDR 口罩

作者: AdrianCurtin创建于 2026年8月19日更新于 2026年8月19日

新问题核对表

QQ 问题描述

`Config.validateIps'在验证前会剥取CIDR口罩,因此口罩本身从未被检查:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 静态验证 Ips( 字段, 主密钥) { 用于(让主键盘的ip){ 如果(p. 包括 ('/')){ ip = ip.split ('/') [0;} 如果 (!net.isIP(ip)) {丢出 `. 包含无效的 IP 地址 “ ${ip} ” ; } {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


" Get BlockList " 然后通过 " Number(mask) " ,不加限制。 4个后果,全部衡量
反对“checkIp”:

1. ** 离程或分数口罩启动服务器,但首次使用时失败。 ** `127.0.0.1/999'
和`10.0.0/8.9'通过靴子验证,以及`BlockList.addSubnet'然后投出
`“前缀”的值超出范围'。
客户视为500。 这种选择是无法使用的,但在行使之前,没有任何说法。
2. `数字()'默默接受不是整数的拼写。 **`127.0.0.0/32.0',
`127.0.0.0/3.2e1'、`127.0.0/0x20'、`127.0.0.0/0b100000'、`127.0.0.0/32'和`127.0.0.0/32'
都变成了工作‘32'。
3. ** 空口罩无声地改变条目的含义。 ** `127.0.0.1/' 分为空口。
, " .mask " 读作 " 不在场 " ,而该条目作为赤裸的地址添加。
4. ** 第二次斜线后的任何情况均被放弃。 ** " 127.0.0.1/32/ignored " 被调整为其结构。
前两部分,其余部分被删除。

这些问题比普通的nit解析更重要,因为选项是一个授权边界:a
typo 要么是写作以外的意思,要么是等待第一个主键请求
失败。

* 复制步骤

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
const { checkIp } = 需要 ('parse- server/lib/middlewares') ;
cont store = () QQ新地图 ();

checkIp ('127. 0.0.1', ['127. 0.0/32.0'], store ()); // 真实,作为32处理
checkIp ('127. 0.0.1', ['127. 0.0/0x20'], store ()); // true,作为32处理
checkIp ('127. 0.0.1', ['127. 0.0.1/'], store ()); /// true,作为赤裸的地址处理
checkIp ('127. 0.0.1', ['127. 0.0.1/32/ignored', store ()); // 真实, 尾弃
checkIp ('127. 0.0.1', ['127. 0.0.1/999'], store ()); // 抛出范围

每个条目都经过“ Config.validateIps ” , 因此配置了其中任何一个的服务器 正常开始。

实际结果

所有五个条目均在启动时被接受。 四者无声地重新解释,第五者投出 第一次请求会呈现主密钥,产生500个.

预期成果

" 验证IPS " 应验证地址旁边的口罩并拒绝启动时的选项:a 整数,在IPv4的 " 0-32 " 和IPv6的 " 0-128 " 之间,在 . . . . . . .

内容来源: parse-community/parse-server