A multipart/form-data
表单由一系列部分组成,这些部分由边界分隔。正如最初在 RFC 2045 第6节中指定的那样,每个部分可以包含 RFC 2388 中定义的 Content-Transfer-Encoding
头。
RFC 7578,第4.7节更新并取代了 RFC 2388,其中废弃了在支持二进制数据的情况下使用 Content-Transfer-Encoding
的情况,具体包括 HTTP。
http.Request.ParseMultipartForm 将解析包含 Content-Transfer-Encoding
头的表单部分。以 RFC 7578 中的一个示例为例,ParseMultipartForm
将解析此表单部分为包含正文 "Joe owes €100.":
--AaB03x
content-disposition: form-data; name="field1"
content-type: text/plain;charset=UTF-8
content-transfer-encoding: quoted-printable
Joe owes =E2=82=AC100.
--AaB03x
这可以作为一种内容窃取向量,因为其他实现通常不会在 HTTP multipart/form-data
响应中解码引用打印格式的表单部分。作为加固措施,我们应该考虑不解码编码的部分。RFC 7578 指出发送此类正文的实现是罕见的或不存在的。
4条答案
按热度按时间hgb9j2n61#
感谢Qi Wang和Jianjun Chen报告此问题。
wvt8vs2t2#
https://go.dev/cl/573195提到了这个问题:
mime/multipart: add Reader.SetRejectContentTransferEncoding
xzv2uavs3#
https://go.dev/cl/573196提到了这个问题:
net/http: reject multipart requests containing a "Content-Transfer-Encoding" header
jmo0nnb34#
See also #66434 .