के लिए भागने के लिए जरूरी है, तो मुझे कैसे पता चलेगा कि मैं CodeIgniter के साथ एक साइट बनाने की प्रक्रिया में हूं। यह पहली साइट है जिसे मैंने स्वयं बनाया है जो डेटाबेस के साथ इंटरैक्ट करता है। मैं इस परियोजना के लिए MySQL का उपयोग कर रहा हूँ। मैं डेटाबेस को सहेजने से पहले डेटा को कैसे बचाना चाहता हूं, यह कैसे बता सकता हूं?माईएसQL
माईएसQL
उत्तर
आप query bindings साथ database class का उपयोग कर रहे हैं, तो आप किसी भी मैनुअल एस्केपिंग करने के लिए की जरूरत नहीं है:
बांध का उपयोग करने का लाभ यह है कि माध्यमिक मान स्वचालित रूप से बच गए, सुरक्षित प्रश्नों का निर्माण कर रहे हैं । आप को मैन्युअल रूप से से बचने के लिए याद रखना आवश्यक नहीं है; इंजन स्वचालित रूप से आपके लिए करता है।
PHP में:
संदेह में, इसे सब से बचें। बहुत सुरक्षित नहीं हो सकता है।
ठीक है, ठीक है। मैं इसे
हमेशा बच
उपयोगकर्ता पर भरोसा न करें। – Josiah
गलत जवाब है। आपका, @ जोशिया भी। उपयोगकर्ता या संदेह प्रासंगिक कुछ भी नहीं है। बिल्कुल कुछ भी प्रासंगिक नहीं है। भागना बिना शर्त प्रक्रिया है। कर्नल श्रापनेल को –
+1। भागने वास्तव में एक सुरक्षा मुद्दा नहीं है, बचाना क्वेरी वैध बनाने का तरीका है। – zerkms
खुद के बचने (आप इसे पेंच जाएगा) के बारे में चिंता मत करो मिलता है। एक डीबी परत का उपयोग करें जहां आप पहले कथन तैयार करते हैं, और उसके बाद डेटा जोड़ें।
PHP में आपको PDO का उपयोग करना चाहिए। आप
SELECT * FROM table WHERE key = :key AND value = :value
और फिर फ़ंक्शन कॉल करके डेटा जोड़ें।
बचने के लिए कब? जैसे ही आपकी साइट सार्वजनिक हो जाती है।
भयानक गलत गलती। सही उत्तर - जैसे ही आप डेटाबेस –
@Col के साथ काम करना शुरू करते हैं, कृपया अपना उत्तर लिखें ताकि हम इसे बेहतर तरीके से +1 कर सकें ;-) (विडंबना नहीं) – zerkms
यदि डेटा एक स्ट्रिंग है, तो इसे हमेशा से बच जाना चाहिए।
हालांकि, इसके बजाय पैरामीटर का उपयोग करना बेहतर है।
आप एक MySQL क्वेरी स्ट्रिंग जब स्ट्रिंग के किसी भी उदाहरण के लिए उपयोगकर्ता इनपुट से बना है, से बचने के $ उपयोगकर्ता नाम =; // उपयोगकर्ता इनपुट से
तो मान आपकी क्वेरी स्ट्रिंग है: "(।। $ उपयोगकर्ता नाम") "
आप इस mySQL क्वेरी से बचने के लिए इस तथ्य की वजह $ उपयोगकर्ता नाम चर होता potentionally दूषित कोड हो सकता था जांच table
('उपयोगकर्ता नाम') मान प्रविष्ट करें" ग्राहक द्वारा डाला गया अपने डेटाबेस में इंजेक्शन के लिए।
एक क्वेरी स्ट्रिंग नहीं बल्कि डेटा स्ट्रिंग। नहीं जब कोई भी स्ट्रिंग उपयोगकर्ता इनपुट से बना है, लेकिन सिर्फ ** कोई स्ट्रिंग **। आंकड़े –
मैं सलाह देता हूं कि आप तैयार बयानों का उपयोग करने के लिए खुद को आदी करें। खासकर जब से आप डेटाबेस के साथ काम करने के लिए नए हैं। जितनी जल्दी आप इनका उपयोग करना शुरू करते हैं, उतना आसान यह दूसरी प्रकृति बन जाता है।
उदाहरण के लिए, मैंने डेटाबेस के साथ शुरू होने पर तैयार वक्तव्यों के बारे में नहीं पता था। और जब मैं उनके संपर्क में आया तो मैंने अपनी खुद की जिद्दी अनुभव की। क्योंकि मैंने पहले से ही चीजों को करने के किसी अन्य तरीके से आदी हो गई थी। अब, यह आपके लिए एक चरित्र व्यापार नहीं हो सकता है, लेकिन इसे किसी भी तरह से जल्द से जल्द शुरू करने में कोई दिक्कत नहीं होती है।
तैयार बयानों से आप प्रश्नधारकों को प्रश्नों में उपयोग करने की अनुमति देते हैं। इन प्लेसहोल्डर को वास्तविक मूल्यों के साथ प्लेसहोल्डर को बाध्य करके प्रतिस्थापित किया जा सकता है। बाध्यकारी की यह प्रक्रिया स्वचालित रूप से मूल्यों से बच जाती है।
यहाँ एक (सरल) PDO उदाहरण है:
$db = new PDO(/* some database parameters */);
$statement = $db->prepare('INSERT INTO table VALUES(:username, :password)');
$statement->bindValue(':username', $dirtyUsername);
$statement->bindValue(':password', $dirtyPassword);
$result = $statement->execute();
// result checking ommited for brevity
वहाँ बहुत कुछ के पीडीओ और तैयार बयान के साथ अधिक संभावनाएं है। उदाहरण के लिए आप आसानी से तैयार बयान एक पाश में, इस तरह के रूप पुन: उपयोग कर सकते हैं:
$statement = $db->prepare('INSERT INTO table VALUES(:username, :password)');
foreach($users as $dirtyUser)
{
$statement->bindValue(':username', $dirtyUser->username);
$statement->bindValue(':password', $dirtyUser->password);
$result = $statement->execute();
// result checking ommited for brevity
}
या तो की तरह, निष्पादित विधि के लिए प्लेसहोल्डर बाइंडिंग पारित:
$statement = $db->prepare('INSERT INTO table VALUES(:username, :password)');
$result = $statement->execute(array(
':username' => $dirtyUsername,
':password' => $dirtyPassword
));
// result checking ommited for brevity
... आदि, आदि
बाध्यकारी की प्रक्रिया से बचने से कोई फर्क नहीं पड़ता है। बाकी ठीक है –
पीडीओ का उपयोग करने के मामले में यह वास्तव में हो सकता है (ठीक है, bindParam() को बिल्कुल कॉल नहीं)। जब ATTR \ _EMULATE \ _PREPARES ध्वज सेट किया जाता है (या मजबूर होता है क्योंकि ड्राइवर सर्वर-पक्ष तैयार कथन का समर्थन नहीं करता है) पीडीओ एक क्वेरी स्ट्रिंग बनाता है जिसमें (बच निकला) पैरामीटर होता है। – VolkerK
यदि आप पीडीओ जैसे कुछ का उपयोग करने के बजाय स्वयं को एसक्यूएल उत्पन्न कर रहे हैं, तो आपको हमेशा भागने के तारों को अवश्य करना होगा।
स्ट्रिंग से बचने से SQL भाषा की मूल आवश्यकता होती है। यह आपको सबकुछ खराब होने के बिना स्ट्रिंग में एस्ट्रोफ़ेस या बैकस्लाश जैसे वर्णों का उपयोग करने की अनुमति देता है। ऐसी कोई परिस्थिति नहीं है जिसमें तारों से बचने की आवश्यकता नहीं है।
यहां तक कि गैर-तारों को भी यह सुनिश्चित करने के लिए फ़िल्टर किया जाना चाहिए कि वे वास्तव में गैर-तार हैं।
यदि आप सीख रहे हैं, तो कृपया अपने स्वयं के तारों से बचने के बजाय पीडीओ जैसे कुछ सीखने पर गंभीरता से विचार करें।
- 1. माईएसQL डीबी
- 2. माईएसQL डेटाबेस
- 3. माईएसQL क्वेरी
- 4. स्प्रिंग जेडीबीसीटीप्लेट टेबल माईएसQL
- 5. कैशिंग माईएसQL क्वेरी
- 6. हैडोप और माईएसQL एकीकरण
- 7. माईएसQL क्वेरी ऑर्डर अगर शून्य
- 8. ओएसजीआई में ओपनजेपीए माईएसQL जेडीबीसी कनेक्टर बंडल नहीं ढूंढ रहा
- 9. स्नो तेंदुए पर रूबी 1.9 से वेनिला माईएसQL पहुंच
- 10. पायथन और डीजेगो ऑपरेशनल एरर (2006, 'माईएसQL सर्वर दूर चला गया है')
- 11. मैं माईएसQL कनेक्टर/सी ++ से देशी सी एपीआई कनेक्शन संरचना कैसे प्राप्त कर सकता हूं?
- 12. कॉम्प्लेक्स माईएसQL क्वेरी अभी भी फाइलोर्ट का उपयोग कर रहा है हालांकि इंडेक्स मौजूद हैं
- 13. बिनलॉग माईएसQL प्रतिकृति एक "बाघ का थैला" है। क्या कोई अच्छा विकल्प है?
- 14. मेरी माईएसQL क्वेरी तेज क्यों होती है जब मैं इसे इस तरह करता हूं और धीमा करता हूं जब मैं इसे इस तरह करता हूं?
- 15. पैरामीटरयुक्त प्रश्नों के उदाहरण
- 16. कमांड लाइन का उपयोग कर MySQL वर्कबेंच से SQL स्क्रिप्ट कैसे उत्पन्न करें?
- 17. हाइव क्वेरी परिणाम MySQL के "\ G" जैसे ऊर्ध्वाधर प्रारूप में हैं?
- 18. MySQL
- 19. MySQL वर्कबेंच बनाम phpMyAdmin
- 20. MySQL: पंक्तियों को दो बार बार-बार कैसे प्राप्त करें
- 21. डाटाबेस में एनम स्टोर करने के लिए सबसे अच्छी विधि
- 22. मैं रेल 3 में डिफ़ॉल्ट डेटाबेस के रूप में MySQL कैसे सेट करूं?
- 23. रेल के रूप में तेज़ी से खोज को कैसे कार्यान्वित करें (SAYT) एपीआई 3 अनुप्रयोग
- 24. पाइथन
- 25. सबवर्सन और अपाचे
- 26. Drupal उपयोगकर्ता पासवर्ड प्रोग्रामेटिक रूप से कैसे बदलें?
- 27. जॉइन/यूनियन का उपयोग किए बिना खंड में WHERE से डुप्लिकेट वापस करने के लिए MySQL को फोर्स करें?
- 28. क्या यह एक प्रतिकृति MySQL-process को मारने के लिए सुरक्षित है जो 'tmp table पर प्रतिलिपि' है?
- 29. क्या एमएएमपी प्रो के लिए कोई मुफ्त विकल्प है?
- 30. क्यों GeneratedKeys() कॉलम नाम के रूप में "GENERATED_KEY" लौटाता है?
डाउनवॉटर को कृपया विस्तृत करने की परवाह करें;) हेक, यह है कोडइग्निटर के लिए प्रासंगिक एकमात्र उत्तर। –
मैं मूर्खतापूर्ण दूसरे भाग की वजह से डाउनवॉटेड हूं। यह सवाल और भयानक विचार के लिए अप्रासंगिक है। यदि आपको व्यवसाय तर्क की वजह से डेटा फ़िल्टर करने की आवश्यकता है - ऐसा करें, लेकिन सुरक्षित कुछ करने की कोशिश करने के लिए ऐसा न करें। – zerkms
+1 सही और संदर्भ प्रदान करता है। यह इस तथ्य का भी उपयोग करता है कि प्रश्न पूछने वाला कोडिनिटर –