2013-09-26 6 views
12

http://laravel.com/docs/eloquent के अनुसार, मॉडल में संरक्षित $ छिपे हुए चर का उपयोग कर एरे या जेएसओएन रूपांतरण से गुण छुपा सकते हैं।लार्वा छुपे हुए गुण। जैसे पासवर्ड - सुरक्षा

class User extends Eloquent { 
    protected $hidden = array('password'); 
} 

बढ़िया है, लेकिन जब print_r(User::all()) चल एन्क्रिप्टेड पासवर्ड सर्वर से ग्राहक के लिए उपयोगकर्ता ऑब्जेक्ट के अंदर भेजा जाता है।

यह केवल print_r() तक ही सीमित नहीं है, यदि विशिष्ट उपयोगकर्ता पूछताछ की जाती है, $user->password दृश्य में एन्क्रिप्टेड पासवर्ड प्रदर्शित करेगा।

क्या इसे रोकने का कोई तरीका है? हर बार जब मेरे उपयोगकर्ता ऑब्जेक्ट की पूछताछ की जाती है, तो पासवर्ड डेटा के हिस्से के रूप में इसके साथ भेजा जाएगा, भले ही इसे होने की आवश्यकता न हो।

Illuminate\Database\Eloquent\Collection Object 
(
[items:protected] => Array 
    (
     [0] => User Object 
      (
       [hidden:protected] => Array 
        (
         [0] => password 
        ) 

       [connection:protected] => 
       [table:protected] => 
       [primaryKey:protected] => id 
       [perPage:protected] => 15 
       [incrementing] => 1 
       [timestamps] => 1 
       [attributes:protected] => Array 
        (
         [id] => 1 
         [email] => [email protected] 
         [first_name] => Admin 
         [last_name] => User 
         [password] => $2y$10$7Wg2Wim9zHbtGQRAi0z6XeapJbAIoh4RhEnVXvdMtFnwcOh5g/W2a 
         [permissions] => 
         [activated] => 1 
         [activation_code] => 
         [activated_at] => 
         [last_login] => 
         [persist_code] => 
         [reset_password_code] => 
         [created_at] => 2013-09-26 10:24:23 
         [updated_at] => 2013-09-26 10:24:23 
        ) 

उत्तर

20

जब आप User::all() चलाते हैं, तो यह संग्रह ऑब्जेक्ट देता है। इस संग्रह में आपके सभी उपयोगकर्ता ऑब्जेक्ट फॉर्म में शामिल हैं। इसलिए, आपके उपयोगकर्ताओं में उनके पासवर्ड होंगे। ऐसा इसलिए है कि आप किसी भी कारण से हैशड पासवर्ड प्रदर्शित कर सकते हैं। हालांकि, जैसा कि आपने पहले कहा था, यदि आप संग्रह या उपयोगकर्ताओं को सरणी या JSON में बदलते हैं, तो छिपे हुए पासवर्ड फ़ील्ड को जाना चाहिए।

इसलिए, आप उनमें से छुटकारा पाने के लिए चाहते हैं, तो निम्न चलाने की कोशिश:

$array_of_users = Users::all()->toArray(); 
$json_of_users = Users::all()->toJson(); 

dd() इन दोनों उन्हें निरीक्षण करने के लिए। पासवर्ड फ़ील्ड चलेगा।

यह लैरवेल के दस्तावेज में serialization पर समझाया गया है।

3

नहीं, क्योंकि आपको उत्पादन (या वास्तविक दुनिया में) ऐसा कुछ नहीं करना चाहिए।

ब्लेड में लिखे गए आपके विचार User::all() परिणाम प्राप्त कर सकते हैं और इसे संसाधित कर सकते हैं, लेकिन यह PHP (सर्वर) है, HTML (क्लाइंट) नहीं है, और यह क्लाइंट को पास होने से पहले उस डेटा को HTML में बदल देगा।

तो यह

print_r(User::all()) 

कुछ है कि आप किसी उपयोगकर्ता को दिखाने के लिए ऐसा कभी नहीं करेंगे है, इसे हम डिबग करने के लिए उपयोग है, लेकिन यह वास्तव में कुछ भी नहीं मतलब है।

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

+0

ठीक है ... कैसे '$ उपयोगकर्ता-> पासवर्ड ' – Gravy

+0

यह आपके कोड पर उपयोग करने के लिए कुछ है या नहीं। यदि आपको लगता है कि यह एक संवेदनशील डेटा है, तो इसे कभी भी एक दृश्य पर लिखें। :) –

+0

मैं आपसे सहमत हूं। लेकिन फिर आप एक जेसन या सरणी अनुरोध के माध्यम से स्वचालित रूप से इसकी रक्षा क्यों कर पाएंगे, लेकिन ऑब्जेक्ट के माध्यम से नहीं? – Gravy

0

लार्वेल में यदि आप किसी भी इकाई को प्रतिनिधित्व करने वाले नियंत्रक में कोई मॉडल ऑब्जेक्ट लौटाते हैं तो JSON में परिवर्तित हो जाएगा।
यह एपीआई निर्माण के लिए उपयोगी है, और वहां छिपा फ़ील्ड बहुत मदद करता है

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