【问题标题】:Multiple file upload. cloneNode of input fields with IE多文件上传。带有 IE 的输入字段的 cloneNode
【发布时间】:2010-01-17 09:14:30
【问题描述】:

我想要一个表单将一些文件上传到服务器,但我希望它对用户是透明的。我在表单之外有一个输入标签,每次用户更改其值时,它都会使用 cloneNode() [Javascript] 克隆到表单中。输入标签的名称是“files[]”。 Mozilla Firefox 正确克隆输入,但 IE 不会复制其值,并且使用 IE,表单内的输入为空。如何使用 IE 正确复制输入字段?

一段代码:

在input.onChange时调用的Javascript函数:

InputCopy = InputParent.childNodes[i].cloneNode(true);
document.getElementById('divFromForm').appendChild(InputCopy);

HTML 输入标签:<input type="file" id="archivoAnadir" name="files[]" onChange="anadir(this.value)">

PHP 请求:

foreach ($_FILES["files"]["name"] as $key => $file) {
    $query = "...";
    mysql_query($consulta) or die("...");

    if (!is_uploaded_file( $_FILES["files"]["tmp_name"][$key] )) die("...");
    if (!move_uploaded_file($_FILES["files"]["tmp_name"][$key], "media/" . $file)) die ("..." . $file);
}

谢谢。

【问题讨论】:

  • 你能把代码贴在这里吗?或者至少是相关部分。它使调试过程更容易:能够看到代码:]
  • 实际上,如果实际上可以将type=file 的输入 包括 值复制到表单中(这似乎是您建议的,对于 firefox ),这将是一个相当大的安全风险。请向我们展示代码。
  • 因为无法修改“值”,所以使用了cloneNode()和appendChild()。我认为这不是安全风险,因为我正在复制用户已更改的输入字段。我无法改变它。

标签: javascript html file-upload


【解决方案1】:

编辑:有趣的是,一周前才在 SO 上询问了 very same question。接受的答案中的 cmets 很好地解释了为什么不能这样做。

我很确定由于安全限制,这不起作用,这是正确的。

在我看来,IE 通常对这类东西更严格,可能是因为它们过去被严重烧毁(并且存在如此巨大的安全漏洞)。

您可能会争辩说用户确实设置了值,因此复制元素应该没问题。但是这种东西是一些跨站点框架的后门 - 一些恶作剧(当框架 A 在这个域中,框架 B 在那个域中,用户是男性,30 岁以下,月亮在处女座时有效)是由制成的,所以我觉得它被禁止是可以理解的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2018-03-29
    • 2012-06-11
    • 1970-01-01
    • 2013-10-18
    • 2019-04-21
    相关资源
    最近更新 更多