PHP中是否存在类似路径跳转的字符串截断攻击手段?
无法通过
../这类路径符号实现字符串截断 首先得明确一个核心区别:文件路径里的../是文件系统专属的路径解析规则,只在处理文件路径(比如用realpath()、fopen()这类函数时)才会生效,而PHP的字符串拼接是纯字符的直接拼接,完全不会触发任何路径解析逻辑。
针对你给出的代码片段:
$name = "Hello ". $variable . "World";
如果攻击者把$variable设为"../Hi",最终的$name只会是"Hello ../HiWorld"——这里的../就是普通的字符序列,不会有任何“截断前面内容”的效果。
那有没有办法实现类似的输出?其实有,但和路径符号无关:比如攻击者可以用退格控制字符(\b),比如设置$variable = str_repeat("\b", 6) . "Hi"(因为"Hello "刚好是6个字符:H、e、l、l、o、空格)。这种情况下,如果是在终端输出,退格符会删除前面的Hello ,最终显示HiWorld;但如果是输出到HTML页面,浏览器不会解析退格符,只会把它当成不可见字符或者直接忽略,达不到截断效果。
但回到你的问题本身:用类似../Hi的路径风格字符串,是绝对做不到截断Hello 的,因为PHP不会在字符串拼接时解析路径符号。
内容的提问来源于stack exchange,提问作者T.Todua
相关产品推荐
相关产品推荐

