【发布时间】:2011-05-31 13:26:26
【问题描述】:
我的 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 脚本是否知道它是通过require_once() 调用还是直接调用?我一直在尝试实现某种$_SERVER['REQUEST_URI'] 和$_SERVER['PHP_SELF'] 陷阱,但我想知道是否有某种优雅的方式来做到这一点。
【问题讨论】:
-
脚本通过 require_once 包含,但未执行。
-
这能回答你的问题吗? Check if a file was included or loaded
标签: php require-once