चूंकि ऐप इंजन वास्तव में एसक्यूएल का उपयोग नहीं करता है, इसका मतलब यह है कि ऐप इंजन ऐप्स एसक्यूएल इंजेक्शन हमलों से प्रतिरक्षा हैं?क्या एक Google ऐप इंजन ऐप एसक्यूएल इंजेक्शन हमलों के लिए अतिसंवेदनशील है?
उत्तर
कृपया एप्लिकेशन इंजन सुरक्षा के बारे में चर्चा के लिए this question देखते हैं। सामान्य रूप से आपको किसी भी प्रकार की क्वेरी उत्पन्न करने के लिए पैरामीटर बाइंडिंग का उपयोग करना चाहिए।
एक टिप्पणी होना चाहिए – Sheena
खैर कोई एसक्यूएल == कोई एसक्यूएल इंजेक्शन, परिभाषा के द्वारा। :-)
लेकिन तुम सकता है निश्चित रूप से कर GQL इंजेक्शन, अगर एप्लिकेशन GQL उपयोग कर रहा है और भोलेपन से बचने के बिना प्रश्नों में स्ट्रिंग शाब्दिक मूल्यों चिपके हुए। इसके साथ आप जो नुकसान कर सकते हैं वह SQL के कुछ प्रकारों से कम है जो आपको ;
देता है - वर्तमान क्वेरी को समाप्त करें और एक ही स्ट्रिंग में एक नया प्रारंभ करें, लेकिन यह अभी भी संभावित रूप से खतरनाक है।
GQLQuery provides एक साधारण अंतर्निहित पैरामीटर बाध्यकारी तंत्र, हालांकि (कुछ भाषाओं के डिफ़ॉल्ट पुस्तकालयों के विपरीत ...)। तो अभी भी एक क्वेरी स्ट्रिंग में स्ट्रिंग अक्षर को भरने का कोई बहाना नहीं है।
हाँ, वे दोनों समान रूप से इंजेक्शन हमलों के लिए अतिसंवेदनशील बशर्ते आप GQL तार के साथ उपयोगकर्ता के आदानों श्रृंखलाबद्ध की तर्ज पर कुछ करना हैं।
हालांकि, अगर आप जब एक GQL स्ट्रिंग में मानों inputting मापदंडों का उपयोग कर के गूगल के सबसे ज्यादा अभ्यास सुझाव का पालन, आप GQL के साथ ठीक किया जाना चाहिए। तो बजाय:
query = GqlQuery("SELECT * FROM Song WHERE composer = 'Lennon, John'")
आप का उपयोग कर सकते हैं:
query = GqlQuery("SELECT * FROM Song WHERE composer = :1", "Lennon, John")
या:
query = GqlQuery("SELECT * FROM Song WHERE composer = :composer", composer="Lennon, John")
साथ ही, आपको Query class का उपयोग कर क्वेरी उत्पन्न करने के लिए पूरी तरह से इस समस्या से बचने होगा।
यदि आप स्पष्ट रूप से बता सकते हैं कि ऐप इंजन कहीं भी एसक्यूएल का उपयोग नहीं करता है (या तो सीधे फ्रंट-एंड के माध्यम से, या बैक एंड पर कहीं) तो यह ऐसे हमलों से प्रतिरक्षा है। अन्यथा, कौन जानता है। –
क्या आप [डेटास्टोर] (https://developers.google.com/appengine/docs/java/datastore/) का जिक्र कर रहे हैं? –