如果表单数据边界包含在附件中怎么办?

2023-12-30

让我们看下面的例子multipart/form-data 取自 w3.com http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

这非常简单,但假设您正在编写实现此功能并从头开始创建此类请求的代码。我们假设file1.txt由用户创建,我们无法控制其内容。

如果是文本文件怎么办file1.txt包含字符串--AaB03x?您可能生成了边界AaB03x随机,但我们假设“百万只猴子进入一百万个网络表单” http://en.wikipedia.org/wiki/Infinite_monkey_theorem设想。

有没有standard如何处理这种不太可能但仍然可能发生的情况?

应该text/plain(或者甚至可能是类似的东西image/jpeg or application/octet-stream)被“编码”或以某种方式“转义”中的某些信息?

或者开发人员是否应该始终在文件内容中搜索边界,然后重复选择新的随机生成的边界,直到在文件中找不到所选字符串?


HTTP 委托给 MIME RFC 来定义multipart/在这里输入。规则规定在RFC 2046 第 5.1 节 https://www.rfc-editor.org/rfc/rfc2046#section-5.1.

RFC 简单地规定边界不得出现:

边界 分隔符不得出现在任何封装部分内 行本身或作为任何行的前缀。这意味着它是 至关重要的是,组成代理能够选择并指定一个 不包含边界的唯一边界参数值 封闭多部分的参数值作为前缀。

and

注意:因为边界分隔符不能出现在正文部分中 被封装后,用户代理必须谨慎选择 唯一的边界参数值。中的边界参数值 上面的例子可能是一个算法的结果 产生边界定界符的概率非常低 存在于要封装的数据中,而无需预先扫描 数据。替代算法可能会产生更“可读”的边界 具有旧用户代理的收件人的分隔符,但需要 更多地关注边界定界符可能 出现在封装部分中某行的开头。这 最简单的边界分隔线可能是类似“---”, 结束边界分隔线为“-----”。

大多数 MIME 软件只是生成一个随机边界,使得该边界出现在部件中的概率为统计上不太可能;例如碰撞可能会发生,但发生的可能性很低,以至于不可行。电脑UUID 值 http://en.wikipedia.org/wiki/Universally_unique_identifier依赖相同的原则;如果您在一年内生成几万亿个 UUID,则生成两个相同 UUID 值的概率与某人被陨石击中的概率大致相同,两者的概率均为 170 亿分之一。

请注意,您通常将二进制数据编码为某种形式的 ASCII 安全编码,例如 base64,这是一种不包含破折号的编码,从而消除了二进制数据包含边界的可能性。

因此,处理这种可能性的标准方法就是简单地让这种可能性变得几乎不可能。如果存储电子邮件的计算机更有可能被陨石击中,为什么还要担心 MIME 边界呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果表单数据边界包含在附件中怎么办? 的相关文章

  • 如何使用 jQuery 创建动态表单?

    我已经看到很多有关动态添加行或字段的帮助 但我对控制相互依赖的字段感兴趣 例如 我有一个包含 3 个用户输入的表单
  • 无法在 onclick 函数中传递多个参数

    我正在尝试创建一个上传机制 其中我可以使用 HTML 中的文件 ID 将文件上传到 google 驱动器中 我不想将文件夹的 ID 放在上传函数中 因为这是需要的 我试图通过声明另一个参数 即函数 upload e id 来传递函数 upl
  • Apache HTTP localhost 在 macOS Monterey 上随机花费 5 秒,但在 HTTPS 上速度很快

    我尽可能地等待 但最终不得不从莫哈韦升级 我知道有些东西会不必要地损坏 当然确实如此 较大的文件 超过 100k 随机需要 5 秒才能加载 它并不总是相同的文件 也不是每次都相同 并且它只发生在 HTTP Apache 中 尝试过端口 80
  • 以表格形式连续调用/评估?

    大家好 简单的问题 使用 XLISP 编写程序 但我似乎遇到了一个我似乎无法解决的简单基本问题 也许有人有一个快速解决方案 我正在尝试编写一个 if 语句 该语句的 then 子句评估多种形式并返回最后一种形式的值 在示例中 setq PO
  • DefaultHttpClient GET 和 POST 命令 Java Android

    好的 这是我的应用程序 一个 Android 应用程序 允许我从移动应用程序 而不是从网站 将 CokeZone 代码提交到 CokeZone co uk 所以我编写了这部分代码来执行登录后命令 然后检查我是否登录后 问题是 发送 post
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 如何在C++中使用Curl获取HTTP响应字符串

    我对 HTTP 命令和 libcurl 库非常陌生 我知道如何获取 HTTP 响应代码 但不知道如何获取 HTTP 响应字符串 以下是我为获取响应代码而编写的代码片段 任何有关如何获取响应字符串的帮助将不胜感激 curl easy seto
  • 在Java中解析包含multipart/form-data请求体的字符串

    问题陈述 我认为标题说明了一切 我正在寻找解析 a 的方法String包含 multipart form data HTTP 请求的正文部分 IE 字符串的内容看起来像这样 xyzseparator blah Content Disposi
  • 从提交的表单中获取值

    我有一个非常简单的表格
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • 如何将变量从外部 JavaScript 传递到 HTML 表单

    我一直试图将一个值从外部 javascript 文件传递 到 HTML 表单 但没有成功 这些文件相当大 所以我不确定我可以解释这一切 但我会尝试 基本上 用户单击一个链接 然后启动一个 js 文件 新 HTML 页面加载后立即执行 我需要
  • 根据另一个输入的值更改输入值

    我想要一个包含几个输入的表单 例如 名称和网址 当用户输入他们的名字时 我希望 url 输入自动将他们的名字作为默认值 并在单词之间使用下划线 因此 如果他们输入自己的名字 pedro kinkybottom 则会自动将 url 输入中的默
  • 在node.js中使用pug在表单“post”之后发送空的{}

    我正在尝试使用 fetch 和以下 pug 代码通过 post 将表单数据从登录页面传递到登录页面 form id form login input type text name email value placeholder Tu ema
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • Django 多个具有相同名称的输入字段值

    我需要一些帮助 如何处理具有多个输入字段值且名称相同的表单 而且只有一次查看 这实际上是针对基本问题的形式 我发现这个方法的另一个想法https stackoverflow com a 478406 6396981 https stacko
  • 当会话令牌无效时,我应该使用什么状态代码?

    创建 Web 服务 RESTful 时 当会话令牌无效时我应该使用什么状态代码 目前我公司的人给我发了一个404 未找到 但我认为这是不正确的 因为资源存在 也许我应该使用 401 Unauthorized 你怎么认为 您建议我在这种情况下
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的

随机推荐