【问题标题】:How to perform security check on a given path (from web server) to serve files如何对给定路径(来自 Web 服务器)执行安全检查以提供文件
【发布时间】:2009-12-24 20:59:34
【问题描述】:

我需要为 Web 服务器编写一个小文件服务组件。服务有很多问题 文件。因为“原样”是一个很大的安全漏洞,像这样

www.somesite.com/../../../../etc/passwd

有很多问题,包括“..”解析和许多其他问题,例如在 windows 下有许多“引用某些路径的不寻常方式”。符号链接也存在一些问题......它们可能会让我们远离文档根目录。

有没有关于提供文件和对其执行安全检查的好文章或材料?

谢谢。

P.S.:我主要需要针对 POSIX 系统的解决方案,但我也需要针对 Win32 的解决方案。

附言:

  • 对于 POSIX 系统,检查“..”和符号链接是否足够? (据我所知,它不适用于 Windows)
  • 据我所知,Windows 为这些目的提供了某种 API,有人可以指出吗?

我为什么需要这个:

CppCMS 有一个用于调试目的的简单内部 Web 服务器(我写过一个),我试图弄清楚让这个服务器对现实世界完全有用有多难(即直接在 80 处收听而不是运行在 Web 服务器和 FastCGI 或 SCGI 连接器后面)。

这是我此时使用的file serving application。它进行非常原始的检查。我主要是想让它安全。

我的回答:

有答案https://www.securecoding.cert.org/confluence/display/seccode/FIO02-C.+Canonicalize+path+names+originating+from+untrusted+sources

好像还不错……

简而言之:在 UNIX 下使用realpath,在 Windows 下使用GetFullPathName

最后说明:如果有什么建议更详细的功能,我会接受(尤其是对于路径测试很麻烦的 Win32...)

【问题讨论】:

  • 但至少最佳实践应该是 ;)
  • 能否请您更具体地了解您的网络服务器 - 这是专有解决方案还是基于某些开源网络服务器。我认为大多数(如果不是全部的话)网络服务器已经有了某种保护措施来抵御此类攻击,因为它们已经存在了很长时间。
  • 它是 FOSS 服务器,但不是基于现有代码。

标签: security winapi posix filesystems


【解决方案1】:

对于 Windows API 产品,有一组以 PathUrl 开头的 Shell 函数,可以帮助规范化目录、路径和文件名。例如,PathCanonicalize 将帮助您将任意路径转换为标准表单。从那里你可以做进一步的分析。

一般来说,使用特定的允许事物列表,而不是禁止事物列表。坏人总是会想到你没有预料到的新事物。

【讨论】:

  • "PathCanonicalize" 不幸的是,如果我通过 "../test.txt" 它不会像它应该的那样删除 "../"。
  • 这并不意味着 PathCanonicalize 是一个完整的解决方案。它是可以帮助您规范化路径的几个函数之一。您可能必须将它与其他人结合使用。你也可以看看InternetCrackUrl
【解决方案2】:

您似乎正在处理路径遍历 - http://www.owasp.org/index.php/Path_Traversal
该链接主要处理 Web 应用程序,但我认为其中的一些信息会有所帮助。我认为 POSIX 系统上的最佳实践是 chroot 并且不允许访问应用程序根目录之外的路径。

【讨论】:

  • 谢谢。我知道 chroot 是最好的方法,但它需要 root 权限并且在 Win32 上不可用
猜你喜欢
  • 1970-01-01
  • 2011-02-28
  • 2017-07-15
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2018-09-30
相关资源
最近更新 更多