खोज…


वाक्य - विन्यास

  • स्ट्रिंग क्रमबद्ध (मिश्रित $ मूल्य)

पैरामीटर

पैरामीटर विवरण
मूल्य क्रमबद्ध होने का मान। क्रमबद्ध () संसाधन- प्रकार को छोड़कर सभी प्रकार को संभालता है। आप यहां तक कि धारावाहिकों () सरणियों को भी शामिल कर सकते हैं जिनमें स्वयं के संदर्भ हैं। आपके द्वारा क्रमबद्ध किए जा रहे सरणी / ऑब्जेक्ट के अंदर परिपत्र संदर्भ भी संग्रहीत किए जाएंगे। कोई अन्य संदर्भ खो जाएगा। वस्तुओं को क्रमबद्ध करते समय, PHP क्रमांकन से पहले सदस्य फ़ंक्शन __sleep () को कॉल करने का प्रयास करेगा। यह किसी भी अंतिम मिनट की सफाई, आदि को क्रमबद्ध होने से पहले करने की अनुमति देता है। इसी तरह, जब वस्तु का उपयोग कर पुनर्स्थापित किया जाता है unserialize () __wakeup () सदस्य समारोह कहा जाता है। ऑब्जेक्ट के निजी सदस्यों का वर्ग का नाम सदस्य के नाम से जुड़ा हुआ है; संरक्षित सदस्यों के पास एक '*' सदस्य नाम के लिए तैयार है। इन प्रीपेंड किए गए मानों में दोनों तरफ अशक्त बाइट्स हैं।

टिप्पणियों

धारावाहिक संरचना निम्नलिखित स्ट्रिंग संरचनाओं का उपयोग करती है:

[..] प्लेसहोल्डर हैं।

प्रकार संरचना
तार s:[size of string]:[value]
पूर्णांक i:[value]
दोहरा d:[value]
बूलियन b:[value (true = 1 and false = 0)]
शून्य N
वस्तु O:[object name size]:[object name]:[object size]:{[property name string definition]:[property value definition];(repeated for each property)}
सरणी a:[size of array]:{[key definition];[value definition];(repeated for each key value pair)}

विभिन्न प्रकारों का सीरियलाइजेशन

एक मूल्य का एक सुंदर प्रतिनिधित्व उत्पन्न करता है।

यह उनके प्रकार और संरचना को खोए बिना PHP मानों को संग्रहीत या पास करने के लिए उपयोगी है।

PHP के मान में क्रमबद्ध स्ट्रिंग को फिर से बनाने के लिए, unserialize () का उपयोग करें

एक स्ट्रिंग को सीरियल करना

$string = "Hello world";    
echo serialize($string);

// Output: 
// s:11:"Hello world";

एक दोहरे सीरियल

$double = 1.5;    
echo serialize($double);

// Output: 
// d:1.5;

एक फ्लोट को सीरियल करना

फ्लोट युगल के रूप में क्रमबद्ध हो जाते हैं।

किसी पूर्णांक को क्रमबद्ध करना

$integer = 65;    
echo serialize($integer);

// Output: 
// i:65;

एक बूलियन का सीरियल करना

$boolean = true;    
echo serialize($boolean);

// Output: 
// b:1;

$boolean = false;    
echo serialize($boolean);

// Output: 
// b:0;

अशक्त करना

$null = null;    
echo serialize($null);

// Output: 
// N;

किसी सरणी को सीरियल करना

$array = array(
    25,
    'String',
    'Array'=> ['Multi Dimension','Array'],
    'boolean'=> true,
    'Object'=>$obj, // $obj from above Example
    null,
    3.445
); 


// This will throw Fatal Error
// $array['function'] = function() { return "function"; };

echo serialize($array);

// Output:
// a:7:{i:0;i:25;i:1;s:6:"String";s:5:"Array";a:2:{i:0;s:15:"Multi Dimension";i:1;s:5:"Array";}s:7:"boolean";b:1;s:6:"Object";O:3:"abc":1:{s:1:"i";i:1;}i:2;N;i:3;d:3.4449999999999998;}

किसी वस्तु का सीरियल करना

आप ऑब्जेक्ट को क्रमबद्ध भी कर सकते हैं।

वस्तुओं को क्रमबद्ध करते समय, PHP क्रमांकन से पहले सदस्य फ़ंक्शन __sleep () को कॉल करने का प्रयास करेगा। यह किसी भी अंतिम मिनट की सफाई, आदि को क्रमबद्ध होने से पहले करने की अनुमति देता है। इसी तरह, जब वस्तु unserialize का उपयोग कर पुनर्स्थापित किया जाता है () __wakeup () सदस्य समारोह कहा जाता है।

class abc {
    var $i = 1;
    function foo() {
        return 'hello world';
    }
}

$object = new abc(); 
echo serialize($object);

// Output:
// O:3:"abc":1:{s:1:"i";i:1;} 

ध्यान दें कि क्लोजर को क्रमबद्ध नहीं किया जा सकता है:

$function = function () { echo 'Hello World!'; };
$function(); // prints "hello!"

$serializedResult = serialize($function);  // Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed'

गैर-कानूनी के साथ सुरक्षा मुद्दे

उपयोगकर्ता इनपुट से डेटा को अनसुना करने के लिए unserialize फ़ंक्शन का उपयोग करना खतरनाक हो सकता है।

Php.net से एक चेतावनी

चेतावनी अनरिस्लाइज़ करने के लिए अविश्वासित उपयोगकर्ता इनपुट पास न करें ()। Unserialization के परिणामस्वरूप कोड को लोड किया जा सकता है और ऑब्जेक्ट तात्कालिकता और ऑटोलडिंग के कारण निष्पादित किया जा सकता है, और एक दुर्भावनापूर्ण उपयोगकर्ता इसका फायदा उठाने में सक्षम हो सकता है। यदि आप उपयोगकर्ता को क्रमबद्ध डेटा पारित करने की आवश्यकता है, तो JSON (json_decode () और json_encode () के माध्यम से एक सुरक्षित, मानक डेटा इंटरचेंज प्रारूप का उपयोग करें।

संभव हमलों

  • PHP ऑब्जेक्ट इंजेक्शन

PHP ऑब्जेक्ट इंजेक्शन

PHP ऑब्जेक्ट इंजेक्शन एक एप्लिकेशन स्तर की भेद्यता है जो हमलावर को विभिन्न प्रकार के दुर्भावनापूर्ण हमलों, जैसे कि कोड इंजेक्शन, एसक्यूएल इंजेक्शन, पथ ट्रैवर्सल और एप्लिकेशन डेनियल ऑफ सर्विस, को संदर्भ के आधार पर प्रदर्शन करने की अनुमति दे सकता है। असुरक्षितता तब होती है जब उपयोगकर्ता-प्रदत्त इनपुट को ठीक से अनसुनी () PHP फंक्शन में पास करने से पहले सैनिटाइज़ नहीं किया जाता है। चूंकि PHP ऑब्जेक्ट सीरियलाइज़ेशन की अनुमति देता है, इसलिए हमलावर एक असुरक्षित अनजाने () कॉल के लिए एड-हॉक क्रमबद्ध स्ट्रिंग्स पास कर सकते हैं, जिसके परिणामस्वरूप एप्लिकेशन स्कोप में एक मनमाना PHP ऑब्जेक्ट (एस) इंजेक्शन होता है।

PHP ऑब्जेक्ट इंजेक्शन भेद्यता का सफलतापूर्वक उपयोग करने के लिए दो शर्तों को पूरा करना होगा:

  • एप्लिकेशन में एक वर्ग होना चाहिए जो एक PHP मैजिक विधि (जैसे __wakeup या __destruct ) को लागू करता है जिसका उपयोग दुर्भावनापूर्ण हमलों को करने के लिए, या "POP श्रृंखला" शुरू करने के लिए किया जा सकता है।
  • हमले के दौरान इस्तेमाल किए जाने वाले सभी वर्गों को तब घोषित किया जाना चाहिए जब कमजोर unserialize() कहा जा रहा हो, अन्यथा ऐसी कक्षाओं के लिए ऑब्जेक्ट ऑटोलडिंग का समर्थन किया जाना चाहिए।

उदाहरण 1 - पथ ट्रैवर्सल हमला

नीचे का उदाहरण एक PHP वर्ग को शोषक __destruct विधि के साथ __destruct है:

class Example1
{
   public $cache_file;

   function __construct()
   {
      // some PHP code...
   }

   function __destruct()
   {
      $file = "/var/www/cache/tmp/{$this->cache_file}";
      if (file_exists($file)) @unlink($file);
   }
}

// some PHP code...

$user_data = unserialize($_GET['data']);

// some PHP code...

इस उदाहरण में एक हमलावर पथ ट्रैवर्सल हमले के माध्यम से एक मनमानी फ़ाइल को हटाने में सक्षम हो सकता है, उदाहरण के लिए निम्न URL का अनुरोध:

http://testsite.com/vuln.php?data=O:8:"Example1":1:{s:10:"cache_file";s:15:"../../index.php";}

उदाहरण 2 - कोड इंजेक्शन हमला

नीचे दिए गए उदाहरण में एक शोषणकारी __wakeup विधि के साथ PHP वर्ग दिखाया गया है:

class Example2
{
   private $hook;

   function __construct()
   {
      // some PHP code...
   }

   function __wakeup()
   {
      if (isset($this->hook)) eval($this->hook);
   }
}

// some PHP code...

$user_data = unserialize($_COOKIE['data']);

// some PHP code...

इस उदाहरण में एक हमलावर इस तरह एक HTTP अनुरोध भेजकर एक कोड इंजेक्शन हमला करने में सक्षम हो सकता है:

GET /vuln.php HTTP/1.0
Host: testsite.com
Cookie: data=O%3A8%3A%22Example2%22%3A1%3A%7Bs%3A14%3A%22%00Example2%00hook%22%3Bs%3A10%3A%22phpinfo%28%29%3B%22%3B%7D
Connection: close

निम्नलिखित स्क्रिप्ट द्वारा कुकी पैरामीटर "डेटा" उत्पन्न किया गया है:

class Example2
{
   private $hook = "phpinfo();";
}

print urlencode(serialize(new Example2));


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow