多部分边界属性中的反斜杠

时间:2016-04-21 10:18:15

标签: apache http

在多部分边界属性中出现反斜杠时,预期的行为是什么? RFC(第5.1.1节)不允许,但Apache似乎理解这个请求:

POST / HTTP/1.1
Host: myhost.com
Content-Type: multipart/form-data; boundary="\foo"
Content-Length: 74

--\foo
Content-Disposition: form-data; name="bar"

baz
--\foo--

对我来说,Apache解释的边界应该是" foo"而不是" \ foo"因为反斜杠逃脱了' f'和变量" bar"不应该设置。

1 个答案:

答案 0 :(得分:1)

你确实是对的,section 5.1.1中给出的语法不允许使用反斜杠。通过RFC 822, section 3.3,您也可以期待\f在引用的字符串中显示f

然而,实际上,实施很难执行\""之外的任何翻译。由于很多客户非常...... unique ideas关于什么是有效边界,什么不是有效边界,同行们倾向于对他们被喂食的东西非常宽容,并且只是逐字逐句地接受边界,这就是什么我相信Apache正在这里。

因此,如果一切都严格按照本书进行,那么此处的预期行为是:

  • 让Apache接受请求(为了论证,让我们假设Apache自己处理它,POST请求很少发生这种情况),
  • 解析元数据,
  • 发现内容由\foo
  • 分隔的多个部分组成
  • 得出结论,邮件正文中的分隔符必须是--foo<CR><LF>
  • 意识到分隔符实际上从未出现在身体中,并且
  • 生成400 / Bad Request状态代码,因为邮件正文似乎已损坏