पीएचपी फ़िल्टर (Filter)

PHP फिल्टर असुरक्षित स्रोत से आने वाले डाटा, जैसे कि उपयोगकर्ता इनपुट, की प्रमाणीकरण और फिल्टरिंग के लिए उपयोग किए जाते हैं।

PHP फिल्टर क्या है?

PHP फिल्टर असुरक्षित स्रोत से आने वाले डाटा की प्रमाणीकरण और फिल्टरिंग के लिए उपयोग किए जाते हैं।

उपयोगकर्ता इनपुट या अनुकूलित डाटा की प्रमाणीकरण और फिल्टरिंग करना किसी भी वेब एप्लिकेशन का एक महत्वपूर्ण हिस्सा है।

PHP के फिल्टर एक्सटेंशन का डिजाइन करने का उद्देश्य डाटा फिल्टरिंग को आसान और तेज़ बनाना है।

फिल्टर का उपयोग करने का क्यों?

सभी वेब एप्लिकेशन बाहरी इनपुट पर निर्भर करते हैं। ये डाटा आमतौर पर उपयोगकर्ता या अन्य एप्लिकेशन (जैसे कि वेब सेवा) से आता है। फिल्टर का उपयोग करके, आप यह सुनिश्चित कर सकते हैं कि एप्लिकेशन को सही इनपुट टाइप मिलता है।

आपको हमेशा बाहरी डाटा को फिल्टर करना चाहिए!

इनपुट फिल्टरिंग, अधिकांश अनुप्रयोग सुरक्षा विषयों में से एक है。

बाहरी डाटा क्या है?

  • फॉर्म से आने वाला इनपुट डाटा
  • कुकी
  • सर्वर वेरियेबल
  • डाटाबेस के परिणाम

फ़ंक्शन और फिल्टर

वेरियेबल को फिल्टर करने के लिए, नीचे दिए गए फ़ंक्शनों में से एक का उपयोग करें:

  • filter_var() - एक विशिष्ट फिल्टर के साथ एक वेरियेबल को फिल्टर करना
  • filter_var_array() - कई वेरियेबल्स को समान या अलग फिल्टरों के साथ फिल्टर करना
  • filter_input - एक इनपुट वेरियेबल प्राप्त करना और उसे फिल्टर करना
  • filter_input_array - कई इनपुट वेरियेबल्स प्राप्त करना और उन्हें समान या अलग फिल्टरों के साथ फिल्टर करना

इस उदाहरण में, हमने filter_var() फ़ंक्शन को एक अंकगणित निरीक्षण करने के लिए उपयोग किया:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo(अंकगणित गलत है);
 }
else
 {
 echo(अंकगणित सही है);
 }
?>

ऊपरी अभिव्यक्ति "FILTER_VALIDATE_INT" फिल्टर को वेरियेबल को फिल्टर करने के लिए उपयोग करती है। इस अंकगणित वेरियेबल वैध होने के कारण, कोड का आउटपुट "अंकगणित सही है" है。

यदि हम एक गैर-अंकगणित वेरियेबल का प्रयास करते हैं, तो आउटपुट है: "अंकगणित गलत है"。

पूर्ण फ़ंक्शन और फिल्टर सूची के लिए हमारे PHP Filter संदर्भ दस्तावेज

निरीक्षण और सैनाइजिंग

दो फिल्टर हैं:

निरीक्षण फिल्टर:

  • उपयोगकर्ता इनपुट की निरीक्षण के लिए उपयोग किया जाता है
  • सख्त फॉर्मेट नियम (जैसे URL या ई-मेल निरीक्षण)
  • यदि सफल होता है तो अपेक्षित प्रकार वापस करता है, अगर असफल होता है तो FALSE वापस करता है

सैनाइजिंग फिल्टर:

  • चरित्रों को अनुमति देने या नहीं देने के लिए उपयोग किया जाता है
  • कोई डाटा फॉर्मेट नियम नहीं है
  • हमेशा चरित्र चाइनी वापस करता है

विकल्प और चिह्न

विकल्प और चिह्न, विशिष्ट फिल्टर को अतिरिक्त फिल्टर विकल्पों को जोड़ने के लिए उपयोग किए जाते हैं。

विभिन्न फिल्टरों के लिए विभिन्न विकल्प और चिह्न हैं。

इस उदाहरण में, हमने filter_var() और "min_range" और "max_range" विकल्पों के साथ एक अंकगणित निरीक्षण किया:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 "min_range"=>0,
 "max_range"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo(अंकगणित गलत है);
 }
else
 {
 echo(अंकगणित सही है);
 }
?>

जैसा कि ऊपर वाले कोड के समान, विकल्प एक नाम "options" वाले संबंधित एक्सेस के अंदर डालना चाहिए। यदि चिह्न का उपयोग करते हैं, तो इसे एक्सेस के अंदर नहीं डालना चाहिए।

इंटीजर "300" है, इसलिए इस रेंज में नहीं है, इसके कारण इस कोड का आउटपुट "Integer is not valid" होगा。

पूर्ण फ़ंक्शन और फ़िल्टर सूची के लिए, CodeW3C.com पर जाएं PHP Filter संदर्भ दस्तावेजआप देख सकते हैं कि प्रत्येक फ़िल्टर के उपलब्ध विकल्प और संकेतक हैं。

इनपुट पुष्टि करना

हम फॉर्म से आए इनपुट को पुष्टि करने की कोशिश करें।

हम करने वाला पहला काम है कि हमारे खोजे जा रहे इनपुट डाटा के मौजूदगी की पुष्टि करना है。

तब हम filter_input() फ़ंक्शन का उपयोग करके इनपुट डाटा को फ़िल्टर करें।

इस उदाहरण में, इनपुट वेरियेबल "email" PHP पृष्ठ पर भेजी गई है:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>

उदाहरण व्याख्या:

उपरोक्त उदाहरण में "GET" विधि से भेजा गया इनपुट वेरियेबल (email) है:

  1. जाँच करें कि क्या "GET" तरह का "email" इनपुट वेरियेबल है
  2. यदि इनपुट वेरियेबल मौजूद है, तो इसे वैध ईमेल पता है के लिए जाँच करें

इनपुट साफ करना

हमें फॉर्म से आए URL को साफ करने की कोशिश करें।

पहले, हम हमारे खोजे जा रहे इनपुट डाटा के मौजूदगी की पुष्टि करना चाहते हैं。

तब, हम filter_input() फ़ंक्शन का उपयोग करके इनपुट डाटा को साफ करें।

इस उदाहरण में, इनपुट वेरियेबल "url" PHP पृष्ठ पर भेजी गई है:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

उदाहरण व्याख्या:

उपरोक्त उदाहरण में "POST" विधि से भेजा गया इनपुट वेरियेबल (url) है:

  1. जाँच करें कि क्या "POST" तरह का "url" इनपुट वेरियेबल है
  2. यदि इस इनपुट वेरियेबल की मौजूदगी हो, तो इसे साफ करें (अवैध चरित्र हटाएं) और इसे $url वेरियेबल में संग्रहित करें

यदि इनपुट वेरियेबल इस तरह का हो: "http://www.W3非o法ol.com.c字符n/" तो साफ किए गए $url वेरियेबल इस तरह होना चाहिए:

http://www.codew3c.com/

बहुत से इनपुट फ़िल्टर करना

फॉर्म आमतौर पर कई इनपुट फ़ील्डों से बना होता है. filter_var या filter_input को बार-बार बुलाने से बचने के लिए, हम filter_var_array या filter_input_array फ़ंक्शन का उपयोग कर सकते हैं.

इस उदाहरण में, हम filter_input_array() फ़ंक्शन का उपयोग करते हैं तीन GET वेरियेबलों को फ़िल्टर करने के लिए. प्राप्त GET वेरियेबल एक नाम, एक उम्र और एक ई-मेल एड्रेस है:

<?php
$filters = array
 (
 "name" => array
  (
  "filter"=>FILTER_SANITIZE_STRING
  ),
 "age" => array
  (
  "filter"=>FILTER_VALIDATE_INT,
  "options"=>array
   (
   "min_range"=>1,
   "max_range"=>120
   )
  ),
 "email"=> FILTER_VALIDATE_EMAIL,
 );
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
 {
 echo("Age must be a number between 1 and 120.<br />");
 }
elseif(!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>

उदाहरण व्याख्या:

उपरोक्त उदाहरण में तीन "GET" विधि से भेजे गए इनपुट वेरियेबल हैं (name, age and email)

  1. एक आयत्ताकार सेट करें जिसमें इनपुट वेरियेबल के नाम और निर्दिष्ट इनपुट वेरियेबल के लिए फ़िल्टर शामिल हैं
  2. filter_input_array() फ़ंक्शन को बुलाएं, पारामीटरों में GET इनपुट वेरियेबल और पहले सेट किए गए आयत्ताकार
  3. result वेरियेबल में "age" और "email" वेरियेबल को अवैध इनपुट हैं का परीक्षण करें (अगर अवैध इनपुट है,)

filter_input_array() फ़ंक्शन का दूसरा पारामीटर आयत्ताकार या एकल फ़िल्टरर का आईडी हो सकता है。

यदि इस पारामीटर एक एकल फ़िल्टरर का आईडी है, तो इस निर्दिष्ट फ़िल्टर इनपुट आयत्ताकार में सभी मूल्यों को फ़िल्टर करेगा。

यदि इस पारामीटर एक आयत्ताकार है, तो इस आयत्ताकार को नीचे दिए गए नियमों का पालन करना चाहिए:

  • यह एक संबंधित आयता होना चाहिए, जिसमें आगमन वाहक आयता है (उदाहरण के लिए, "age" आगमन वाहक)
  • इस आयता की गणना फ़िल्टर के आईडी होनी चाहिए, या फिर फ़िल्टर, फ़िल्टर तौर और विकल्पों को निर्धारित करने वाला आयता होनी चाहिए

Filter Callback का उपयोग करना

FILTER_CALLBACK फ़िल्टर का उपयोग करके, आप अपने फ़ंक्शन को फ़िल्टर के रूप में उपयोग कर सकते हैं, इस प्रकार हमें डाटा फ़िल्टरिंग पर पूर्ण नियंत्रण होगा。

आप अपने अधिसूचित फ़ंक्शन को बना सकते हैं, या फिर मौजूदा PHP फ़ंक्शन का उपयोग कर सकते हैं。

फ़िल्टर फ़ंक्शन के उपयोग के तरीके को निर्धारित करने के लिए, विकल्पों को निर्धारित करने के तरीके के समान है。

इस उदाहरण में, हमने एक स्वयंचलित फ़ंक्शन का उपयोग किया है, जो सभी "_" को खाली जगह में बदलता है:

<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

ऊपरी कोड का परिणाम इस तरह है:

Peter एक शानदार आदमी है!

उदाहरण व्याख्या:

ऊपरी उदाहरण में सभी "_" को खाली जगह में बदला गया है:

  1. एक फ़ंक्शन बनाएं जो "_" को खाली जगह में बदले
  2. filter_var() फ़ंक्शन को बुलाएं, जिसका पैरामीट FILTER_CALLBACK फ़िल्टर और हमारे फ़ंक्शन की गणना