【问题标题】:Uploading files with apostrophe in filename上传文件名中带有撇号的文件
【发布时间】:2013-08-26 19:19:42
【问题描述】:

我目前在将文件上传到文件名中带有撇号的服务器时遇到问题。例如 O'Connell.doc 当文件名中没有撇号时,该表单可以完美运行。使用撇号时出现 500 内部服务器错误。它得到了 form.php?p=apply 好像表单被提交然后立即失败。任何想法在哪里看? 谢谢!

【问题讨论】:

  • 检查您的 URL 是否正确获取 url_encoded。上传时使用%27 而不是'
  • @ManojAwasthi 我是否需要在提交表单之前以某种方式删除撇号?如何检查 url_encoded 问题?谢谢
  • 如果相关,则启用魔术引号
  • 你有没有找到解决这个问题的方法?我有同样的问题,需要在文件上传之前/上传文件时以某种方式删除撇号。

标签: php forms file-upload


【解决方案1】:

刚进入这里,我遇到了类似的问题,原来我的主机/服务器激活了“mod_security”,默认情况下阻止了文件。我正在寻找一种在处理之前重写文件名的解决方案,似乎需要禁用该文件名或 mod_security。

【讨论】:

    【解决方案2】:

    听起来您的表单很容易受到Code Injection 攻击。正在处理文件时正在解释撇号,然后您会从该失败中得到某种错误。

    所有用户输入都需要经过所有解释器的过滤。理想的情况是用户输入永远不会被解释,只会被存储或调用。因此,不要在输入上调用 shell,而是在您想要的确切可执行文件和参数上使用 exec 或其他东西。

    【讨论】:

    • 如何防止撇号被解释?我试过 if(sizeof($_FILES) > 0) { foreach($_FILES as $k => $v) { $_FILES[$k] = str_replace(array("\\","'"), "", $v); } }
    • 看来我需要使用addlashes
    • 我不是 PHP 专家,但我知道 PHP 可以很容易地为您的应用程序添加巨大的安全漏洞。请记住,这种错误通常允许任何人在您的服务器上执行“服务器”用户可以执行的任何操作。
    • 解释文件的行是什么?您需要做的是避免使用文件名作为参数调用 shell。
    猜你喜欢
    • 2012-11-26
    • 2021-06-17
    • 1970-01-01
    • 2015-06-29
    • 2012-11-21
    • 1970-01-01
    • 2019-05-04
    • 2011-01-02
    • 2021-11-15
    相关资源
    最近更新 更多