आप कर सकते थे बस array_map
strip_tags
$_POST
है, लेकिन यह इसे से डेटा प्राप्त करने के लिए एक कस्टम समारोह लिखने के लिए बहुत अच्छे है:
function post_data($name) {
global $post_cache;
if (in_array($name, $post_cache)) {
return $post_cache[$name];
}
$val = $_POST[$name];
if (is_string($val)) {
$val = strip_tags($val);
} else if (is_array($val)) {
$val = array_map('strip_tags', $val);
}
$post_cache[$name] = $val;
return $val;
}
यह आपके कोड अधिक पठनीय कर देगा (इस पर ध्यान देने दूसरों आम तौर पर मान लेंगे कि $_POST['foo']
फॉर्म फ़ील्ड foo
में डेटा है, कुछ ऐसा नहीं जो आपने पहले ही प्रीप्रोसेस्ड किया है), आपको प्लगइन या लाइब्रेरीज़ के साथ समस्याएं नहीं मिलेंगी जो सीधे $ _POST तक पहुंचने का प्रयास करती हैं, $_POST
प्रीप्रोकैसिंग पर अधिक तर्क जोड़ने में आसान बनाता है (magic quotes सक्षम हैं एक आम है) सभी जगहों को शिकार किए बिना आपके कोड में जहां आपने POST डेटा का उपयोग किया है, और आपको बड़े सिरदर्द से बचाता है जब आपको पता चलता है कि कुछ पोस्ट फ़ील्ड हैं जहां आपको HTML टैग की आवश्यकता है। आम तौर पर, किसी भी superglobals को सीधे बदलने के लिए यह वास्तव में एक बुरा विचार है।
इसके अलावा, आउटपुट पर डेटा को स्वच्छ करना बेहतर है, इनपुट पर नहीं। विभिन्न उपयोगों के लिए यदि आप
<div class="user_photo">
<img src="<?php echo photo_path($user_id) ?>" alt="<?php echo $user_name ?>" />
</div>
का उपयोग तो $user_name
एक XSS हमले वेक्टर है, और strip_tags
बिल्कुल इसके खिलाफ मदद नहीं करता है, उदाहरण के लिए विभिन्न तरीकों की आवश्यकता होगी,; आपको htmlspecialchars की आवश्यकता होगी। यदि उपयोगकर्ता डेटा को यूआरएल के रूप में प्रयोग किया जाता है, तो आपको javascript:
यूआरएल और अन्य के खिलाफ बचाव करने के लिए अभी तक एक और तरीका चाहिए।
बहुत बढ़िया।यही वह है जिसकी तलाश में मैं हूं। –
यह एक्सएसएस से रक्षा करने में विफल रहेगा जब फॉर्म फ़ील्ड हैं जैसे 'foo [bar] 'या' foo [] 'जो PHP स्वचालित रूप से सरणी में परिवर्तित हो जाते हैं। – Tgr
@Tgr: हाँ, यह पूरी तरह विफल हो जाएगा जैसा कि आपने कहा था, लेकिन मुझे लगता है कि उसे – w00d