इंस्टॉलेशन सुरक्षा संबंधी सुझाव
From LimeSurvey Manual
सामान्य
कृपया ध्यान दें, हम सुरक्षा संबंधी मुद्दों को बहुत गंभीरता से लेते हैं और तुरंत कार्रवाई करते हैं। इसलिए, यदि आपको LimeSurvey में किसी सुरक्षा समस्या की जानकारी है, तो कृपया हमारे बग ट्रैकर में बग रिपोर्ट दर्ज करके हमें बताएँ (कृपया बग की गंभीरता या श्रेणी 'security' चुनें)।
सुरक्षा संबंधी मुद्दों/कमज़ोरियों की रिपोर्ट करने के बारे में अधिक विवरण के लिए कृपया हमारी सुरक्षा नीति देखें।
वेब सर्वर प्रतिबंध
यदि आप apache का उपयोग करते हैं, तो LimeSurvey प्रतिबंध के लिए अलग-अलग htaccess फ़ाइलें शामिल करता है। सुनिश्चित करें कि आपने AllowOverride के साथ शामिल htaccess फ़ाइलों की अनुमति दी है।
अन्य वेब सर्वर के साथ या यदि आप AllowOverride None का उपयोग करना चाहते हैं, तो आपको यह करना होगा:
- (वैकल्पिक) application, protected, framework और themes/*/views में सभी फ़ाइलों तक पहुँच अक्षम करें
- उपयोगकर्ता द्वारा अपलोड की गई फ़ाइलों /upload/surveys/.*/fu_[a-z0-9] तक पहुँच अक्षम करें
- (वैकल्पिक) अपलोड डायरेक्टरी में निष्पादन योग्य फ़ाइलों तक पहुँच अक्षम करें
आप nginx का एक नमूना हमारे सामान्य FAQ में पा सकते हैं
Linux फ़ाइल अनुमतियाँ
यदि आप Linux सर्वर का उपयोग कर रहे हैं, तो अपने LimeSurvey इंस्टॉलेशन को सुरक्षित करने के लिए फ़ाइल अनुमतियाँ उचित रूप से सेट करना आवश्यक है।
Linux/*nix फ़ाइल अनुमतियों के बारे में बुनियादी तथ्य
Linux/*nix ऑपरेटिंग सिस्टम बहु-उपयोगकर्ता होता है। इसका मतलब है कि आपके व्यक्तिगत खाते के अलावा सिस्टम पर अन्य उपयोगकर्ता खाते भी मौजूद हो सकते हैं, और आपको ध्यान रखना चाहिए कि आप अन्य उपयोगकर्ताओं को कौन-सी अनुमतियाँ देते हैं।
ध्यान रखें कि 'root' खाते को आपकी फ़ाइलों तक पहुँचने की अनुमति हमेशा मिलेगी (चाहे आप कोई भी फ़ाइल अनुमतियाँ सेट करें), क्योंकि वह सुपर-एडमिन उपयोगकर्ता है।
वेब सर्वर (जो LimeSurvey चलाता है) भी किसी निश्चित पहचान (उपयोगकर्ता) के तहत चलता है। Linux पर यह आमतौर पर 'www', 'www-data' (Debian/Ubuntu पर), 'apache' या 'nobody' उपयोगकर्ता होता है। हालाँकि, कुछ होस्टिंग कंपनियाँ ऐसे सिस्टम (जैसे suexec) उपयोग करती हैं जो LimeSurvey स्क्रिप्ट को आपके व्यक्तिगत उपयोगकर्ता के साथ चलाना संभव बनाते हैं। बेशक, वेब सर्वर उपयोगकर्ता के पास LimeSurvey फ़ाइलें पढ़ने का अधिकार होना चाहिए। लेकिन LimeSurvey की केवल कुछ ही उप-डायरेक्टरी वेब सर्वर उपयोगकर्ता द्वारा लिखने योग्य होनी चाहिए।
स्वयं-प्रबंधित Linux सिस्टम पर फ़ाइल अनुमतियाँ सेट करना
यदि आप अपने वेब सर्वर और ऑपरेटिंग सिस्टम कॉन्फ़िगरेशन का प्रबंधन स्वयं करते हैं (आप भौतिक सर्वर के मालिक हैं या ऐसा वर्चुअल सर्वर किराए पर ले रहे हैं जिस पर आपके पास root एक्सेस है), तो आप नीचे दी गई सिफ़ारिशों पर विचार कर सकते हैं।
आप सबसे पहले अपनी LimeSurvey फ़ाइलों का मालिक और समूह सेट कर सकते हैं, ताकि फ़ाइल अनुमतियों की सेटिंग आसान हो जाए। एक संभावित रणनीति यह है कि LimeSurvey फ़ाइलों का मालिक अपने व्यक्तिगत उपयोगकर्ता नाम को और LimeSurvey फ़ाइलों का समूह वेब सर्वर समूह को सेट करें। आमतौर पर इस वेब सर्वर समूह में केवल वेब सर्वर खाता (और संभवतः कोई अन्य वेबमास्टर खाता) होता है। उदाहरण के लिए, यदि आपका उपयोगकर्ता नाम 'myaccount' है और वेब सर्वर उपयोगकर्ता 'apache' समूह में 'apache' है, तो शेल एक्सेस से आप यह कमांड उपयोग कर सकते हैं: $ chown -R myaccount:apache limesurvey/। इसके बाद फ़ाइलों और उप-डायरेक्टरी की अनुमतियाँ सेट करें।
स्क्रिप्ट के ठीक से काम करने के लिए कुछ डायरेक्टरी में लिखने की पहुँच आवश्यक है:
- एप्लिकेशन कॉन्फ़िगरेशन सेटिंग सहेजने के लिए /limesurvey/application/config डायरेक्टरी को Read & Write चाहिए
- /limesurvey/tmp डायरेक्टरी और उसकी उप-डायरेक्टरी का उपयोग इम्पोर्ट/अपलोड के लिए होता है और इन्हें आपके वेब सर्वर के लिए Read & Write पर सेट किया जाना चाहिए
- upload/ डायरेक्टरी और उसकी सभी उप-डायरेक्टरी को भी चित्र और मीडिया फ़ाइलें अपलोड करने में सक्षम बनाने के लिए Read & Write अनुमतियाँ दी जानी चाहिए
- अन्य सभी डायरेक्टरी और फ़ाइलें Read Only पर सेट की जा सकती हैं
होस्टेड वेब सर्वर पर फ़ाइल अनुमतियाँ सेट करना
होस्टेड वातावरण में किसी वेब एप्लिकेशन को सुरक्षित करने की कोई मानक प्रक्रिया बनाना कठिन है, क्योंकि होस्टेड वातावरण कई मायनों में अलग-अलग होते हैं।
प्रबंधित सर्वर की स्थिति में, स्क्रिप्ट के ठीक से काम करने के लिए सर्वर को कुछ डायरेक्टरी में लिखने की पहुँच चाहिए:
- /limesurvey/tmp डायरेक्टरी का उपयोग इम्पोर्ट/अपलोड के लिए होता है और इसे आपके वेब सर्वर के लिए Read & Write पर सेट किया जाना चाहिए
- upload/ डायरेक्टरी और उसकी सभी उप-डायरेक्टरी को भी चित्र और मीडिया फ़ाइलें अपलोड करने में सक्षम बनाने के लिए आपके वेब सर्वर के लिए Read & Write चाहिए
- अन्य डायरेक्टरी और फ़ाइलें Read Only पर सेट की जानी चाहिए
- आपके वेब सर्वर कॉन्फ़िगरेशन के आधार पर, लिखने योग्य फ़ोल्डरों को वेब सर्वर के लिए लिखने योग्य बनाने हेतु आपको उनके अधिकार chmod से 755 या 777 करने पड़ सकते हैं। पहले 755 आज़माएँ; यदि यह काम न करे, तो 777 पर 'अपग्रेड' करें
- आप config.php की अनुमतियाँ 750 पर सेट करके अन्य उपयोगकर्ताओं की पढ़ने की पहुँच हटाने का भी प्रयास कर सकते हैं - यदि यह काम न करे, तो 755 पर 'अपग्रेड' करें
Windows फ़ाइल अनुमतियाँ
यदि आप Windows सर्वर का उपयोग कर रहे हैं, तो आपको सुनिश्चित करना चाहिए कि admin फ़ोल्डर वेब सर्वर प्रक्रिया के मालिक को इस डायरेक्टरी में फ़ाइलें लिखने की अनुमति देता है। शेष फ़ाइलें केवल-पढ़ने और निष्पादन (execute) पर सेट की जा सकती हैं।
अन्य सुरक्षा मुद्दे
निम्नलिखित केवल सिफ़ारिशें हैं। सामान्यतः LimeSurvey इन अतिरिक्त उपायों के बिना भी बहुत सुरक्षित है। हालाँकि, यदि आप अत्यंत संवेदनशील डेटा एकत्र करते हैं, तो थोड़ी अतिरिक्त सुरक्षा मददगार हो सकती है:
SSL का उपयोग
हम संवेदनशील सर्वेक्षण डेटा के लिए आमतौर पर SSL के उपयोग की सिफ़ारिश करते हैं। आप आमतौर पर अपने वेब सर्वर को सही ढंग से कॉन्फ़िगर करके और SSL प्रमाणपत्र का उपयोग करके SSL सक्षम करते हैं। यदि आपने SSL सक्षम किया है, तो आपको LimeSurvey की वैश्विक सेटिंग्स से हर समय SSL लागू करना चाहिए। इसके अतिरिक्त, आप config.php में संबंधित विकल्प को संपादित करके केवल 'secure' कुकीज़ का उपयोग करने के लिए सेट कर सकते हैं।
config.php फ़ाइल तक पहुँच
/application/config/config.php फ़ाइल में आपके डाटाबेस सर्वर के लिए उपयोगकर्ता का नाम और पासवर्ड होता है। इससे कुछ सुरक्षा संबंधी जोखिम उत्पन्न होते हैं, विशेष रूप से तब जब आप ऐसे लॉगिन का उपयोग कर रहे हों जिसके पास आपके डाटाबेस की उच्च-स्तरीय व्यवस्थापक पहुँच हो। यदि किसी त्रुटि के कारण इस PHP फ़ाइल की सामग्री उपयोगकर्ता के ब्राउज़र को लौटा दी जाए, तो आपका डाटाबेस पासवर्ड और अन्य विवरण असुरक्षित हो सकते हैं (हालाँकि, यह परिदृश्य बहुत ही असंभावित है)। जोखिम को कम करने का सबसे अच्छा तरीका एक ऐसा विशिष्ट लॉगिन बनाना है जिसके पास केवल आपके LimeSurvey डाटाबेस के लिए विशिष्ट अधिकार हों।
इस जानकारी को सुरक्षित रखने का एक और तरीका यह है कि /application/config/config.php फ़ाइल की जानकारी को किसी गैर-वेब डायरेक्टरी में रखा जाए, यानी Apache उपयोगकर्ताओं के लिए यह htdocs (जिसे public_html या www फ़ोल्डर भी कहा जाता है) के ऊपर की डायरेक्टरी है। मूल रूप से, आप config.php का उपयोग करेंगे, लेकिन उसमें केवल एक पंक्ति होगी - ऐसी पंक्ति जो वास्तविक कॉन्फ़िगरेशन जानकारी वाली फ़ाइल को शामिल करती है (उदाहरण: <?php return include("/home/hostfolder/safedata/configreal.php"); ?>)। /application/config/config.php से सारी वास्तविक कॉन्फ़िगरेशन जानकारी हटाएँ और उसे दूसरी फ़ाइल (configreal.php) में पेस्ट करें, जिसका उल्लेख /application/config/config.php फ़ाइल में है। यह दूसरी फ़ाइल किसी गैर-वेब डायरेक्टरी में स्थित होनी चाहिए। तब /application/config/config.php में डाटाबेस पासवर्ड आदि नहीं होंगे - केवल उस फ़ाइल का नाम होगा जिसमें डाटाबेस की जानकारी होती है।
इससे उन सभी अन्य फ़ाइलों को बदलने की आवश्यकता नहीं पड़ती जो /application/config/config.php को शामिल करती हैं, क्योंकि config.php उन्हें उस कॉन्फ़िगरेशन फ़ाइल की ओर 'पुनर्निर्देशित' कर देती है जो किसी गैर-वेब डायरेक्टरी में स्थित है और जिसमें सारी वास्तविक कॉन्फ़िगरेशन जानकारी होती है।
साथ ही, डिफ़ॉल्ट उपयोगकर्ता के रूप में "admin" या "administrator" का उपयोग न करें। अपने MySQL डाटाबेस (या उस डाटाबेस) में जाएँ जिसमें आपने LimeSurvey स्थापित किया है और डिफ़ॉल्ट उपयोगकर्ता का नाम "admin" अपनी पसंद के किसी भी नाम (जैसे "admin_xyz") में बदल दें। अब व्यवस्थापक के नए उपयोगकर्ता नाम का अनुमान लगाना बहुत कठिन होगा। याद रखें, यह उन दो चरों में से एक है जिनका उपयोग घुसपैठिए पहुँच प्राप्त करने के लिए कर सकते हैं। व्यवस्थापक का पासवर्ड दूसरा चर है। इसलिए दोनों को अत्यंत सावधानी से चुनें।
कंटेंट सिक्योरिटी पॉलिसी (CSP)
अस्वीकरण - यहाँ दी गई CSP केवल एक उदाहरण है और इसे जस का तस उपयोग करने के लिए नहीं है। यह केवल एक प्रारंभिक बिंदु है और आपको इसे अपनी आवश्यकताओं के अनुसार अनुकूलित करना ज़रूरी है तथा इसका पूरी तरह परीक्षण करना चाहिए।
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" "expr=%{CONTENT_TYPE} =~ m#text\/(html|javascript)|application\/pdf|xml#i"
</IfModule>