使php文件对外界隐藏

Abh*_*waj 6 php mysql apache security

我的php网站有多个php文件,其中一些用于用户界面,其中一些是帮助文件(这些文件通过数据库相互通信以返回结果).现在我需要用户无法从他们的直接URL执行帮助文件.

e.g. mydomain.com/login.php   ---------- (Interface file, must be accessible to user)
     mydomain.com/login_handle.php   ----(Healper file, must not be accessible to user)
Run Code Online (Sandbox Code Playgroud)

所以我需要的是用户可以执行和浏览mydomain.com/login.php但必须能够执行mydomain.com/login_handle.php,而login.php和handle_login.php保持通信并且可以相互访问.谢谢,

编辑:对不起,但我正在使用共享主机,除了public_html之外没有其他文件夹.

Ja͢*_*͢ck 5

我会尝试的第一件事:

  1. 将包含的文件移到文档根目录之外

  2. 将包含的文件移动到另一个文件夹中,并使用进行保护.htaccess。或者,将您的包含文件重命名为结尾,.inc并基于此创建规则。

  3. 确保包含的文件不输出任何内容;这并不是很安全,但是如果您的文件仅包含函数,类定义等而没有产生任何输出,则它将仅显示一个空白页。

可以通过使用常量来实现这一点。

index.php

<?php

define('MY_CONSTANT', '123');

include('helper.php');
Run Code Online (Sandbox Code Playgroud)

helper.php

<?php

if (!defined('MY_CONSTANT')) { exit; }

// we were called from another file
// proceed
Run Code Online (Sandbox Code Playgroud)

编辑

上面的2号方法可以通过以下方法完成:

  1. 在下面创建一个文件夹public_html,例如includes/

  2. 将所有应包含的文件仅移到该文件夹​​中

  3. .htaccess内部添加以下内容:

    <FilesMatch "\.php$">
    Order allow, deny
    Deny from all
    </FilesMatch>
    
    Run Code Online (Sandbox Code Playgroud)

  • 您也可以测试`realpath($ _ SERVER ['SCRIPT_FILENAME'])!= __FILE__`。 (2认同)