JS—— 常用图片后缀正则校验

本文介绍了一个使用正则表达式验证文件名后缀的JavaScript函数。该函数能够检查传入的文件名是否以一系列指定的图像格式后缀结尾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.js

function verifySuffix(fileName) {
	suffix = `(bmp|jpg|png|tif|gif|pcx|tga|exif|fpx|svg|psd|cdr|pcd|dxf|ufo|eps|ai|raw|WMF|webp|jpeg)`
	var regular = new RegExp(`.*\.${suffix}`)
	return regular.test(fileName)
}
<think>嗯,用户这次的问题很具体:通过POST接口传递FTP文件路径时,文件名后缀.xlsx是否需要转译。这涉及到URL编码和安全传输的细节。用户可能正在开发文件传输功能,遇到了路径传递的安全性问题。从ta提问的精准度看,应该是有一定开发经验的工程师,但可能对URL编码规范不太熟悉。之前讨论过URL包含.xlsx的影响,这次更聚焦传输环节。需要特别注意几个技术点:1.FTP协议本身不强制要求编码,但嵌入HTTP环境时就要遵循URL规范2..xlsx中的点号是合法字符,但路径中可能出现空格等危险字符3.不同语言对URI组件的编码实现有差异引用[3]提到的正则表达式验证思路其实可以延伸——传输前验证文件名格式能预防路径遍历攻击。不过用户没问这个,暂时不展开。安全方面要强调:即使后缀不需要转译,整个路径也必须视为不可信输入。引用[1][4]的Python示例虽然没直接涉及传输,但提醒了文件操作时路径处理的严谨性。最后决定用分层方式回答:先明确点号无需转译,再指出需要转译的特殊字符,最后强调验证的重要性。这样既解决具体问题,又覆盖安全实践。</think>在通过POST接口传递FTP文件路径时,**文件名后缀 `.xlsx` 本身不需要特殊转译**,但需遵循以下关键规则: --- ### 一、无需转译的情况 1. **合法字符直接传递** `.xlsx` 中的字符均属于URI合法字符(`.` 是路径分隔符,`x`/`l`/`s` 是字母)。以下写法可直接使用: ```http POST /api/upload Content-Type: application/json { "ftp_path": "ftp://user:pass@server/report.xlsx" // .xlsx 无需修改 } ``` 2. **开发库自动处理** 主流HTTP库(如Python的`requests`、JS的`fetch`)会自动编码非法字符,但会保留 `.xlsx` 等合法后缀: ```python # Python示例:合法路径无需手动编码 import requests requests.post(url, json={"path": "ftp://data/report_2023.xlsx"}) # 库自动处理 ``` --- ### 二、必须转译的场景 当路径包含**URI保留字符或特殊符号**时,需对整个路径进行URL编码: 1. **需转译的字符** | 字符 | 原因 | 转译后 | |---|---|---| | 空格 | 破坏URI结构 | `%20` | | `#` | 锚点标识符 | `%23` | | `?` | 查询参数起始符 | `%3F` | | 中文 | 非ASCII字符 | UTF-8编码如`%E4%B8%AD` | ```javascript // JS示例:含空格的文件名需编码 const path = "ftp://server/销售 报表.xlsx"; fetch('/api', { method: 'POST', body: JSON.stringify({ ftp_path: encodeURIComponent(path) }) }); ``` 2. **防御性编码最佳实践** 即使路径“看似安全”,也建议全程编码: ```python # Python安全实践 from urllib.parse import quote safe_path = quote("ftp://server/q1&report.xlsx", safe=":/") # 保留 : 和 / ``` --- ### 三、安全风险与防护 1. **路径注入攻击** 未转译的路径可能被恶意构造(如 `../../../etc/passwd`): ```http # 恶意示例(未编码) { "ftp_path": "ftp://attacker/../../secret.xlsx" } ``` **防护措施**: - 服务端校验路径合法性(如正则表达式限制字符 `^[\w./-]+\.xlsx$` [^3]) - 拒绝包含 `..` 的路径 2. **后缀欺骗风险** 攻击者可能伪装后缀(如 `virus.exe;.xlsx`),需在服务端验证文件类型: ```python # 服务端真实类型验证(Python示例) import magic file_type = magic.from_buffer(file_content) # 返回真实MIME类型 if "Excel" not in file_type: raise InvalidFileTypeError() ``` --- ### 总结建议 | **场景** | **处理方式** | **示例** | |----------|--------------|----------| | 纯 `.xlsx` 路径 | 直接传递 | `report.xlsx` | | 含空格/中文等 | 整体URL编码 | `销售%20报表.xlsx` | | 含 `#` `?` 等 | 强制转译特殊字符 | `data%23final.xlsx` | **关键原则**: 1. 客户端:始终对完整路径执行 `encodeURIComponent`(JS)或 `urllib.parse.quote`(Python)[^3] 2. 服务端:解码后验证路径格式,并二次校验文件内容类型[^1][^4] 3. 传输层:使用HTTPS防止路径被中间人窃取 > 通过严格遵循URI编码规范和服务端验证,可安全传递 `.xlsx` 后缀的FTP路径[^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值