विकास के दौरान साइट तक पहुंच कैसे प्रतिबंधित करें?


17

मैं एक नया Drupal 7 आधारित साइट बना रहा हूं।

विकास एक सर्वर पर होगा जो सार्वजनिक रूप से सुलभ है। मैं एक बहु-साइट वातावरण में काम कर रहा हूं।

मैं साइट पर किसी को भी और अधिकृत उपयोगकर्ताओं को पूरी तरह से ब्लॉक करना चाहता हूं। साइट का नाम, विषय, आदि तक पहुँच सहित ...

मैंने पहले भी इसी तरह के कार्यों के लिए सिक्योर साइट का इस्तेमाल किया था। इसने http-level प्रमाणीकरण किया और प्रमाणीकरण विफल होने पर 403 लौटाया। इसका D7 संस्करण नहीं है।

ऐसा करने का सबसे आसान तरीका क्या होगा?

जवाबों:


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 वर्कअराउंड बनाते हैं, तो मुझसे अतिरिक्त वृद्धि होती है।
लेस्टर पीबॉडी

किया, PHP CLI और cron.php शामिल है कि एक अधिक व्यापक दृष्टिकोण जोड़ा।
बार्ट

1
गरम। त्वरित उत्तर, भी। अगर मैं कर सकता तो मैं इसे फिर से वोट करता।
लेस्टर पीबॉडी

यह Drupal 8
DrCord

इसलिए इसे ड्रुपल 7 के रूप में क्यों टैग किया गया है
बार्ट

4

यदि आप Drupal 7 का उपयोग कर रहे हैं तो शील्ड मॉड्यूल इस उद्देश्य के लिए उपलब्ध है। यह एक एकल, साझा उपयोगकर्ता और पासवर्ड को प्रमाणित करता है।

PHP प्रमाणीकरण ढाल। यह अपाचे प्रमाणीकरण के साथ साइट के लिए एक सरल ढाल बनाता है। यह साइटों को छुपाता है, अगर उपयोगकर्ता को एक साधारण उपयोगकर्ता नाम / पासवर्ड नहीं पता है। यह ड्रुपल को "दीवार वाले बगीचे" के रूप में संभालता है। यह मॉड्यूल HTTP प्रमाणीकरण के साथ आपकी (देव) साइट की सुरक्षा करने में आपकी मदद करता है।


+1 - पहिया को सुदृढ़ न करें। यह पहले से ही किया गया है और विभिन्न सर्वर कॉन्फ़िगरेशन और ड्रश के लिए जिम्मेदार है।
एडम बालसम 15

2

mod_authअपाचे सेटअप में जोड़ें । यह आपके होस्ट (linux, windows) पर निर्भर करता है। इसमें एक मॉड्यूल डाउनलोड करना शामिल हो सकता है, इसमें आपके httpd.conf में सिर्फ एक लाइन को अनइंस्टॉल करना शामिल हो सकता है

 LoadModule auth_basic_module modules/mod_auth_basic.so

htpasswdApache बायनेरी फोल्डर में कमांड का उपयोग कर एक .htwwd फाइल बनाएं

 htpasswd -c user pass

<DIRECTORY>अपने स्वच्छ URL को फिर से लिखने के नियम के बाद अपने कथन में निम्नलिखित कोड जोड़ें :

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

फिर से शुरू करें। फायदा।


धन्यवाद। मैं इस समाधान का परीक्षण नहीं कर सकता क्योंकि यह परियोजना साझा होस्टिंग में है और मेरे पास httpd.conf तक पहुंच नहीं है। मुझे आश्चर्य है कि अगर यह एक बहु-साइट वातावरण में काम कर सकता है।
daphshez

क्या आपके पास .htaccessड्रुपल रूट में फ़ाइल तक पहुंच है ? मैं 100% निश्चित नहीं हूं, लेकिन आप इसे वहां डालने का प्रयास कर सकते हैं। ध्यान रखें, बार्ट का समाधान बहुत बेहतर लगता है :)
एलेक्स सी

दान के लिए मेरा जवाब देखें। मैं .htaccess को बदल सकता हूं, लेकिन मुझे यकीन नहीं है कि यह मल्टी-साइट कॉन्फ़िगरेशन में मेरी मदद कैसे करता है।
daphshez

हालांकि यह अच्छा समाधान है लेकिन आप इसके साथ सामाजिक साझाकरण सुविधाओं का परीक्षण नहीं कर सकते।
सुखजिंदर सिंह

0

HTTP प्रमाणीकरण का उपयोग करें। यह कैसे किया जाता है अपाचे के साथ http://httpd.apache.org/docs/2.2/howto/huth.html पर प्रलेखित किया गया है । मल्टीसाइट इंस्टॉलेशन के लिए, <डायरेक्टरी> सेक्शन <VirtualHost> का कॉन्फ़िगरेशन निर्देश डालने के लिए एक उपयुक्त स्थान होगा।


0

ओपी ने टिप्पणी की है कि यह साझा होस्टिंग पर है। अधिकांश साझा होस्टिंग cPanel या कुछ अन्य नियंत्रण कक्ष प्रदान करती है, जो निर्देशिकाओं के लिए सरल .htaccess पासवर्ड सुरक्षा करेगी।

मैंने इस पद्धति का उपयोग करके विकास के तहत किसी साइट की शीर्ष-स्तरीय निर्देशिका की रक्षा की है। यदि आप निर्देशिका को सुरक्षित करने के लिए cPanel का उपयोग करते हैं, तो "पासवर्ड प्रोटेक्टी डायरेक्टरीज़" मेनू आइटम देखें।

यदि आप Drupal को स्थापित करने से पहले शीर्ष-स्तरीय निर्देशिका की सुरक्षा करते हैं, तो cPanel उस निर्देशिका में एक .htaccess फ़ाइल बनाएगा। Drupal द्वारा प्रदान की गई .htaccess फ़ाइल के साथ उस फ़ाइल की सामग्री को जोड़ या प्रीपेन्ड करें। यदि आप Drupal को स्थापित करने के बाद डायरेक्टरी की सुरक्षा करते हैं, तो मुझे पूरा यकीन है कि cPanel सिर्फ मौजूदा Drupal .htaccess फ़ाइल में अपनी ज़रूरत की लाइनें जोड़ देगा और बाकी फ़ाइल को डिस्टर्ब नहीं करेगा। यदि आप एक Drupal नवीनीकरण के दौरान .htaccess फ़ाइल को प्रतिस्थापित करते हैं, तो सुनिश्चित करें कि आप उन पंक्तियों को संरक्षित करते हैं।


धन्यवाद, मेरे पास वास्तव में शेल एक्सेस भी है। लेकिन क्या मैं htaccess (या httpd.conf, इस मामले के लिए) का उपयोग कर सकता हूं, जब मैं मल्टी-साइट कॉन्फ़िगरेशन में केवल एक साइट की रक्षा करना चाहता हूं?
daphshez

क्षमा करें, मैं ओपी में बहु-साइट टिप्पणी से चूक गया। मैं मल्टी-साइट का उपयोग नहीं करता, लेकिन मैंने देखा कि यह कैसे काम करता है। चूंकि ड्रुपल मल्टी-साइट एक एकल शीर्ष-स्तरीय डायर का उपयोग करता है, यहां के समाधान, मुझे लगता है कि केवल बार्ट का काम करेगा। हो सकता है कि आप देव साइट को रखरखाव मोड में भी चला सकें, लेकिन सभी को लॉक करने के लिए लेकिन व्यवस्थापक। कुछ संकेत के लिए यहाँ देखें ।
डैन हैल्बर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.