我正在使用此脚本从我的服务器中删除图片。但同时我想保护我服务器中的文件。不小心删除但我注意到,如果我输入文件index.pHp
或index.Php
从我的服务器中删除。虽然设置它不会删除为什么php或此方法在小写和大写之间不知道。
什么做不对?
<?php
error_reporting (0);
$thefile = $_GET ['filetodel'];
$filename = "$thefile";
//$filename = "picture1.jpg";
/*protect some files*/
if ($thefile=='index.php' or $thefile=='INDEX.PHP' or $thefile=='UPLOADS.ZIP' or $thefile=='uploads.zip' or $thefile=='del.php'or $thefile=='DEL.PHP' or $thefile==NULL or $thefile=='.htaccess' or $thefile=='.HTACCESS' )
{
exit("<h2>cannot delete $thefile</h2>");
}
if ($thefile=="$thefile")
{
if (file_exists($filename))
{
unlink ("$thefile");
echo "<h2> file $thefile is delete</h2>";
}
else
{
echo "<h2>The<br>";
echo "$filename<br>";
echo "Does not exist</h2>";
}
}
?>
答案 0 :(得分:4)
只需将输入转换为小写并测试一次,而不是担心每种可能的案例组合:
if (strtolower($thefile) == 'index.php') {
// ...
}
对于下一次迭代,您可以将受保护的文件存储在数组中:
$protected_files = array('index.php', 'uploads.zip', 'del.php', '.htaccess');
if (in_array(strtolower($thefile), $protected_files) || $thefile==NULL) {
// ...
}
答案 1 :(得分:1)
问题在于:
if ($thefile=="$thefile")
好像你的第一个文件检查条件是假的,而不是第二个条件是
if ($thefile=="$thefile")
始终为true,因此它将取消链接文件 在第一个条件之前添加一行,如下所示
$thefile = strtolower($thefile);