2012-10-07 11 views
16

तुम्हें पता है कि मैं PHP 5.FILTER_FLAG_STRIP_LOW बनाम FILTER_FLAG_STRIP_HIGH?

में filter_var के बारे में बात कर रहा हूँ समारोह मैं http://php.net/manual/en/filter.filters.sanitize.php का दौरा किया है लेकिन मैं अभी भी सवाल है:

सटीक क्या अंतर है?

कृपया एक उदाहरण प्रदान करें, ताकि इसे अधिक आसानी से स्पष्ट किया जा सके।

उत्तर

31

झंडे को different page of the documentation में समझाया गया है।

FILTER_FLAG_STRIP_LOW इनपुट में स्ट्रिप्स बाइट्स एक संख्यात्मक मान < 32 है, सबसे विशेष रूप null bytes और ASCII घंटी के रूप में अन्य control characters इस तरह के। यह एक अच्छा विचार है यदि आप किसी अन्य एप्लिकेशन में इनपुट पास करना चाहते हैं जो null-terminated strings का उपयोग करता है। सामान्य रूप से, 32 से कम यूनिकोड कोडपॉइंट वाले वर्ण उपयोगकर्ता इनपुट में नहीं होने चाहिए, न्यूलाइन वर्ण 10 और 13.

FILTER_FLAG_STRIP_HIGH इनपुट संख्या में 127 बाधाओं को स्ट्रिप्स बाइट्स को छोड़कर नहीं होना चाहिए। लगभग हर एन्कोडिंग में, उन बाइट्स गैर-ASCII वर्णों का प्रतिनिधित्व करते हैं जैसे कि ä, ¿, इत्यादि। इस ध्वज को पास करना broken string encoding के लिए बैंड-सहायता हो सकता है, जो security vulnerability बन सकता है। हालांकि, लगभग सभी उपयोगकर्ता इनपुट में गैर-ASCII वर्णों की अपेक्षा की जाती है।

संक्षेप में:

filter_var("\0aä\x80", FILTER_SANITIZE_STRING) == "\0aä\x80" 
filter_var("\0aä\x80", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW) == "aä\x80" 
filter_var("\0aä\x80", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH) == "\0a" 
filter_var("\0aä\x80", FILTER_SANITIZE_STRING, 
      FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH) == "a" 
+6

यह अगर वहाँ एक STRIP_LOW_EXCEPT_NEWLINB झंडा था बहुत अच्छा होगा साथ ASCII मूल्य के साथ वर्ण निकाल दें < 32

FILTER_FLAG_STRIP_HIGH 

निकालें वर्ण, चूंकि हम एक हैं textarea-field से न्यूलाइन वर्ण रखने के लिए ई केस। हां, कोई नहीं है, ताकि विशेष मामला संभाला जाना चाहिए। – itpastorn

+0

आपके उदाहरणों में कुछ काम नहीं कर रहा है, कृपया एक नज़र डालें https://eval.in/935865 –

+0

यह एक अच्छा उदाहरण है https://eval.in/935902 –

1
FILTER_FLAG_STRIP_LOW 

ASCII मूल्य > 127

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