在服务器上保护PHP脚本的最佳方式


The best way to secure PHP script on the server

在服务器上保护PHP脚本以允许任何人运行它的最佳(最简单但高效)方法是什么?任何获得我的脚本URL地址的人都可以在我的服务器上运行该脚本,这可能会导致(对我来说)不必要的操作。我该如何解决这个问题?如果我要在脚本条件开始时添加if($pass == 'mySuperSecretPass') { ... },那么读取代码并为$pass变量获得正确的值是没有问题的。

对不起,我的英语。非常感谢。

您是否考虑过使用Apache.htaccess?(请注意,您需要启用AllowOverride。)

可以阻止对某些URL的访问并提供密码保护。

AuthType Basic
AuthName "Authentication Required"
AuthUserFile "/etc/htpasswd/.htpasswd"
Require valid-user

要创建.htpasswd文件,请使用此工具:http://www.htaccesstools.com/htpasswd-generator/

此外,您可以blok IP和此工具:http://www.htaccesstools.com/block-ips/

看看这是否有帮助:https://wiki.apache.org/httpd/PasswordBasicAuth

如果服务器应该是唯一一个使用内部方法访问脚本的服务器,则可以使用.htaccess规则为其他所有人隐藏/阻止该文件。

RedirectMatch 404 "/('/full'/path'/to'/restrictedFile'.php|'/path'/to'/restrictedFolder)"

这会将所有访问/full/path/to/restrictedFile.php和/path/to-restrictedFolder的人重定向到您的错误404页面
脚本根本无法打开
服务器在访问本地文件时不遵守.htaccess规则,因此服务器可以运行它。

对于IIS:

这是一个页面,描述了我已经回答的内容,但针对IIS而非apache。

总体思路是:

<configuration>
    <location path="glimpse.axd">
        <system.webServer>
            <httpErrors errorMode="Custom">
                <remove statusCode="403" />
                <error statusCode="403" path="/Errors/NotFound" responseMode="ExecuteURL" />
            </httpErrors>
        </system.webServer>
    </location>
</configuration>

我不习惯使用IIS配置和web.config文件,所以我建议您阅读我链接到的页面,您可能会知道如何实现它。

这就是我所做的,一个具有自动登录功能的非常简单的登录。首先,我有一个静态登录,在本例中为usr=username。我也可以添加密码或只接受某个IP地址。我将其保存在一个名为login.php的文件中,并将其包含在必要的脚本中。

如果登录设置为使用用户名设置cookie,有效期为1年。不需要每次都从这台计算机登录!

如果存在cookie,则将会话设置为logged_in=true

session_start();
if ( isset( $_REQUEST['usr'] ) ) {
    if ( $_REQUEST['usr'] == 'username' ) {
        setcookie( 'usr', 'username', time() + 3600 * 24 * 730, '/', $_SERVER['SERVER_NAME'] );
    } else {
        setcookie( 'usr', '', time() - 3600 );
        unset( $_COOKIE['usr'] );
    }
}
if ( isset( $_COOKIE['usr'] ) && $_COOKIE['usr'] == 'username' ) {
    setcookie( 'usr', 'username', time() + 3600 * 24 * 730 );
    $_SESSION['logged_in'] = true;
} else {
    $_SESSION['logged_in'] = false;
}

现在,在我的代码中,我测试了中的logged_in

if ( $_SESSION['logged_in'] ) {
    // Do some stuff
} else {
    header( 'Location: http://www.google.com' );
    exit;
}

若用户未登录,请将其重定向到另一个页面!我不使用任何形式或东西。第一次访问页面时,我是这样做的:http://www.myserver.com/?usr=username

这不是最大限度的安全性,而是一种防止窥探的简单方法。

如果你需要一个非常安全的登录,忘记cookie和自动登录,转移到SSL加密的服务器(https://)。