2012-01-21 13 views
9

मुझे MYSQL पर एसक्यूएल इंजेक्शन सुरक्षित करने के अनुभव हैं, लेकिन मुझे php ड्राइवर का उपयोग करके मोंगोडीबी पर सावधान रहना चाहिए? अधिकांश पृष्ठों में मुझे जीईटी/पोस्ट के माध्यम से डेटा मिल रहा है और सिस्टम को खोज/डालने में मदद मिलती है। मैं यूडीआईडी ​​/ अन्य क्षेत्रों के माध्यम से खोज करता हूं, और कोई स्ट्रिंग मान डाल सकता हूं। इसके अलावा मुझे जावास्क्रिप्ट के माध्यम से उपयोगकर्ता की कुकीज़ मिलती है।MongoDB PHP ड्राइवर का उपयोग करते समय सुरक्षा चिंताओं

  1. तो जब प्राप्त करें/पोस्ट करें, तो मैं प्रत्येक परिवर्तनीय htmlentities फ़ंक्शन में जोड़ रहा हूं?

  2. mysql_real_escape_string को प्रतिस्थापित करने के लिए क्या होगा? क्या मुझे इसका इस्तेमाल करना चाहिए?

तो, उदाहरण के लिए, जब

$download = array('url' => $_GET['url']); 

$downloads->insert($download); 

यह ठीक कर रही है?

  1. क्या कोई स्ट्रिंग वास्तव में एक यूआईडी जांचने का कोई तरीका है?

  2. कोई और सोच मुझे मोंगोडीबी और PHP का उपयोग करते समय अवगत होना चाहिए? मुझे जावास्क्रिप्ट का उपयोग करके मेरी कुकीज़ मिलती है, और कुकीज़ का उपयोग करके मेरे डीबी में खोज होती है। उस बारे में क्या?

उत्तर

5

तो जब प्राप्त/पोस्ट, मैं प्रत्येक चर htmlentities समारोह में जोड़ने से कर रहा हूँ?

कोई आवश्यकता नहीं है। हालांकि, आपको XSS हमलों को रोकने के लिए, उपयोगकर्ता द्वारा जेनरेट किए गए डेटा को ब्राउज़र में आउटपुट करते समय htmlentities का उपयोग करना चाहिए।

mysql_real_escape_string को प्रतिस्थापित करने के लिए क्या होगा? क्या मुझे इसका इस्तेमाल करना चाहिए?

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

क्या यह जांचने का कोई तरीका है कि स्ट्रिंग वास्तव में एक यूआईडी है या नहीं?

एकमात्र तरीका यह सत्यापित करना है कि उस स्ट्रिंग के साथ MongoDB से पूछें और जांचें कि यह मौजूद है या नहीं।

लेकिन आप मान्य कर सकते हैं अगर स्वरूप सही है:

$id = '4f1b166d4931b15415000000'; 
$a = new MongoId($id); 
var_dump($a->{'$id'} == $id); // true 

$id = 'foo'; 
$a = new MongoId($id); 
var_dump($a->{'$id'} == $id); // false 

किसी और को लगता है कि मुझे पता है जब MongoDB और PHP का उपयोग किया जाना चाहिए? मुझे जावास्क्रिप्ट का उपयोग करके मेरी कुकीज़ मिलती है, और कुकीज़ का उपयोग करके मेरे डीबी में खोज होती है। उस बारे में क्या?

ज्यादा नहीं। किसी भी वेब एप्लिकेशन के लिए, आप कुकीज़ में संवेदनशील डेटा संग्रहीत करने से बहुत निराश होते हैं, जैसे उपयोगकर्ता पहचानकर्ता, पासवर्ड इत्यादि। क्योंकि उन्हें आसानी से टेम्पर्ड किया जा सकता है और आपके एप्लिकेशन के उन हिस्सों तक पहुंचने के लिए उपयोग किया जा सकता है जिन्हें प्रतिबंधित किया जाना चाहिए, या अन्य उपयोगकर्ताओं का प्रतिरूपण करना ।

+0

उफ़, हटाने UDID, मैं मतलब यूआईडी (_ id) ... –

+0

फिक्स्ड दोनों यहाँ:
उद्धरण से बचने के लिए कोई ज़रूरत नहीं, आदि

आपके मामले में, 'url' के रूप में सरणियों को रोकने के लिए और आपके प्रश्न में। :) – netcoder

+0

बहुत बहुत धन्यवाद! यह वाकई अच्छा है। तो, उदाहरण के लिए, $ डाउनलोड = सरणी ( 'url' => $ _GET ['url'] ); $ Downloads-> सम्मिलित ($ डाउनलोड); क्या यह ठीक है? –

1

Btw मुझे लगता है कि कुछ उदाहरण

yourdomain.com/login?username=admin&passwd[$ne]=1 

के लिए याद किया जाता है SQL में इस इस

SELECT * FROM collection 
    WHERE username="admin", 
    AND passwd!=1 

तरह से मुझे पता है इस sutiations से बचने के लिए मान्य है की तरह लग रहा किस प्रकार का डेटा पता करने के लिए है आप उम्मीद है और इसे कास्ट करें। आशा है कि उत्तर उपयोगी था

0

हाँ, आपको भागने की आवश्यकता है!

कल्पना कीजिए कोड इस तरह:

<?php 
$login = $users->findOne([ 
    'user_id' => $_GET['uid'], 
    'password' => $_GET['password'] 
]); 
?> 

और अनुरोध है:

https://example.com/login?uid=3&password[$neq]=xxx 

यह लॉगिन पारित करेंगे !!
आपको GET/POST मानों को स्ट्रिंग में कनवर्ट करना होगा।

$download = array('url' => (string)$_GET['url']); 
$downloads->insert($download); 
संबंधित मुद्दे