2010-10-29 13 views
7

बहुत से लोग स्ट्रिंग पर इन दोनों कार्यों का उपयोग क्यों करते हैं? मैं stripslashes(strip_tags($field)); का एक बहुत (या दूसरी तरह के आसपास) को देखने केडेटा से बचने - स्ट्रिप्सलाश, स्ट्रिप_टैग

strip_tags किसी भी XSS सामान और ऐसी बातों को फिल्टर करने के लिए पर्याप्त नहीं है?

उत्तर

9

डेटा से बचने के लिए strip_tags या stripslashes से कोई लेना देना नहीं है। ये फ़ंक्शंस कुछ वर्णों को स्ट्रिंग से बाहर फ़िल्टर करते हैं जबकि "एस्केपिंग" कुछ वर्णों को एन्कोड करता है ताकि उन्हें ब्राउज़र या डेटाबेस द्वारा व्याख्या नहीं किया जा सके।

आप ब्राउज़र से PHP पर भेजे गए तारों में HTML टैग को हटाने के लिए strip_tags का उपयोग कर सकते हैं। बेहतर अभी तक, आप strip_tags के माध्यम से htmlspecialchars का उपयोग करके किसी भी वर्ण से बचने के लिए सुरक्षित रूप से उसी डेटा को सुरक्षित रूप से संग्रहीत कर सकते हैं, जब आप ब्राउजर पर डेटा भेजते हैं तो टैग को डिलीमिट कर सकते हैं।

stripslashes स्ट्रिंग से स्लेश हटा देता है, और आपको "जादू उद्धरण" सक्षम होने पर केवल इसके बारे में चिंता करने की आवश्यकता है। यह पहले के समय से होल्ड-ओवर है जब PHP devs ने नैतिक रूप से माना है कि ब्राउज़र से आने वाले प्रत्येक डेटा को डेटाबेस के लिए नियत किया गया था और डेवलपर्स को डेटाबेस से बचने के लिए भरोसा नहीं किया जा सका।

2

जब जादू उद्धरण चालू होता है तो यह स्वचालित रूप से सभी पोस्ट, जीईटी इत्यादि में उद्धरण से बच जाएगा। डेटा का उपयोग करने से पहले स्ट्रिप्सलाश उन लोगों को हटा देता है। स्ट्रिप टैग सभी HTML टैग को हटाने के लिए कोशिश करता है।

5

क्या किसी भी xss सामान और ऐसी चीजों को फ़िल्टर करने के लिए पर्याप्त स्ट्रिप_टैग नहीं है?

नहीं। XSS सामान को फ़िल्टर करने का एकमात्र सुरक्षित तरीका htmlspecialchars() है, हालांकि मुझे strip_tags() का उपयोग करने के लिए कई अनुशंसाएं दिखाई देती हैं।

उदा। देखें इस प्रश्न में चर्चा: Is preventing XSS and SQL Injection as easy as does this…

stripslashes इस संदर्भ में क्या करना है, मुझे नहीं पता। यह शायद अब-बहिष्कृत magic quotes फ़ंक्शन के प्रभावों को पूर्ववत करने का प्रयास है - लेकिन यह पहले जांच किए बिना कभी भी लागू नहीं किया जाना चाहिए कि वह विशेष कार्य सक्षम है या नहीं।

0

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

SELECT * FROM users WHERE username='$username' AND password = '$password' 

addslashes() के बिना, एक एक SQL इंजेक्शन के लिए उपयोगकर्ता नाम की स्थापना करके कर सकते हैं: एक और शब्दों में

admin'-- 

तो, addslashes() - या बेहतर अभी तक, mysql_real_escape_string() - एसक्यूएल इंजेक्शन को रोकने के लिए है, जबकि स्ट्रिप_टैग() एक्सएसएस इंजेक्शन को रोकने के लिए है।

+1

आप शायद 'addlashes() 'का जिक्र कर रहे हैं। लेकिन इसका कभी भी कभी भी SQL कथन को sanitize करने के लिए उपयोग नहीं किया जाना चाहिए। 'Mysql_ *' फ़ंक्शंस के लिए हमेशा डेटाबेस रैपर के मूल एस्केप फ़ंक्शन का उपयोग करें, जैसा कि आप कहते हैं, यह 'mysql_real_escape_string() 'है। –

+1

'स्ट्रिप्सलाश' यह बिल्कुल नहीं करता है, और डेटाबेस के लिए डेटा तैयार करने के साथ कुछ भी नहीं है ... – meagar

+1

क्षमा करें, वहां एक पल उलझन में आया। (भेड़ का बच्चा) तय! – jusunlee

1

strip_tags() आमतौर पर एक्सएसएस हमलों को रोकने के लिए पर्याप्त नहीं है, इसलिए सावधानी के पक्ष में गलती करना सर्वोत्तम है।

निम्नलिखित पर विचार करें:

$str = "' onclick='javascript:alert(0);' alt='"; 
echo "<a href='". strip_tags($str) ."'></a>"; 
// output is <a href='' onclick='javascript:alert(0);' alt=''></a> 

एक नहीं है हमेशा एक XSS हमले निष्पादित करने के लिए HTML टैग की जरूरत है। यह एक कम प्रभावी हमला हो सकता है, लेकिन फिर भी यह एक संभावित हमले वेक्टर है।

1

मैंने देखा है कि स्ट्रिप_टैग() अक्षरों को उद्धृत करने के लिए बैकस्लाश जोड़ता है। मैंने जांच की है और magic_quotes_gpc चालू नहीं है। ओपी का मूल सवाल यह था कि कुछ कोडर स्ट्रिप्सलाश() के साथ स्ट्रिप_टैग() को घेरते हैं और यही कारण है कि मैं ऐसा करता हूं, क्योंकि मैं नहीं चाहता कि डेटाबेस डबल बैकस्लाश को स्टोर करे, क्योंकि मैं डेटाबेस में सहेजने से पहले भी अपना डेटा तैयार कर चुका हूं।

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