Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
是变量';s值反斜杠在PHP中可用吗?_Php - Fatal编程技术网

是变量';s值反斜杠在PHP中可用吗?

是变量';s值反斜杠在PHP中可用吗?,php,Php,当我们检查时: dir1/dir2/../file.txt ==== this is same as =====> dir1/file.txt 我感兴趣的是PHP中提供的一些相同的东西,例如: $name= "Hello ". $variable . "World"; 如果我有$variable=“../Hi”(或类似的内容),那么它会删除(像反斜杠一样)前面打印的Hi World (另外,我不控制php文件,我询问攻击者如何实现这一点) (p.s.2.我没有话对落选者说要结束这

当我们检查时:

dir1/dir2/../file.txt  ==== this is same as =====>   dir1/file.txt
我感兴趣的是PHP中提供的一些相同的东西,例如:

$name= "Hello ". $variable . "World";
如果我有
$variable=“../Hi”
(或类似的内容),那么它会删除(像反斜杠一样)前面打印的
Hi World

(另外,我不控制php文件,我询问攻击者如何实现这一点)


(p.s.2.我没有话对落选者说要结束这篇文章。我想你在结束之前在分析问题方面有问题。)

PHP
中没有特殊的
。/
(或任何其他字符串)当连接到另一个字符串时,将生成除与新字符串连接的合并原始字符串以外的任何字符串。无论字符串的内容如何,串联始终会导致:

"<String1><String2>" = "<String1>"."<String2>";

$name=“你好”$变量“世界”打印<代码>高世界
?这是不可能的,所以你能编辑并澄清你的信息吗?另外,让你的问题更清楚一点。
$variable
设置为什么?当然不是。路径与字符串串联不同。您需要一个函数来解析变量和字符串。我假设您要删除前面的单词,并且对于每次出现的
。/
?Hi,使用
连接运算符?不,这是不可能的(除非你有办法破解PHP:D),尽管你可以使用带参数的函数来实现,但个人看不到任何好处,因为
与Linux(或Unix)相关,指向父目录……我想OP担心有人可能会发布一些内容,当使用其他字符串内容插入时,只需通过连接或“以其他方式对字符串进行操作”(目录操作由文件系统处理),插入的内容可能会更改它所连接的内容的字符或它包含的表达式。我觉得你想得太多了。谢谢,你完全明白我的意思,但问题是——谁来做(当我不控制php文件时)。我的意思是,攻击者可以利用什么来实现。我想我应该问一下security.se,但我更喜欢这里。不,
。/
对字符串本身没有什么特别的作用,请参阅我的更新,了解两种情况,如果您在其中使用字符串,您可能需要注意。@T.Todua这是否回答了您的问题?感谢您的努力,但坦率地说,我主要关心的是是否存在任何字符串(不完全是
。/
。我只是问了一个例子,因为我不知道其他的例子来表达我的想法。所以,我的问题是一般性的,如果存在类似的字符串,这可能会导致删除以前的字符/单词(没有正则表达式,只是简单的连接).啊,我明白了。不,字符串连接中除了一个与原始字符串的连接字符完全相同的新字符串外,不会发生任何事情。请参阅我对该问题的最新更新。
<?php

$variable = "../Hi";
$string = "Hello ". $variable . " World"; // Note: I added a space prior to the W 

$arr = array();

foreach(explode(" ", $string) as $word) {
   if (substr( $word, 0, 3 ) === "../") {
      if(!empty($arr)){
         array_pop($arr);
      }
      $arr[] =  str_replace("../", "", $word);
   } else {
      $arr[] = $word;
   }
}

echo implode(" ", $arr);