2013-12-08 5 views
7

मैं एक प्रश्नोत्तरी साइट का निर्माण कर रहा हूं, जहां मैं प्रत्येक प्रश्न के बाद $_SESSION एस में कुछ चर(जवाब देने के लिए समय, जिसे उत्तर-विकल्प चुना गया था आदि) संग्रहीत करता है - जहां मैं केवल उन आंकड़ों को डीबी में डालता हूं उपयोगकर्ता प्रश्नोत्तरी खत्म करने के बाद।

मैंने कुछ if को यह जांचने के लिए लागू किया है कि $_SESSION चर संख्याएं हैं (is_numeric())। इसके अलावा, मैं लंबाई (strlen()) आदि

  • मान्य लेकिन वहाँ ऐसा करने के लिए एक कारण है?
  • या यह real_escape_string() पर केवल को MySQL में संग्रहीत करने से पहले पर्याप्त है?
  • यदि कई उपयोगकर्ता भी होंगे, तो क्या यह सर्वर पर एक बड़ा भार नहीं लगाएगा?
+1

यदि आप एसक्यूएल इंजेक्शन को रोकने में रुचि रखते हैं, तो आपको पीडीओ या माइस्क्ली को पैरामीट्रिज्ड स्टेटमेंट्स के साथ उपयोग करना चाहिए। इस तरह, कोई फर्क नहीं पड़ता कि आप क्या डालेंगे, इसका मूल्यांकन कभी भी MySQL कोड के रूप में नहीं किया जाएगा। – jpodwys

+0

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

+0

@ joe007 हां, एक्सएसएस की तरह। –

उत्तर

8

नहीं, क्योंकि आप उन्हें स्वयं सेट करते हैं।

बेशक आप उन्हें उपयोगकर्ता इनपुट से सीधे घटाते हैं, इस मामले में उपयोगकर्ता इनपुट के प्रत्येक बिट पर लागू होने वाले सटीक नियम लागू होते हैं।

$_SESSION चर के बारे में कुछ खास नहीं है। जब आप इसे उपयोगकर्ता से प्राप्त करते हैं तो आपको उपयोगकर्ता इनपुट को स्वच्छ करने की आवश्यकता होती है - भले ही आप इसे किसी डेटाबेस, सत्र, या अन्य में संग्रहीत करते हैं।

जेपीओडी की तरह सुझाव दिया गया - एसक्यूएल प्रश्नों का प्रदर्शन करते समय - हमेशा एसक्यूएल इंजेक्शन को कम करने वाले तैयार प्रश्नों का उपयोग करें।

+1

हां, लेकिन मान लें कि मैंने _page1_ पर $ _SESSION चर सेट किया है, तो यह _page2_ पर पढ़ा जाता है। अगर मैं इसे _page1_ पर sanitize करता हूं और _page2_ पर इसकी परवाह नहीं करता है, तो हैकर/क्रैकर कुछ सॉफ़्टवेयर का उपयोग करके केवल $ _SESSION के माध्यम से $ 2._SESSION के माध्यम से दुर्भावनापूर्ण कोड/सामान भेज सकता है? – joe007

+2

@ joe007 फ्रंट एंड यूजर के पास '$ _SESSION' तक कोई सीधी पहुंच नहीं है, _you're_ जो वहां चीजें डाल रहा है। यदि आप इनपुट _ sanfore_ को sanitize करते हैं तो आप इसे सत्र चर में डालते हैं (और आप हमेशा ऐसा करते हैं _) यह जादुई रूप से असुरक्षित होने वाला नहीं है। अधिक आम तौर पर, आपको क्लाइंट से धार्मिकता से प्राप्त होने वाली हर चीज़ को स्वच्छ करना चाहिए और बिना दया के - इसे स्पष्ट, सुसंगत, स्पष्ट और एक ही स्थान पर होना चाहिए। इसमें कोई संदेह नहीं होना चाहिए कि डेटा गंदा है और कौन सा डेटा साफ़ है। –

+3

ओह ठीक है मुझे नहीं पता था कि उपयोगकर्ता किसी भी तरह $ _SESSION को फिर से लिख नहीं सकता है। आपका बहुत बहुत धन्यवाद :) – joe007

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