在开发过程中如何限制对网站的访问?


17

我正在创建一个基于Drupal 7的新站点。

开发将在可公开访问的服务器上。我在多站点环境中工作。

我想完全禁止除授权用户之外的任何人对网站的访问。包括访问站点名称,主题等...

之前,我曾使用Secure Site执行类似任务。它进行了http级身份验证,并在身份验证失败时返回403。它没有D7版本。

最简单的方法是什么?

Answers:


15

制作一个模块,并将以下代码粘贴到您的模块文件中:

<?php

/**
 * Implementation of hook_boot().
 *
 * Ask for user credentials and try to authenticate.
 */
function foo_boot() {
  require_once DRUPAL_ROOT . '/includes/password.inc';

  if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
    $query = "SELECT pass FROM {users} WHERE name = :name";
    $result = db_query($query, array(':name' => $_SERVER['PHP_AUTH_USER']));
    $account = new stdClass();
    foreach ($result as $row) {
      $account->pass = $row->pass;
    }
    if (isset($account->pass)) {
      if (user_check_password($_SERVER['PHP_AUTH_PW'], $account)) {
        return;
      }
    }
  }

  header('WWW-Authenticate: Basic realm="Development"');
  header('HTTP/1.0 401 Unauthorized');
  exit;
}

这使用HTTP身份验证,并在Drupal数据库中检查有效的用户名和密码。

如果您对PHP CLI,Drush或cron有任何问题,可以在挂钩中添加以下代码:

  // Allow cron through
  if (basename($_SERVER['PHP_SELF']) == 'cron.php') {
    return;
  }  

  // Allow PHP CLI/Drush through
  if (isset($_SERVER['argc'])) {
    if (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)) {
      return;
    }
  }

明智地讲,这将完全破坏您的Drush环境。如果您创建Drush解决方法,请多加指教。
Lester Peabody 2013年

完成后,添加了更广泛的方法,其中包括PHP CLI和cron.php。
巴特2013年

1
热。也是快速答案。如果可以的话,我会再次投票。
Lester Peabody 2013年

Drupal 8
DrCord

因此,为什么将其标记为Drupal7。–
Bart

4

如果您使用的是Drupal 7,则可以使用Shield模块。它验证单个共享用户和密码。

PHP身份验证盾。它使用Apache身份验证为站点创建一个简单的屏蔽。如果用户不知道简单的用户名/密码,它将隐藏网站。它把Drupal当作“围墙花园”。此模块可帮助您通过HTTP身份验证保护您的(开发)站点。


+1-不要重新发明轮子。这已经完成,并说明了不同的服务器配置和消耗。
亚当·巴尔萨姆

2

添加mod_auth到apache设置。这取决于您的主机(Linux,Windows)。这可能涉及下载模块,可能涉及取消注释httpd.conf中的一行。

 LoadModule auth_basic_module modules/mod_auth_basic.so

使用htpasswdapache binaries文件夹中的命令创建.htpasswd文件

 htpasswd -c user pass

<DIRECTORY>在您的干净URL重写规则之后,立即将以下代码添加到您的语句中:

AuthType Basic
AuthName "My Auth"
AuthUserFile \path\to\.htpasswd
Require valid-user

重新启动Apache。利润。


谢谢。我无法测试此解决方案,因为我该项目位于共享托管中,并且无法访问httpd.conf。但是,我想知道这是否可以在多站点环境中工作。
daphshez

您可以访问.htaccessdrupal根目录中的文件吗?我不确定100%,但是您可以尝试将其放入其中。请注意,巴特的解决方案似乎好很多了:)
Alex C

参见我对Dan的回复。我可以更改.htaccess,但不确定在多站点配置中它如何对我有帮助。
daphshez

尽管这是一个很好的解决方案,但是您无法使用它测试社交共享功能。
Sukhjinder Singh


0

OP评论说这是在共享主机上。大多数共享主机都提供cPanel或其他控制面板,这些面板将对目录执行简单的.htaccess密码保护。

我已经使用这种方法保护了正在开发中的站点的顶级目录。如果使用cPanel保护目录,请查找“密码保护目录”菜单项。

如果在安装Drupal之前保护顶层目录,则cPanel会在该目录中创建一个.htaccess文件。使用Drupal提供的.htaccess文件在该文件的内容之前或之后添加内容。如果在安装Drupal之后保护目录,我可以肯定cPanel会将其所需的行添加到现有Drupal .htaccess文件中,而不会干扰文件的其余部分。如果在Drupal升级期间替换.htaccess文件,只需确保保留这些行即可。


谢谢,我实际上也有shell访问权限。但是,当我想在多站点配置中仅保护一个站点时,可以使用htaccess(或httpd.conf)吗?
daphshez

抱歉,我错过了OP中的多站点评论。我不使用多站点,但是我查看了它是如何工作的。由于Drupal多站点使用单个顶级目录,因此这里的解决方案只适用于Bart。也许您还可以在维护模式下运行开发人员站点,以锁定除管理员以外的所有人。请参阅此处以获得一些提示。
丹·哈尔伯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.