This question already has answers here:
php 5 strpos() difference between returning 0 and false?
                                
                                    (5个答案)
                                
                        
                                4年前关闭。
            
                    
我已经创建了一个文件目录系统。这里有一个创建目录的功能,我想防止用户在../中创建目录,即在一个文件夹中,因此我创建了一个带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>


并且,如果您在其中输入“ ../”,则它没有回斜杠,更重要的是它将开始在用户文件夹之外的文件夹中建立目录。

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

最佳答案

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

原因是因为如果找到匹配项,则返回匹配项的字符索引(例如5),然后由于5 == true为true,该值被评估为true。

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

10-04 18:51