This question already has answers here:
php 5 strpos() difference between returning 0 and false?
(5个答案)
4年前关闭。
我已经创建了一个文件目录系统。这里有一个创建目录的功能,我想防止用户在../中创建目录,即在一个文件夹中,因此我创建了一个带strpos的if语句来搜索它。这是代码:
并且,如果您在其中输入“ ../”,则它没有回斜杠,更重要的是它将开始在用户文件夹之外的文件夹中建立目录。
任何帮助,将不胜感激
亲切的问候,
(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