假设 example.com 有一个带有这个 HTML 的前端:
<form action='this.php' method='post'>
<input type='hidden' value='test' name='post'>
<input type='submit' value='Test'>
</form>
this.php 包含以下内容:
if (isset($_POST['post'])) {
include 'test_' . $_POST['post'] . ".php";
}
使用上述设置,如果字符串“test_”附加到它的开头,那么某人将如何执行恶意包含或尝试任何类型的目录遍历?
如果他们输入 /../../,include 会将其读取为 'test_/../../',如果他们使用 url,include 会失败,则 include 会得到 'test_http://evil.com/badcode。 php' 并再次失败。
有人将如何绕过正在进行的字符串来执行远程包含或更改其目录?
旁注:我确实知道如何对字符串进行消毒,以及完全避免这种情况的其他安全步骤。这只是出于好奇,从我现在所知道的情况来看,我认为这是不可能的。