示例1
以下代码采用不受信任的输入,并使用正则表达式来过滤一个位于输入字符串开头的“ ../”元素。然后,它将此结果附加到/home/user/directory,并尝试在最终结果路径中读取文件。
我的$ username = getUntrustedInput();
$ username = 〜s/^\。\ \/////////
我的$ filename =“/home/home/user/”。$ username;
ReadAndSendFile($ filename);
由于正则表达式仅在字符串开头寻找“ ../”的实例,因此它仅删除第一个../“元素”。因此,输入值例如:
../../../../../etc/passwd
将有第一个“ ../”剥离,导致:
然后将此值与/home/user/underory串联:
/home/user/../../../etc/passwd
一旦操作系统解决了路径名中的../序列,这会导致/etc/passWD文件检索。这导致相对路径遍历(CWE-22)。