如何正确使用define和!defined来保护页面免受直接访问?

时间:2017-08-23 11:23:55

标签: php

我试图通过直接访问来保护php文件。我在config.php中定义了“TESTCONST”常量。在其他文件中,我正在检查它是否由以下内容定义:

if(!defined('TESTCONST')) { header('Location: /'); }

但如果我在此上面包含config.php,这将无效,因为它将始终定义。那么我怎么能用define!定义来实现呢?这是一个结构:

的config.php:

    <?php

    define('TESTCONST', true);

    .*.. A lot of other configs ...*

其他一些php文件

    <?php

    require_once $_SERVER['DOCUMENT_ROOT'] . '/core/configs/config.php';

    if(!defined('TESTCONST')) { header('Location: /'); }

    .*.. A lot of other things ...*

P.S。注意:我必须包含config.php文件,因为它包含php文件中每个函数都需要的配置。

2 个答案:

答案 0 :(得分:1)

第一种方式:使用config.php

在允许直接访问的每个PHP脚本中,需要它:

require_once $_SERVER['DOCUMENT_ROOT'] . '/core/configs/config.php';

在每个要防止直接访问的PHP脚本中,请检查常量:

if(!defined('TESTCONST')) { header('Location: /'); }

(如果已定义,则config.php已经是必需的,因此不需要require_once

第二种方式:使用另一个脚本文件

为常量的定义创建另一个PHP文件(这里,我们称之为access.php

<?php define('TESTCONST', true);

在允许直接访问的每个PHP脚本中,需要它:

require_once $_SERVER['DOCUMENT_ROOT'] . '/core/configs/config.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/core/configs/access.php';

在每个要防止直接访问的PHP脚本中,请检查常量:

require_once $_SERVER['DOCUMENT_ROOT'] . '/core/configs/config.php';
if(!defined('TESTCONST')) { header('Location: /'); }

答案 1 :(得分:0)

如果您试图阻止Web访问某些php文件,那么它最好拒绝从服务器访问。对于apache,您可以使用.htaccess文件 如下设置文件:

/index.php
/protected/.htaccess
/protected/sensitive_script.php
/protected/not_not_access.php

和.htaccess

Deny from all