PHP strpos函数与“../”文件目录系统冲突

时间:2015-10-19 19:48:34

标签: php mysql post directory

我已经创建了一个文件目录系统。这里有一个函数来创建目录,我想阻止用户在../即在一个文件夹中创建目录,因此我创建了一个带有strpos的if语句来搜索它。这是代码:

<div class="FormElement">
  <form method="post">
    <input type="text" name="newFolder" id="newFolder" class="newFolder"/>
    <input type="submit" value="Create">
  </form>

  <?php
    $uniqueUserPath = $_SESSION['userPath'];
    $folderName = $_POST['newFolder'];
    $makeFolder = $uniqueUserPath . "/" . $folderName;
    // mkdir($uniqueUserPath . "/" . $folderName);

    if (strpos($folderName, "../") == true) {
      echo 'there is a slash.';
    } else {
      mkdir($uniqueUserPath . "/" . $folderName);
      echo 'there isnt a slash';
    }
  ?>
</div>

如果你在那里键入“../”它stil echo没有斜杠,更重要的是它会开始在users文件夹之外的文件夹中创建目录。

任何帮助将不胜感激 亲切的问候,

1 个答案:

答案 0 :(得分:1)

strpos($folderName, "../") == true必须为strpos($folderName, "../") !== false

原因是因为如果找到匹配项,则返回匹配项的字符索引(例如5),然后将其评估为true,因为5 == true为真。

如果没有匹配则返回布尔值false,因此你应该寻找它。