2010-06-03 10 views
5

क्या कोई पूर्व-निर्मित स्क्रिप्ट है जिसका उपयोग मैं PHP-MySQL के लिए सर्वर-साइड स्क्रिप्टिंग और जेएस इंजेक्शन को रोकने के लिए कर सकता हूं?सर्वर-साइड स्क्रिप्टिंग को रोकना, एक्सएसएस

मुझे सामान्य कार्यों जैसे HTMLentities, विशेष वर्ण, स्ट्रिंग प्रतिस्थापन इत्यादि के बारे में पता है, लेकिन क्या कोड या फ़ंक्शन का एक साधारण बिट है जो सब कुछ के लिए एक असफलता है?

कोई भी विचार बहुत अच्छा होगा। बहुत धन्यवाद :)

संपादित करें: कुछ सामान्य जो कुछ भी खतरनाक हो सकता है, यानी। संकेतों से अधिक/कम, अर्ध-कॉलन, शब्द "डीआरओपी" आदि जैसे?

मैं मूल रूप से बस सबकुछ को अल्फान्यूमेरिक को संपीड़ित करना चाहता हूं, मुझे लगता है ...?

+1

क्या आपका मतलब "सर्वर-साइड स्क्रिप्टिंग" के बजाय "_cross-site_ scripting" था या आप रिमोट कोड का जिक्र कर रहे थे I nclusion/निष्पादन? – janmoesen

+0

क्षमा करें, हाँ मैं – Tim

उत्तर

4

HTML स्ट्रीम के लिए जो कुछ भी डेटा नहीं है, उसे कभी भी आउटपुट न करें htmlspecialchars() के माध्यम से पारित किया गया है और आप कर रहे हैं। सरल नियम, पालन करने में आसान, किसी भी XSS जोखिम को पूरी तरह मिटा देता है।

एक प्रोग्रामर के रूप में यह आपके नौकरी करने के लिए नौकरी है, हालांकि।

आप

function h(s) { return htmlspecialchars(s); } 

परिभाषित कर सकते हैं, तो htmlspecialchars() भी PHP फ़ाइल प्रति 100 बार लिखने के लिए लंबा है। दूसरी ओर, htmlentities() का उपयोग करना आवश्यक नहीं है।


मुख्य बिंदु यह है: कोड है, और डेटा है। यदि आप दोनों को इंटरमीक्स करते हैं, तो बुरी चीजें होती हैं।

एचटीएमएल के मामले में, कोड तत्व, गुण नाम, संस्थाएं, टिप्पणियां हैं। डेटा बाकी सब कुछ है। डेटा कोड के लिए गलत होने से बचने के लिए से बचें।

URL की स्थिति में, कोड योजना, होस्ट नाम, पथ, क्वेरी स्ट्रिंग (?, &, =, #) की व्यवस्था है। डेटा क्वेरी स्ट्रिंग में सबकुछ है: पैरामीटर नाम और मान। कोड के लिए गलत होने से बचने के लिए से बच जाना चाहिए।

यूआरएल एचटीएमएल में एम्बेडेड होना चाहिए दोगुना कोड और डेटा के समुचित जुदाई सुनिश्चित करने के लिए (यूआरएल-भागने और एचटीएमएल-भागने से) भाग निकले।

आधुनिक ब्राउज़र कुछ उपयोगी में अद्भुत टूटे और गलत मार्कअप को पार्स करने में सक्षम हैं। हालांकि, इस क्षमता पर जोर नहीं दिया जाना चाहिए। तथ्य यह है कि काम करने के लिए कुछ होता है (जैसे <a href> में यूआरएल उचित HTML-escaping लागू किए बिना) इसका मतलब यह नहीं है कि यह करने के लिए यह अच्छा या सही है। एक्सएसएस एक समस्या है जो ए में जड़ें) लोग डेटा/कोड अलगाव (यानी "भागने") से अनजान हैं या जो बेवकूफ हैं और बी) जो लोग डेटा के किस हिस्से से बचने की आवश्यकता नहीं है, उसके बारे में चालाक होने का प्रयास करते हैं।

एक्सएसएस आसानी से बचने के लिए पर्याप्त है यदि आप सुनिश्चित करते हैं कि आप श्रेणियों में नहीं आते हैं) और बी)।

+0

नहीं, यह नहीं है। यदि आप इसे टेक्स्ट नोड के रूप में रखते हैं, तो आप सुरक्षित हैं (माना जाता है कि यह एक स्क्रिप्ट या शैली तत्व के अंदर नहीं है)। दूसरी ओर विशेषता मूल्य? '' (इन दिनों, अधिकांश ब्राउज़र इसके खिलाफ सुरक्षा करते हैं, लेकिन अन्य जोखिम भी हैं) – Quentin

+0

ठीक है, लेकिन जब उपयोगकर्ता यूआरएल में एसक्यूएल सबमिट करता है तो क्या होगा? यानी "ड्रॉप टेबल उपयोगकर्ता" – Tim

+0

"मैं कभी भी * उपयोगकर्ता द्वारा प्रदान किए गए * डेटा का कुछ भी आउटपुट नहीं करता" मैं कहूंगा।साइट टेम्पलेट्स उस खतरे से बच सकते हैं :) –

1

नहीं, ऐसा नहीं है। जोखिम डेटा के साथ आप जो करते हैं उस पर निर्भर करते हैं, आप कुछ भी लिख नहीं सकते हैं जो सब कुछ के लिए डेटा सुरक्षित बनाता है (जब तक कि आप अधिकतर डेटा को त्यागना नहीं चाहते हैं)

+0

अच्छा हाँ, लेकिन जब हम वेब और PHP की बात करते हैं तो हम सामान्य रूप से बात नहीं कर रहे हैं। स्पष्ट रूप से कुछ वर्ण और तार हैं जिन्हें आप अक्षम करना चाहते हैं, इसलिए यदि संभव हो तो मैं ऐसी चीजों की एक सामान्य जेनेरिक सूची चाहूंगा। मैं मूल रूप से सिर्फ अल्फान्यूमेरिक जानकारी चाहता हूं। – Tim

+0

कौन सा अक्षर? क्या आप लोगों को हाइफ़न और पूर्ण स्टॉप का उपयोग करने से मना करना चाहते हैं? यह शायद ही कभी सरल है। – Quentin

-1

अपने संस्करण का उत्तर देने के लिए: <> प्रतीकों को छोड़कर सबकुछ XSS के साथ कुछ लेना देना नहीं है।
और htmlspecialchars() उनके साथ सौदा कर सकते हैं।

पृष्ठ के पाठ में शब्द DROP table में कोई बुराई नहीं है;)

+0

और '' 'एक विशेषता को बंद करने के लिए और फिर अपने कोड के साथ जारी रखने के लिए?' 'मुझे बल्कि एक्सएसएस-वाई लगता है। :-) – janmoesen

+0

@janm 'htmlspecialchars' डबल कोट्स पकड़ लेगा ताकि आपको' ' के साथ समाप्त होना चाहिए। छवियों के साथ, आपको यह जांचना चाहिए कि छवि टूटी हुई छवियों से बचने के लिए पहले मौजूद है। – DisgruntledGoat

+0

यह बस सही नहीं है। http://stackoverflow.com/questions/2964424/to-htmlencode-or-not-to-htmlencode-user देखें -इनपूट-ऑन-वेब-फॉर्म-एएसपी-नेट-वीबी/2 9 65444 # 2 9 65444 – Cheekysoft

-3

स्वच्छ उपयोगकर्ता डेटा के लिए html_special_chars(); str_replace() उपयोग करें और अन्य funcs असुरक्षित डेटा कटौती करने के लिए।

+0

'mysql_escape_string' को बहिष्कृत किया गया है और चरित्र एन्कोडिंग को ठीक से संभाल नहीं करता है। – Quentin

+0

ठीक है। उस स्थिति में आप अपने अनुरोध को साफ करने के लिए str_replace का उपयोग कर सकते हैं। – GOsha

+1

str_replace भी सबसे खराब है। और get_magic_quotes_gpc डेटाबेस से बचने के लिए कुछ भी नहीं है। और पूरी कार्य अवधारणा बेवकूफ है - यह दोबारा बच निकलती है! –

1

क्या कोड का एक साधारण कोड या एक ऐसा कार्य है जो सब कुछ के लिए एक असफलता है?

सं

पीएचपी छोड़ने डेटा का प्रतिनिधित्व परिवर्तित किया जाना चाहिए/विशेष रूप से अनुसार जहां यह जा रहा है इनकोडिंग। और इसलिए उस बिंदु पर केवल कनवर्ट/एन्कोड किया जाना चाहिए जहां यह PHP छोड़ देता है।

सी

3

मैं Google-caja शायद एक समाधान लगता है। मैं जावा वेब एप्लिकेशन के लिए स्वचालित रूप से एक्सएसएस को पहचानने और रोकने के लिए एक दंत विश्लेषक लिखता हूं। लेकिन PHP के लिए नहीं। मुझे लगता है कि वेब डेवलपर के लिए कैजा का उपयोग करना बुरा नहीं है।

0

आप OWASP का उल्लेख XSS हमलों की अधिक समझ पाने के लिए कर सकते हैं:

https://www.opensource-excellence.com/shop/ose-security-suite.html

:

https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

js हमलों से बचने के लिए, आपको खुला स्रोत उत्कृष्टता द्वारा प्रदान की इस परियोजना की कोशिश कर सकते

मेरी वेबसाइट पर पहले जेएस हमले थे, और यह टूल हर रोज हमले को रोकने में मदद करता है। मुझे लगता है कि यह आपको समस्या से बचने के लिए लोगों की मदद कर सकता है।

अगर (preg_match ('/ (:: [। "] स्क्रिप्ट \ रों

इसके अलावा, आप सभी js हमलों फिल्टर करने के लिए अपने php स्क्रिप्ट में एक फिल्टर जोड़ सकते हैं, यहाँ एक पैटर्न है कि काम कर सकते हैं है *() | (? \ $ \ $ \ s * (\ s * [\ w "]) | (:/[\ w \ रों] /) | (:।? = \ s */\ w +/\ s *।) | (? :(?: यह | खिड़की | शीर्ष | अभिभावक | फ्रेम | स्वयं | सामग्री) [\ s * [(, "] \ s [\ w \ $]) | (?:, \ s * नया \ s + \ w + \ s * [,;)/ms ', strtolower ($ POST [' VARIABLENAME '])) { filter_variable ($ POST [' VARIABLENAME ']); }

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