📜  路径遍历攻击与预防

📅  最后修改于: 2021-04-17 03:29:50             🧑  作者: Mango

路径遍历攻击使攻击者可以访问他们不应该访问的目录,例如配置文件或任何其他包含可能不适合公共使用的服务器数据的文件/目录。

使用路径遍历攻击(也称为目录遍历),攻击者可以访问存储在Web根文件夹(通常为/ var / www /)外部的数据。通过操纵引用带有“点-点-斜杠(../)”序列及其变体的变量,或者使用绝对文件路径,可以访问存储在文件系统上的任意文件和目录,包括应用程序源代码或配置和重要的系统文件。

假设我们有一个网站正在运行

http://www.mywebsite.com.

我们还假设Web服务器容易受到路径遍历攻击。这使攻击者可以使用特殊字符序列(例如../)在Unix目录中指向其父目录,以遍历目录链并访问/ var / www之外的文件或诸如此类的配置文件

PHP代码中易受攻击的应用程序的典型示例是:


使用相同的../技术,攻击者可以逃脱出包含PDF的目录,并访问他们在系统上想要的任何内容。

http://www.mywebsite.com/?template= ../../../../../../../../../etc/passwd

预防
防止目录遍历的可能算法是:

  • 给目录和文件适当的权限。一个PHP文件通常在Linux上以www-data用户身份运行。我们不应允许该用户访问系统文件。但这并不能阻止该用户访问Web应用程序特定的配置文件。
  • 在继续下面的操作之前,请处理不会导致文件请求的URI请求,例如,执行对用户代码的挂钩。
  • 当要对文件/目录进行URI请求时,请为该文件/目录建立完整路径(如果存在),并对所有字符标准化(例如,将%20转换为空格)。
  • 假定已知一个“ Document Root”完全限定,规范化的路径,并且该字符串的长度为N。假定无法提供此目录之外的任何文件。
  • 确保所请求文件的标准路径的前N个字符与“文档根目录”完全相同。
  • 使用硬编码的预定义文件扩展名作为路径的后缀不会将攻击范围限制为该文件扩展名的文件。

资料来源
https://zh.wikipedia.org/wiki/Directory_traversal_attack
http://projects.webappsec.org/w/page/13246952/Path%20Traversal
https://www.owasp.org/index。的PHP/ Path_Traversal