【问题标题】:PHP - Path Manipulation / Input ValidationPHP - 路径操作/输入验证
【发布时间】:2015-02-07 21:55:30
【问题描述】:

我为我开发的应用程序运行了灰盒评估测试,但我有一些漏洞,具体是输入验证类别中的路径操作。

我的代码中有:

if (move_uploaded_file($_FILES["file"]["tmp_name"],"contacts_load/" . $fileName)) {
    if ($import = fopen ("contacts_load/" . $fileName,"r")) {

和:

unlink("contacts_load/" . $fileName);

问题出在contacts_load/

您将在下面找到有关此的一些信息:

描述:允许用户输入控制文件系统操作中使用的路径可能使攻击者能够访问或修改受保护的系统资源。

具体场景:

当满足以下两个条件时会发生路径操作错误:

  1. 攻击者可以指定在对 文件系统。

  2. 通过指定资源,攻击者获得了以下能力: 否则是不允许的。

例如,该程序可能赋予攻击者覆盖指定文件或以攻击者控制的配置运行的能力。

如何防止这种特定场景的路径操纵?

【问题讨论】:

  • $fileName 来自哪里?
  • 从这里:$fileName = Date("YmdHis")."_".$_FILES["file"]["name"];,但问题出在路径上 (contacts_load/)。
  • $_FILES["file"]["name"] 已包含请求中提供的文件名的basename
  • 问题在于$_FILES["file"]["tmp_name"]。它是用户提供的,是一个路径/文件。
  • 你是对的,我很困惑,问题在于文件名,因为攻击者可以提供诸如“../../tomcat/conf/server.xml”之类的文件名并导致文件系统有问题。

标签: php security validation path-manipulation


【解决方案1】:

contacts_load/ 没有问题。用户无法修改。

我确实建议您对$_FILES["file"]["name"] 进行消毒。 This answer 应该会有所帮助。

【讨论】:

  • 问题在于文件路径,而不是文件名。
  • @JuanSedano 用户无法控制。你有什么顾虑?
  • 你是对的,我很困惑,问题在于文件名,因为攻击者可以提供诸如“../../tomcat/conf/server.xml”之类的文件名并导致文件系统有问题。
【解决方案2】:

.htaccess 文件?

# Protect files and directories from prying eyes.
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig\.save)$">
  Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 2016-06-18
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多