Je crée un nouveau site basé sur Drupal 7.
Le développement se fera sur un serveur accessible au public. Je travaille dans un environnement multi-sites.
Je voudrais bloquer totalement l'accès au site à toute personne et tout sauf aux utilisateurs autorisés. Y compris l'accès au nom du site, au thème, etc ...
J'ai utilisé Site sécurisé pour des tâches similaires auparavant. Il a fait une authentification de niveau http et a renvoyé 403 lorsque l'authentification a échoué. Il n'a pas de version D7.
Quelle serait la façon la plus simple de procéder?
Créez un module et collez le code suivant dans votre fichier de module:
<?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;
}
Cela utilise l'authentification HTTP et vérifie la base de données Drupal pour un nom d'utilisateur et un mot de passe valides).
Si vous avez des problèmes avec PHP CLI, Drush ou cron, vous pouvez ajouter le code suivant dans le hook:
// 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;
}
}
Si vous utilisez Drupal 7 le module Shield est disponible à cet effet. Il authentifie un seul utilisateur et mot de passe partagés.
Bouclier d'authentification PHP. Il crée un bouclier simple pour le site avec l'authentification Apache. Il masque les sites, si l'utilisateur ne connaît pas un simple nom d'utilisateur/mot de passe. Il gère Drupal comme un "jardin clos". Ce module vous aide à protéger votre site (dev) avec l'authentification HTTP.
Ajouter mod_auth
à la configuration d'Apache. Cela varie en fonction de votre hôte (Linux, Windows). Cela peut impliquer le téléchargement d'un module, cela peut impliquer simplement de décommenter une ligne dans votre httpd.conf
LoadModule auth_basic_module modules/mod_auth_basic.so
Créez un fichier .htpasswd à l'aide de la commande htpasswd
dans le dossier des fichiers binaires Apache
htpasswd -c user pass
Ajoutez le code suivant à votre <DIRECTORY>
instruction juste après votre règle de réécriture des URL propres:
AuthType Basic
AuthName "My Auth"
AuthUserFile \path\to\.htpasswd
Require valid-user
Redémarrez Apache. Profit.
Le PO a indiqué qu'il s'agissait d'un hébergement partagé. La plupart des hébergements partagés fournissent cPanel ou un autre panneau de contrôle, qui fera une simple protection par mot de passe .htaccess pour les répertoires.
J'ai protégé le répertoire de niveau supérieur d'un site en développement en utilisant cette méthode. Si vous utilisez cPanel pour protéger le répertoire, recherchez l'élément de menu "Password Protect Directories".
Si vous protégez le répertoire de niveau supérieur avant d'installer Drupal, cPanel créera un fichier .htaccess dans ce répertoire. Ajoutez ou ajoutez le contenu de ce fichier avec le fichier .htaccess que Drupal fournit. Si vous protégez le répertoire après l'installation de Drupal, je suis presque sûr que cPanel ajoutera simplement les lignes dont il a besoin à l'existant Drupal .htaccess fichier et ne pas déranger le reste du fichier. Assurez-vous simplement de conserver ces lignes si vous remplacez le fichier .htaccess lors d'une mise à niveau Drupal.
Utilisez l'authentification HTTP. La façon dont cela est fait avec Apache est documentée sur http://httpd.Apache.org/docs/2.2/howto/auth.html . Pour une installation multisite, la section <Directory> de <VirtualHost> serait un endroit approprié pour placer les directives de configuration.