【问题标题】:POSTing XML via HTML Forms通过 HTML 表单发布 XML
【发布时间】:2010-02-24 22:55:06
【问题描述】:

我正在开发一个网络,并希望让用户可以创建一些东西来发布 XML 数据。为此,有一个<textarea>,用户可以在其中编写(复制/粘贴)XML 并提交它。问题是我丢失了数据:<> 等字符,我认为其他字符也会丢失。

可能是框架问题,不确定,我用的是Elgg,用get_input()接收数据。

UPDATE1:回复评论的一些代码:

<form method="POST" action="http://for.bar/slash" enctype="text/xml">
<input name="add" type="submit" value="Create"  />
</form> 

接收我使用的数据elgg get_input()

$data = get_input('data');

【问题讨论】:

标签: php html xml encoding elgg


【解决方案1】:

如果我在哪里进行疯狂的猜测,我会说 get_input() 使用了某种自动神奇的 xss 保护。您可以尝试执行 print_r($_POST); 或者 elgg 也在“清理”所有 $_POST。在这种情况下,您可能必须在提交请求之前使用 JavaScript 对数据进行 base64 编码。

【讨论】:

  • 你是对的!多谢。 get_input() 函数有一个 $filter_result = true 参数。
  • +1。是的,这会导致输入由htmlawed_filter_tags 管理,它会尝试将输入设为 HTML,无论它是否应该是 HTML。输入阶段的 XSS“保护”总是错误的,这是一个特别糟糕的例子。我强烈质疑这个包的开发者的能力。
  • 这是一个非常常见的讨厌的“功能”。我同意这是一个 xss 过滤器的错误位置。我很高兴能帮上忙!
【解决方案2】:

根据 MDN,应该在表单的 enctype 属性中使用的唯一标准值如下:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain

话虽如此,您可能会遇到不可预知的情况,使其具有价值application/xml

来源:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-18
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多