एक कंपनी जो मैं काम करने के लिए काम कर रहा हूं, ने मुझे अपनी वेबसाइटों में से एक ले लिया और इसे किसी अन्य वेबसाइट का सबडोमेन बना दिया। फिर, उन्होंने मुझे अपने प्राथमिक डोमेन से अपने उप डोमेन में "लॉग इन/लॉग आउट" सत्र नियंत्रण बढ़ाने के लिए कहा।साइट सुरक्षा regex हैंडलर? (PHP)
ऐसा करने के बाद, मुझे लगता है कि नियंत्रण/प्रशासन के मुद्दे हैं। व्यक्तिगत पृष्ठों की उनकी बड़ी संख्या के कारण, और उनकी व्यापक निर्देशिका संरचना के कारण, उनके लिए लॉग इन-इन-स्टेटस के आधार पर रीडायरेक्ट करने के लिए उनके प्रत्येक पृष्ठ पर एक PHP स्निपेट जोड़ने के लिए भी शामिल है।
यहां मेरा समाधान है .. कृपया मुझे किसी भी समस्या या किसी और चीज के बारे में बताएं जो मुझे मदद करेगा।
- मैं mod_rewrite का उपयोग करने के लिए एक विशेष पेज (handler.php? REQUESTED_URL =) को subdomin पर हर अनुरोध को रीडायरेक्ट करने जा रहा हूँ।
मैं अपनी वेबसाइट पर "साइट अनुमति/प्रतिबंधित नियम" अनुभाग बनाने जा रहा हूं। इस अनुभाग में इस तरह के नियमों के साथ एक पाठ बॉक्स में शामिल होंगे:
+/weather/ ---> will allow anyone access to any url that contains "/weather/" somewhere within it, irregardless of logged-in status. -/weather/premium/ ---> will only allow access to a url that contains /weather/premium to logged-in users.
एक सरणी एक फ़ाइल rules.php जो इस तरह दिखेगा में संग्रहीत करने के लिए हो जाएगा ताकि उत्पादन:
$ruleList = array(); $ruleList[] = '+/weather/'; $ruleList[] = '-/weather/premium/';
हैंडलर में .php, यदि उपयोगकर्ता लॉग इन है, तो मैं उन्हें request.url पर अग्रेषित कर दूंगा। यदि उपयोगकर्ता लॉग इन नहीं है, तो मैं यह मानकर शुरू करूंगा कि प्रत्येक पृष्ठ उपयोगकर्ताओं में गैर-लॉग इन तक ही सीमित है। हैंडलर.पीपीअनुरोध_यूआर को पार्स करेगा और rules.php के खिलाफ इसे जांचने के लिए, यह देखने के लिए कि कोई स्पष्ट अनुमति सेट है या नहीं। फिर यदि नियम गैर-लॉग-इन पहुंच की अनुमति देता है, तो यह उपयोगकर्ता को request_url पर अग्रेषित करेगा, अन्यथा यह उन्हें लॉगिन पृष्ठ पर भेज देगा।
एक समस्या यह है मैं तुरंत देख सकते हैं, कि दिया जाता है कि Mod_rewrite
नियम handler.php के लिए हर अनुरोध भेज देंगे, मैं कैसे एक अनंत लूप से बचने हो?
क्या header("Location: ")
के अलावा कुछ विधि द्वारा पुनर्निर्देशन किया जाना चाहिए?
संपादित करें:
शीर्ष डोमेन के .htaccess फ़ाइल के अंदर (example.com) मैं कहा::
#Prevent catching requests for the sub1 subdomain
RewriteCond %{REQUEST_URI} ^sub1\.example\.com
RewriteRule .* – [L]
तो यहाँ मेरी संघर्ष के लिए एक अद्यतन है के अंदर .htaccesssub1.example.com सबडोमेन के लिए, मैंने निम्नलिखित जोड़ा:
IndexIgnore *
RewriteEngine On
RewriteBase /path/to/base
#Avoid infinite loop on outgoing requests
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{HTTP_REFERER} !^/?handler.php?$
RewriteCond %{REQUEST_URI} !^/?handler.php?$
#Check for cookie. Redirect to handler if not found. (not yet implemented)
#RewriteCond %{HTTP_COOKIE} !session_id
RewriteRule (.*)$ handler.php?requested_url=$1 [NC,L,QSA]
यहाँ हैंडलर है।php
<?php
$url = $_REQUEST['requested_url'];
//Check list of permissions. For now just assume permitted.
$permitted = true;
if ($url == "") $url = "http://sub1.example.com";
if ($permitted)
header("Location: ".$url);
header("Location: http://sub1.example.com");
?>
मैं इतने करीब मैं इसे का स्वाद ले सकते हैं। दुर्भाग्य से समय के लिए मुझे लगभग हर जगह "रीडायरेक्ट लूप" मिल रहा है। अगर कोई मुझे सही दिशा में एक झुकाव दे सकता है, तो मैं इसकी सराहना करता हूं!
यह भी जांचें http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html –
"प्रत्येक पृष्ठ पर एक स्निपेट जोड़ने के लिए" के रूप में, क्या आपने किया [auto_prepend_file] पर विचार करें (http://php.net/manual/en/ini.core.php#ini.auto-prepend-file)? – Leigh
ठीक है, जहां तक मैं आपके सेटअप को समझता हूं, आपको लॉगिन पृष्ठ केवल प्रतिबंधित रीडायरेक्ट लूप प्राप्त करना चाहिए यदि लॉगिन पृष्ठ को प्रतिबंधित पहुंच के रूप में वर्गीकृत किया गया है, है ना? तो शायद आपका नियम और यूआरएल पार्सिंग हिस्सा कुछ अप्रत्याशित करता है? –