我的 webapp 有很多模块。每个模块都有一个 'main' php 脚本,它根据发送到主模块的查询加载子模块:
//file: clientes.php
//check for valid user...
//import CSS and JS...
switch( $_GET["action"] )
{
case "lista" : require_once("clientes.lista.php"); break;
case "listaDeudores" : require_once("clientes.listaDeudores.php"); break;
case "nuevo" : require_once("clientes.nuevo.php"); break;
case "detalles" : require_once("clientes.detalles.php"); break;
case "editar" : require_once("clientes.editar.php"); break;
default : echo "<h1>Error</h1><p>El sitio ha encontrado un error.</p>";
}
该主模块处理安全性并导入所有子模块所需的许多资源。当用户请求任何子模块时,就会出现大问题,绕过主模块上的所有安全措施!我的想法是在每个子模块上添加一行以测试它是否被直接调用并拒绝访问,或者是否通过另一个脚本调用它,然后继续。我最不想做的就是重做每个文件的安全检查,因为它对数据库做了一堆查询。
php 脚本是否知道它是通过 arequire_once()
调用还是直接调用调用的?我一直在尝试实现某种陷阱$_SERVER['REQUEST_URI']
,$_SERVER['PHP_SELF']
但我想知道是否有某种优雅的方式来做到这一点。