Home Articles

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

Asked
Viewed 761 times
0

我试图保护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. Note: I have to include config.php file, because it contains configs, that are required by every function in php files.

2 Answers

  • 1

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

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

    在.htaccess中

    Deny from all
    
  • 0

    第一种方式:使用你的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: /'); }
    

Related