【问题标题】:The best way to secure PHP script on the server [closed]在服务器上保护 PHP 脚本的最佳方法 [关闭]
【发布时间】:2015-12-02 13:30:23
【问题描述】:

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

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

【问题讨论】:

  • 如果您想使用某种身份验证和/或授权机制,网上有 许多 示例。即使您提供的过度简化的示例(硬编码密码)也可以在足够简单的场景中完成这项工作。您是否尝试使用过这样的密码?那次尝试以什么方式不成功
  • - 添加到 PHP 页面的顶部
  • @LuckyChingi 这几乎不是一种保护。
  • @arkascha 你有什么建议?

标签: php security server


【解决方案1】:

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

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

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

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

此外,您还可以阻止 IP,并且此工具: http://www.htaccesstools.com/block-ips/

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

【讨论】:

    【解决方案2】:

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

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

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

    对于 IIS:

    This 是描述我已经回答但针对 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 文件,所以我建议你阅读我链接到的页面,你可能会知道如何实现它。

    【讨论】:

    • 我真的很喜欢 - 谢谢。 .htaccess 在 Windows 服务器上可用吗?
    • 为我工作...&lt;rule name="PHP redirect" stopProcessing="true"&gt; &lt;match url="\.php$" ignoreCase="true" /&gt; &lt;action type="Redirect" url=" ... " redirectType="Permanent" /&gt; &lt;/rule&gt;
    • @JanChalupa 如果这些服务器使用 apache,是的。如果您使用 IIS,则必须改用 web.config 文件。
    • 我还能通过 AJAX 调用这些安全的 PHP 脚本吗?我觉得我不是。
    【解决方案3】:

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

    如果设置了登录,则设置一个带有用户名的 cookie,有效期为 1 年。无需每次都从这台电脑登录!

    如果 cookie 存在,将 session 设置为 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://)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多