मैं उपयोगकर्ताओं को सुरक्षित रूप से MySQL और PDO में कहां क्लॉज बनाने देता हूं? - mysql, pdo, एसक्यूएल इंजेक्शन

परिदृश्य का सबसे अच्छा अभ्यास क्या है जहाँ आपके पास जटिल, उपयोगकर्ता-निर्दिष्ट WHERE क्लॉज़ है और आप PDO और MySQL का उपयोग करना चाहते हैं?

मेरे उपयोगकर्ताओं को एक या अधिक निर्दिष्ट करने में सक्षम होने की आवश्यकता हैतालिका के एक या अधिक स्तंभों के लिए चयन मानदंड वे "क्वेरी कर रहे हैं।" पैराड्राइज्ड क्वेश्चन एसक्यूएल इंजेक्शन हमलों के खिलाफ पेश किए जाते हैं।

मैं बिल्कुल वही करने की कोशिश कर रहा हूँ जो इस आदमी ने किया:

एकाधिक WHERE- खंडों के साथ MySQL क्वेरी को कैसे निष्पादित कर सकते हैं?

... सिवाय इसके कि मैं एक अच्छा सा कोडनेम बनने की कोशिश कर रहा हूं और php_mysql के बजाय पीडीओ का उपयोग करता हूं, और स्ट्रिंग-सैनिटाइजिंग पर भरोसा नहीं करना चाहिए जब तक कि वास्तव में लोग ऐसे परिदृश्यों के लिए क्या न करें।

ओह, एक और बात:

मुझे लगता है कि मैं प्रत्येक उपयोगकर्ता-प्रदत्त मानदंड को पारित कर सकता हूं [column, operator, value] array (e.g. [ "age", ">", "30" ])।मैं सत्यापित कर सकता हूं कि उस सरणी के पहले दो तत्व क्रमशः वैध कॉलम नामों और ऑपरेटर नामों से मेल खाते हैं, अंतिम तत्व को एक संख्या तक ले जाते हैं, और फिर उन्हें PHP स्क्रिप्ट में WHERE क्लॉज वाले स्ट्रिंग में जोड़ते हैं। लेकिन एक कसौटी का क्या ["fullname","like","M_rty M%cFly"]? अब मैं उपयोगकर्ता-निर्मित वर्ण स्ट्रिंग्स को सैनिटाइज़ करने के लिए वापस आ गया हूँ, "मैं?"

उत्तर:

जवाब के लिए 2 № 1

लेकिन एक कसौटी का क्या ["fullname","like","M_rty M%cFly"]?

कॉलम नामों और ऑपरेटरों के लिए (सहित) LIKE) उन्हें मान्य करने के लिए श्वेतसूची का उपयोग करें। यदि उपयोगकर्ता इनपुट "t एक ज्ञात मान्य विकल्प से मेल नहीं खाता है, तो" उस इनपुट का उपयोग न करें।

किसी भी शाब्दिक स्ट्रिंग मान के लिए, जैसे "M_rtyM% cFly ", क्वेरी मापदंडों का उपयोग करें। संख्यात्मक या दिनांक शाब्दिक के लिए समान। क्वेरी पैरामीटर किसी भी गतिशील सामग्री के लिए सबसे अच्छा है जिसे SQL अभिव्यक्ति में शाब्दिक मूल्य के रूप में माना जाना चाहिए।

मानों के लिए क्वेरी पैरामीटर का उपयोग करें, और अन्य मामलों के लिए श्वेतसूची का उपयोग करें।


संबंधित सवाल
सबसे लोकप्रिय