/* 定义页面路径 */ 定义(“PAGE_DIR”,“页/”); if (file_exists(PAGE_DIR."$_GET[page].php")) include(PAGE_DIR."$_GET[page].php");
这有多安全?例如,如果页面位于名为 pages 的文件夹中,您能否在另一个 Web 服务器上包含该页面?
谢谢
这根本不安全 - 想想如果$_GET[page]
包含会发生什么../../../somewhere/else/
您应该明确列出允许的页面。
编辑:我认为它不能包含来自不同服务器的文件,但这仍然不是一件好事。
将未经处理的用户输入直接传递给命令从来都不是一个好习惯,尤其是像 include() 这样的命令。您不一定知道底层网络服务器/操作系统将如何处理,例如,相对路径、扩展字符等。任何这些,无论是恶意使用还是以其他方式使用,都可能导致用户看到他们不应该看到的东西看。
一种可能的利用方式:用户将相对路径传递到服务器上已知位置的恶意脚本。http://webserver/yourscript.php?page=%2e%2e%2f%2e%2e%2f%2e%2e%2fhome/bad_user/evil_script
您的函数可以将其转换为 pages/../../../home/bad_user/evil_script.php,其中 include 有时会很高兴地包括在内。所以你的网页在服务时可以很好地执行 bad_user 的 php 脚本,他可以用它来做各种讨厌的事情。
至少您应该将 $_GET['path'] 分配给一个新变量并添加斜杠()。
在验证/清理数据之前使用 $_GET 或 $_POST做任何事情都是危险的。假设所有用户都想找你,并在使用数据之前对其进行清理。