我需要为Web服务器编写一个小文件服务组件。服务有很多问题 文件。因为“原样”是一个很大的安全漏洞,就像这样
www.somesite.com/../../../../etc/passwd
有许多问题,包括“..”解决和许多其他像在Windows下有许多“不寻常的方式来引用某些路径”。还有一些符号链接问题......它们可能会让我们远离文档根。
是否有关于提供文件和对其进行安全检查的好文章或材料?
感谢。
P.S。:我需要主要用于POSIX系统的解决方案,但我也需要Win32的解决方案。
P.P.S:
为什么我需要这个:
CppCMS有一个简单的内部Web服务器用于调试目的(我已经编写了一个),我试图弄清楚这个服务器对现实世界是否有用是多么困难(即直接听80)然后在Web服务器和FastCGI或SCGI连接器后面运行。
这是我在此时使用的file serving application。它做了非常原始的检查。我主要想让它安全。
我的回答:
似乎足够好......
简而言之:在UNIX下使用realpath
,在Windows下使用GetFullPathName
。
最后注意事项:如果有什么东西会建议更详细的功能我会接受它(特别是对于路径测试很痛苦的Win32)。
答案 0 :(得分:1)
对于Windows API产品,有一组Shell函数,它们以Path
和Url
开头,可以帮助规范化目录,路径和文件名。例如,PathCanonicalize
将帮助您获得标准表单的任意路径。从那里你可以做进一步的分析。
通常,使用特定的事物列表来允许,而不是禁止的事物列表。坏人总会想到你没想到的新事物。
答案 1 :(得分:0)
看起来你正在处理Path Traversal - http://www.owasp.org/index.php/Path_Traversal 该链接主要处理Web应用程序,但我认为那里的一些信息会有所帮助。我认为POSIX系统的最佳实践是chroot并且不允许访问应用程序根目录之外的路径。