define常量怎么防止地址栏直接访问后台文件的

学无止境-逆流而上 2012-04-06 01:40:49
define是不能跨页面的,但是最近看一个开源的PHP项目它是这样的:比如a.php :直接define('IN_TM', TRUE);
b.php直接<?php
if(!defined('IN_TM'))
{
exit('Access Denied');
}

if($_SESSION["admin"]!="Silence")
{
include template('login.htm');
exit;
}。。。。。
就完全没用include包含!但是我这样模拟的时候define是不能跨页面的!它还有什么设置使得'IN_TM'在另一个页面有效吗?
类似于DISCUZ的防止地址栏直接访问后台文件又是怎么实现的呢?
...全文
192 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
coder 2012-04-07
  • 打赏
  • 举报
回复
肯定是在入口文件定义。不是从入口文件进入的额,就表示是非法访问
SHANDIANDIAN 2012-04-07
  • 打赏
  • 举报
回复
其实这个a.php 已经被包含到其他页面去了,只是这个页面没include而已,include在其他页面
xuzuning 2012-04-07
  • 打赏
  • 举报
回复
但是我这样模拟的时候define是不能跨页面的!它还有什么设置使得'IN_TM'在另一个页面有效吗?

b.php
<?php
if(!defined('IN_TM'))
{
exit('Access Denied');
}

a.php
<?php
define('IN_TM', TRUE);
include 'b.php';

访问 b.php 必须通过访问 a.php 完成,否则就 Access Denied
lala5201 2012-04-07
  • 打赏
  • 举报
回复
discuz那个是防止用url直接访问部分php文件,因为这些文件是做为程序的一部分的,如果被单独请求时没有意义的,比如某个类文件。如何实现的,你给的代码中就已经说明了
lala5201 2012-04-07
  • 打赏
  • 举报
回复
这个肯定有用include包含,只是你没看到
xuzuning 2012-04-06
  • 打赏
  • 举报
回复
如果你能确认在判断之前没有文件被显式的嵌入的话
那么他就是利用了 php.ini 中的 auto_prepend_file

其实只要项目能运行, 你只需 打印出 get_included_files 的结果就知道什么文件被嵌入了

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧