2010-03-26 15 views
5

मैं सिर्फ यह जानना चाहता था कि लेखों को स्वीकार करने वाले वेब पेज को बनाने के दौरान मुझे कुछ बुनियादी PHP सुरक्षा तकनीकों का उपयोग करना चाहिए?PHP सुरक्षा प्रश्न?

मैं PHP के लिए बिल्कुल नया हूं और सोच रहा था कि जब तक मैं एक सुरक्षा विशेषज्ञ नहीं हूं तब तक किले को क्या पकड़ेंगे?

उत्तर

1

यह व्यापक है, शायद आपको इसे थोड़ा संकीर्ण करने का प्रयास करना चाहिए।

किस तरह की सुरक्षा? पासवर्ड के लिए? क्या आप कुछ सामान प्रतिबंधित करना चाहते हैं? एसक्यूएल इंजेक्शन? एचटीएमएल इंजेक्शन? क्रॉस डोमेन सुरक्षा?

+0

प्रस्तुत करने का कहना है की सुविधा देता है लोगों के नाम, सामग्री आदि जैसे डेटा। – pHp

0

पता करने के लिए बहुत कुछ है, और आपको जितनी जल्दी हो सके शुरू करना चाहिए।

एक के लिए, यदि आप लेख स्वीकार करते हैं (और शायद WYSIWYG का उपयोग करते हैं और HTML स्वीकार कर रहे हैं), सामग्री का विश्लेषण करने के लिए कुछ उपयोग करें और उन चीजों को तोड़ दें जो आपको XSS और इसी तरह के लिए कमजोर छोड़ सकते हैं।

एक उदाहरण HTML Purifier है।

5

उपयोगकर्ता द्वारा जेनरेट किए गए टेक्स्ट को स्वीकार करते समय विचार करने के लिए दो मोर्च हैं जिन्हें बाद में प्रदर्शित किया जाएगा।

सबसे पहले, आपको इंजेक्शन हमलों से अपने डेटाबेस की रक्षा करने की आवश्यकता है। इसके लिए एक सरल PHP फ़ंक्शन है: mysql_real_escape_string() फ़ील्ड मान के रूप में स्टोर करने के लिए इस स्ट्रिंग को पास करते समय आमतौर पर इंजेक्शन से अपने डेटाबेस की सुरक्षा के लिए पर्याप्त होगा।

वहां से, आपको अपने प्रदर्शन के बारे में सावधान रहना होगा, क्योंकि उपयोगकर्ता को HTML कोड अपलोड करने की अनुमति है, अन्य उपयोगकर्ताओं को पर उस कोड को प्रदर्शित होने पर बुरा काम कर सकता है। यदि आप सादे टेक्स्ट लेख कर रहे हैं, तो आप परिणामस्वरूप पाठ htmlspecialchars() कर सकते हैं। (आप शायद न्यूलाइन को
टैग में कनवर्ट करना चाहते हैं।) यदि आप इस साइट पर इस्तेमाल किए गए मार्कडाउन इंजन जैसे फॉर्मेटिंग समाधान का उपयोग कर रहे हैं, तो वे समाधान आमतौर पर इंजन के फ़ंक्शन के रूप में HTML स्वच्छता प्रदान करेंगे, लेकिन हो दस्तावेज पढ़ने और सुनिश्चित करने के लिए सुनिश्चित करें।

ओह, सुनिश्चित करें कि आप लेख सबमिट करने के लिए उपयोग किए गए अपने जीईटी/पोस्ट वैरिएबल को भी सत्यापित कर रहे हैं। यह कहने के बिना चला जाता है, और किए गए सत्यापन को आपकी साइट के तर्क के साथ क्या किया जा रहा है इसके अनुरूप होने की आवश्यकता होगी।

+0

ध्यान दें: मैं एक MySQL डेटाबेस मान रहा हूं, अन्य डेटाबेस प्रकारों के लिए समकक्ष कार्य हैं। –

+3

पैरामीटरेटेड प्रश्नों का उपयोग 'mysql_real_escape_string()' - http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements –

+1

mysql_real_escape_string() की बजाय किसी भी चीज़ की सुरक्षा नहीं करता है। यह केवल एक साधारण भागने वाला कार्य है, और उद्धरण के साथ संयुक्त होने पर ही काम करता है। तो, नियम "mysql_real_escape_string() ** के साथ अपने डेटा से बचें और ** उद्धरणों में संलग्न करें"। बाकी सब ठीक है। –

1

ठीक है, जैसा कि अन्य उत्तरों में उल्लिखित है, वहां कई अलग-अलग मोर्च हैं जिनमें आपकी PHP स्क्रिप्ट को समझौता किया जा सकता है।

यहां केवल एक जोड़े हैं:

तरीके प्रत्येक से निपटने के लिए की एक संख्या हैं। यहाँ कुछ चीजों को देखने की हैं:

0

यह Drupal या CakePHP की तरह एक रूपरेखा का उपयोग करके शुरू करने के लिए बुद्धिमान हो सकता है।इस तरह आप दोनों सुरक्षा को लागू करने के तरीके से सीख सकते हैं और इस तथ्य का लाभ उठा सकते हैं कि यह पहले से ही किया जा चुका है। सीखने की अवस्था आपके स्वयं के प्रमाणीकरण तंत्र को रोल किए बिना पर्याप्त खड़ी है।

-1

जब आपकी परियोजना सार्वजनिक उपयोग के लिए तैयार होती है, तो आमतौर पर त्रुटि_ रिपोर्टिंग (0) सेट करना एक अच्छा विचार है;

यह अधिक सुरक्षा प्रदान नहीं करेगा, लेकिन यह बुरे लोगों के लिए आपकी साइट के साथ संभावित सुरक्षा समस्याओं को खोजने में बहुत कठिन (आमतौर पर) बनाता है।

+0

भयानक सिफारिश। त्रुटि रिपोर्टिंग ** स्तर ** को भ्रमित न करें, जो त्रुटि रिपोर्टिंग ** गंतव्य ** के साथ जितना संभव हो उतना उच्च होना चाहिए, जिसे उत्पादन सर्वर पर लॉग ऑन करने के लिए स्विच से स्विच किया जाना चाहिए। –

+0

वैसे हाँ, मेरा विचार यह था कि नियमित उपयोगकर्ता को त्रुटि संदेश नहीं दिखाई देंगे। त्रुटि संदेशों के साथ क्या करना है, मैं अपने सभी निर्णय लेता हूं, लेकिन जैसा कि आपने कहा था, उन्हें स्टोर करना सबसे अच्छा है। – Mikk

0

शायद दो सुझावों केवल चयन और मायने रखता है बनाने के लिए आप और अधिक सुरक्षित वेबसाइटों

  • अपने डेटाबेस में दो उपयोगकर्ताओं को बनाने, केवल पढ़ने के लिए प्राप्त करने में मदद कर सकता है खाता, और खाते बारे में आप अपडेट, प्रविष्ट करता है या हटाता है क्या करना है जब ।
  • आप, डेटाबेस में डालने या हटाने के लिए आदानों स्वच्छ है जब, उपयोग mysql तैयार बयान या मूल्यों उस पोस्ट के माध्यम से आने या इस तरह से मिलता है पर जोर:

    if(!empty($_GET["integer_like_id_value"]){ 
        $integer_id_value = (int)$_GET["integer_like_id_value"]; 
    }else{ 
        // that stuff seems not to be legit, die application, log error ? whatever 
        die(); 
    } 
    
संबंधित मुद्दे