意思很简单,就是当调用的模块不存在时,怎么去处理?我们通过代码级别来分析,打开 TP/Lib/Core/App.class.php文件:
第一步,它先查找有没有 __hack_module 这个方法。默认是没有的。我们可以定义这个函数,然后通过这个函数来实例化一个模块(比如说,我们可以写一个错误提示模块)。
第二步,假如没有 __hack_module 这个方法,那么,它会查找有没有 EmptyAction.class.php 模块。这时,那我们就可以定义一个EmptyAction.class.php模块来调用,防止报错。
实例演示
在 orange/lib/action/下,创建一个模块EmptyAction.class.php。当输入的模块不存在时,便会调用该模块。这里,我同时创建了一个空方法 _empty(),当模块和方法都不存在时,便会调用。
php class EmptyAction extends Action{ public function index(){ echo \"你输入的模块不存在,哈哈\"; } public function _empty(){ echo \"你输入的模块和方法都不存在,真悲剧\"; } } ?>
我们在地址栏输入:
(1)http://localhost/orange/index.php/Username/ //没有Username这个模块
(2)http://localhost/orange/index.php/Username/haha/ //模块Username,方法haha,都不存在
不过话说回来 ,thinkphp有是app_debug模式的,就是调试模式。 如果关闭了调试模式,这种空模块操作也不会给网站带来暴露信息的漏洞机会。 一般页面是空白处理。 黑客同样没有可乘之机。