2010-09-16 15 views
6

मैंने कई PHP वेब सेवाएं लिखी हैं जहां मैं यूआरएल के माध्यम से तर्कों में गुजरता हूं। अनधिकृत पहुंच को रोकने के लिए, मैं एक तर्क के रूप में एक अद्वितीय कुंजी में गुजरता हूं। मैं एचटीटीपीएस के माध्यम से PHP फ़ाइल को कॉल करता हूं, और मुझे आश्चर्य है कि अगर कोई तरीका है तो मैं स्क्रिप्ट को चलने से रोक सकता हूं यदि HTTPS का उपयोग नहीं किया जाता है।अगर कॉलर HTTPS का उपयोग नहीं कर रहा है तो मैं PHP फ़ाइलों तक पहुंच कैसे रोक सकता हूं?

+2

ध्यान दें कि यदि आप ब्राउज़र को अपनी सेवा में कुछ गुप्त टोकन भेज रहे हैं, तो यह उतना ही नहीं है जितना सर्वर स्वीकार करता है कि आपको चिंता करनी चाहिए, लेकिन ग्राहक क्या भेजता है। यदि आपका सर्वर उसी पते पर सादे HTTP में भी सुन रहा है और क्लाइंट गलती से अनुरोध करता है, तो इस बार एचटीटीपीएस पर (हम सुरक्षित कुकीज़ का उपयोग न करने जैसी समान समस्या) पर हमलावर द्वारा इसे अवरुद्ध और पुन: उत्पन्न किया जा सकता है। – Bruno

+0

यह भी देखें http://stackoverflow.com/a/28891745/632951 – Pacerier

उत्तर

8
थोड़ा विषय बंद

, लेकिन आप अपाचे httpd और mod_ssl साथ PHP का उपयोग कर रहे हैं, आप .htaccess में या निर्देशिका विन्यास में SSLRequireSSL निर्देश रखकर फ़ाइलें (और PHP स्क्रिप्ट) पर SSL पहुंच मजबूर कर सकते हैं।

+1

+1। उस पते पर पोर्ट 80 को भी सुनना बेहतर होगा। – Wrikken

+0

आपकी मदद के लिए धन्यवाद। मैं इसे एक शॉट दूंगा। – Quentamia

3
if(empty($_SERVER['HTTPS'])) { 
    // .... 
    exit; 
} 
+0

यह [** काम नहीं करता **] (http://php.net/manual/en/reserved.variables.server.php#refsect1 Ires पर -reserved.variables.server-indices)। रूट पर समस्या को हल करने, – Pacerier

0

यदि आप अपाचे का उपयोग कर रहे हैं, तो आप HTTP अनुरोधों को http https को रीडायरेक्ट करने के लिए mod_rewrite का उपयोग कर सकते हैं।

उदा।

RewriteCond %{HTTPS} !=on 
RewriteRule ^account(.*) https://%{SERVER_NAME}/account$1 [R=301,L] 

यह http://domain/accounthttps://domain/account को

+0

यह यूआरएल (और इसके गुप्त टोकन) को फिर से लिखने से पहले सादे HTTP सर्वर पर भेजने से कैसे रोकता है? – Bruno

+0

@ ब्रूनो: सच है, यह गुप्त टोकन को भेजने से नहीं रोकता है। गलत उत्तर :) एसटीएस + लिंक के बारे में बात करने के लिए – letronje

1

स्पष्ट करने के लिए पुनर्निर्देश:: यह हम क्या उपयोग है आप चाहते हैं कि एक ग्राहक एक यूआरएल एक गैर एन्क्रिप्टेड कनेक्शन पर एक गुप्त टोकन युक्त फोन नहीं करता है, यह सही है ? यदि ऐसा है, तो समस्या मुख्य रूप से आपके साथ नहीं है, बल्कि ग्राहक के ब्राउज़र के साथ है। यदि आप अभी तक एक का उपयोग नहीं कर रहे हैं, तो आप क्लाइंट को एक सुरक्षित कनेक्शन पर रीडायरेक्ट कर सकते हैं, लेकिन यदि आप ऐसा करते हैं तो भी क्लाइंट ने पहले ही एक असुरक्षित, अवरोधनीय अनुरोध अपने सर्वर पर रीडायरेक्ट करने से पहले किया है!

मोज़िला इस समस्या को हल करने का प्रयास कर रहा है। फ़ायरफ़ॉक्स 4 के रूप में एक सर्वर एक Strict-Transport-Security हैडर जो बाद में एन्क्रिप्ट न किए पहुँच पाएगा भेज सकते हैं (हालांकि स्पष्ट रूप से शीर्ष लेख से पहले एन्क्रिप्ट न किए पहुंच अभी भी हो सकता है भेजा गया था।)

Further reading at hacks.mozilla.org

+0

+1 – Bruno

0

आप का जवाब सर्वर रोका जा सकता है एक अनएन्क्रिप्टेड अनुरोध, लेकिन आप क्लाइंट को इसे भेजने से नहीं रोक सकते हैं, जो पासवर्ड सुरक्षा के लिए उतना ही बुरा है। और यह यूआरएल में एक गुप्त टोकन डालने से अब तक की सबसे बुरी समस्या नहीं है: यह ब्राउज़र इतिहास में बनी हुई है, जब उपयोगकर्ता आपकी साइट छोड़ देता है, और उपयोगकर्ता द्वारा देखी जाने वाली किसी भी वेबसाइट पर ब्रूट- :visited सीएसएस छद्म-वर्ग के माध्यम से बल या शब्दकोश हमला। सब कुछ, यह एक बहुत ही भयानक विचार है - आप केवल एसएसएल-केवल कुकीज़ का उपयोग बंद कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे