Commit a3f16b9
fix(upload): contentType 加严格 MIME 正则闸,拒 CR/LF 及其他控制字符
extractPrimaryMime 只切分号 + trim + 小写,不清洗控制字符。像 'image/jpeg\r\nContent-Type: image/svg+xml' 这种值,
走完 extractPrimaryMime 得到 'image/jpeg\r\ncontent-type: image/svg+xml',startsWith('image/') 过、
startsWith('image/svg') 绕(中间有 \r\n,前缀是 image/jpeg\r\n),然后被塞进 PutObjectCommand.ContentType。
下游(AWS SDK / R2 / 浏览器)per RFC 7230 一般会拒 header 值里的 CRLF,但入口先收口更便宜也更正确。
改法:新增 MIME_PATTERN = /^[a-z0-9][a-z0-9.+-]*\/[a-z0-9][a-z0-9.+-]*$/,
extractPrimaryMime 返回后立刻 .test(),不匹配直接 400 { error: 'contentType 格式非法' },
放在 image/* 和 SVG 黑名单之前当最外层 gate。合法 image/jpeg / image/svg+xml / image/webp
等都能过(SVG 交给后续黑名单拦),CR/LF/冒号/空格注入一律挡死。1 parent 8044e39 commit a3f16b9
1 file changed
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
57 | 66 | | |
58 | 67 | | |
59 | 68 | | |
| |||
136 | 145 | | |
137 | 146 | | |
138 | 147 | | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
139 | 155 | | |
140 | 156 | | |
141 | 157 | | |
| |||
0 commit comments