Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 平面文件CMS(PAAS)的安全性_Php - Fatal编程技术网

Php 平面文件CMS(PAAS)的安全性

Php 平面文件CMS(PAAS)的安全性,php,Php,我正在构建一个使用php文件的平面文件cms。用户将能够使用输入字段重命名文件,新旧文件路径将通过ajax发送到我测试安全性的服务器。我意识到使用正则表达式甚至或操作符可以更轻松地实现这一点。我去掉了或操作符,这样字符串就不会太长。至于regex,我希望对发送回客户端的错误有更多的控制 CMS本身很像PAAS,它位于每个用户将拥有的所有单独站点文件夹之上的目录中。我的目标是防止用户注入可能会干扰上面父目录中其他(相邻)用户文件夹或cms本身的代码 我还没有分析路径的有效性。我只是想了解恶意用户可

我正在构建一个使用php文件的平面文件cms。用户将能够使用输入字段重命名文件,新旧文件路径将通过ajax发送到我测试安全性的服务器。我意识到使用正则表达式甚至
操作符可以更轻松地实现这一点。我去掉了
操作符,这样字符串就不会太长。至于regex,我希望对发送回客户端的错误有更多的控制

CMS本身很像PAAS,它位于每个用户将拥有的所有单独站点文件夹之上的目录中。我的目标是防止用户注入可能会干扰上面父目录中其他(相邻)用户文件夹或cms本身的代码

我还没有分析路径的有效性。我只是想了解恶意用户可能如何利用我目前所写的内容

<?php
 $old_path = $_POST['file'].'.php'; // path/to/file.php
 $new_path = $_POST['new_file'].'.php'; // path/to/newfile.php';
  if(strstr($new_path,"<?")){
    echo "Sorry, path cannot contain script tags";
  }elseif(strstr($new_path,"?>")){
    echo "Sorry, path cannot contain script tags";
  }elseif (strstr($new_path,">")){
    echo "Sorry, path cannot contain script tags";
  }elseif (strstr($new_path,"<")){
    echo "Sorry, path cannot contain script tags";    
  }elseif($new_path[0]==="." OR $new_path[0]==='/' OR $new_path[0]==='\\'){
    echo 'Sorry first character of path cannot be a period or slash';
  }else{

    //this is set when the user logs in based on details in a database
    $users_dedicated_directory = $_SESSION['userfolder'].'/';

    // add the users folder when renaming just for more control
    $old_path = $users_dedicated_directory.$old_path;

    // add the users folder when renaming just for more control
    $new_path = $users_dedicated_directory.$old_path;

    rename($old_path,$new_path);

    //trim the users folder name. Send it back to the client  
    echo explode($users_dedicated_directory,$new_path);    
   }   
?>

if
new_path
类似于
a/./../path/to/one/of/you/cms/core/file.php
如果您认为恶意用户可能会覆盖您的cms的某些文件


您必须删除web服务器对任何CMS文件的写入权限,以防止出现这种情况。

如果认为恶意用户可能会覆盖您CMS的某些文件,则
new\u path
类似于
a/。/../path/to/one/of/You/CMS/core/file.php


您必须删除web服务器对任何CMS文件的写入权限,以防止出现这种情况。

因此,如果我
explode()
在斜杠上使用
$new\u path
,并检查数组的每个结果,以确认不存在“.”或“…”,这会防止出现这种情况吗?我认为您使用的反黑名单方法存在很多风险。例如,我宁愿使用仅带有正则表达式的白名单自动调整
[a-zA-Z0-9/]
,我不确定我是否理解黑名单与白名单。regex如何使if语句更安全?正则表达式的作用是否与strstrstr()不同?如果是这样,你能解释一下吗?黑名单禁止某些模式,白名单授权某些模式。两种不同的方法,但考虑到安全性,并且不知道上下文中所有可能的缺陷,白名单似乎是一个更好的选择。正则表达式与安全性无关。它们只是检查字符串的一种较短的方法,有些人说更简单。例如(未测试)
if(preg\u match('/^[a-zA-Z0-9\-\/]$/,$new\u path,$matches)==1){…}
防止恶意用户通过在路径中使用“..”访问父目录
斜杠上的
$new\u路径
并检查数组的每个结果,以确认不存在“.”或“…”,这能防止出现这种情况吗?我认为您使用的去黑名单方法存在很多风险。例如,我宁愿使用仅带有正则表达式的白名单自动调整
[a-zA-Z0-9/]
,我不确定我是否理解黑名单与白名单。regex如何使if语句更安全?正则表达式的作用是否与strstrstr()不同?如果是这样,你能解释一下吗?黑名单禁止某些模式,白名单授权某些模式。两种不同的方法,但考虑到安全性,并且不知道上下文中所有可能的缺陷,白名单似乎是一个更好的选择。正则表达式与安全性无关。它们只是检查字符串的一种较短的方法,有些人说更简单。例如(未测试)
if(preg\u match('/^[a-zA-Z0-9\-\/]$/,$new\u path,$matches)==1){…}
防止恶意用户通过在路径中使用“..”访问父目录
斜杠上的
$new\u路径
并检查数组的每个结果,以确认不存在“.”或“…”,这能防止出现这种情况吗?我认为您使用的去黑名单方法存在很多风险。例如,我宁愿使用仅带有正则表达式的白名单自动调整
[a-zA-Z0-9/]
,我不确定我是否理解黑名单与白名单。regex如何使if语句更安全?正则表达式的作用是否与strstrstr()不同?如果是这样,你能解释一下吗?黑名单禁止某些模式,白名单授权某些模式。两种不同的方法,但考虑到安全性,并且不知道上下文中所有可能的缺陷,白名单似乎是一个更好的选择。正则表达式与安全性无关。它们只是检查字符串的一种较短的方法,有些人说更简单。例如(未测试)
if(preg\u match('/^[a-zA-Z0-9\-\/]$/,$new\u path,$matches)==1){…}
防止恶意用户通过在路径中使用“..”来访问父目录