php - 您允许文档管理应用程序使用哪些文件类型/扩展名?

标签 php javascript

我正在开发一种文档管理系统。最终用户是企业级用户。

我目前仅检查并允许上传符合以下条件之一的文件:

"png|jpe?g|gif|xls|doc|docx|csv|ppt|txt|pdf|rtf"

我的问题是 -

  • 如果我将“xml”添加到列表中?它们会导致任何安全问题吗?

  • 我还可以添加哪些其他文档类型/扩展名?

或者

我应该检查 NOT IN "exe|bat|php|js" 并允许所有其他类型吗?

感谢您的建议。

最佳答案

Should I check NOT IN "exe|bat|php|js" and allow all other types?

没有。白名单比黑名单更好。有很多很多比您可能了解的更危险的文件类型。这四个仅仅触及表面。

If I add "xml" into the list? can they cause any security issue?

是的,[X][HT]ML 可能包含在为其提供服务的站点的安全上下文中运行的脚本。这允许任何可以将文档上传到您网站的人将 JavaScript 注入(inject)您的网站(窃取 cookie、伪造请求等)。

但是...它实际上并没有添加任何您尚未遇到的安全问题。因为即使按文件类型/扩展名列入白名单也不安全,这要归功于 IE 及其错误的类型嗅探。您可以上传 .txt 文件,并使用 Content-Type: text/plain header 正确提供该文件,但如果它包含 IE 认为看起来像 HTML 的序列,则 IE会忽略你并将其呈现为 HTML — boom,XSS。

(实际上任何其他类型都是如此,但 .txt 是最容易受到攻击的。)

有两种方法可以解决这个问题:

  1. 将所有用户上传的文件从不同的主机名提供到主应用程序站点,以便它们位于不同的 JS 安全上下文中,并且不共享 cookie 或身份验证数据。

  2. 使用 Content-Disposition:attachment header 提供所有用户上传的文件,以便始终下载这些文件而不在浏览器中显示这些文件。

(2) 本身应该是无懈可击的,但在过去的实践中,由于浏览器和插件的利用,已经有一些方法可以绕过它,所以我不确定我是否会完全信任它。 (1) 其本身可以阻止 XSS,但它不能阻止其他令人讨厌的行为,例如包含 iframe 的 HTML 文件来利用网站。

所以最好两者都做。

关于php - 您允许文档管理应用程序使用哪些文件类型/扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1560300/

相关文章:

php - 在 wordpress 上运行调整大小 Logo 脚本

javascript - force_reply 在地址栏中工作,但在 Google Apps 脚本中的代码中不起作用

javascript - 调用 JS 函数来调整窗口大小

javascript - 每 2 秒更新一次页面 - 未捕获的类型错误

javascript - 未捕获的类型错误 : Cannot set property 'innerHTML' of null

javascript - PHP md5 和 JS hex_md5 不匹配特殊字符的结果

php - Mediawiki php : how to get the name of user who uploaded a file?

javascript - 使用 Javascript 替换文本而不丢失内部标签

php - 在 HTML 列表中转换 PHP 数组

php - 如何将 optgroup 添加到下拉循环?