क्या माइस्क्लुएल स्ट्रिंग को MySQL के लिए अनुकूल नोडजेएस को पास करने के लिए दूर है? मैं अपने नोडजेएस सर्वर पर एक ईमेल पता पास करने और MySQL डेटाबेस में क्वेरी करने की कोशिश कर रहा हूं। उपयोगकर्ता नाम जैसे नियमित पाठ करते समय ठीक काम करता है, लेकिन ईमेल पता नहीं करता है। बचने का स्पष्ट रूप से सही जवाब नहीं है क्योंकि यह एसक्यूएल सम्मिलन के लिए नहीं है। मुझे लगता है कि मुझे PHP फ़ंक्शन mysql_real_escape_string()
की लाइनों पर कुछ चाहिए।जावास्क्रिप्ट स्ट्रिंग एसक्यूएल दोस्ताना बनाना
उत्तर
यह पता चला है कि mysql_real_escape_string() बहुत छोटा है। According to the documentation:
।mysql_real_escape_string() कॉल MySQL के पुस्तकालय समारोह mysql_real_escape_string है, जो निम्न वर्णों को बैकस्लैश पहले जोड़ता: \ x00, \ N, \ r \ ', "और \ x1a
बहुत सरल है, वास्तव में लगता है आप कुछ इस तरह कर सकता है:।
function mysql_real_escape_string (str) {
return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
switch (char) {
case "\0":
return "\\0";
case "\x08":
return "\\b";
case "\x09":
return "\\t";
case "\x1a":
return "\\z";
case "\n":
return "\\n";
case "\r":
return "\\r";
case "\"":
case "'":
case "\\":
case "%":
return "\\"+char; // prepends a backslash to backslash, percent,
// and double/single quotes
}
});
}
नोट: मैं यह किसी भी रों के माध्यम से नहीं चला है यूनिट टेस्ट या सुरक्षा परीक्षण का ऑर्ट, लेकिन ऐसा लगता है कि - और एक अतिरिक्त बोनस के रूप में, यह टैब, बैकस्पेस और '%' से बच निकलता है, इसलिए इसे OWASP's recommendations के अनुसार, LIKE क्वेरीज़ में भी उपयोग किया जा सकता है (विपरीत PHP मूल)।
मुझे पता है कि mysql_real_escape_string()
चरित्र-सेट-जागरूक है, लेकिन मुझे यकीन नहीं है कि कौन सा लाभ जोड़ता है।
इन मुद्दों की एक अच्छी चर्चा over here है।
यह बहुत बढ़िया @ पॉल है जो वास्तव में काम करता है। – Bobby
@ बॉबी वैसे मैं आपके जैसा आश्चर्यचकित हूं! मुझे उम्मीद है कि यह सभी स्थितियों में सुरक्षित है :-) –
@ बॉबी इमोजी को न भूलें जो त्रुटि को ट्रिगर कर सकता है। 'var m = m.replace (/ ([\ uE000- \ uF8FF] | \ uD83C [\ uDF00- \ uDFFF] | \ uD83D [\ uDC00- \ uDDFF])/g,' ');' जोड़ा जा सकता है – zipp
मामले में किसी को इस प्रकार CUBRID RDBMS कार्यों में की तलाश में है, escapeString():
var _escapeString = function (val) {
val = val.replace(/[\0\n\r\b\t\\'"\x1a]/g, function (s) {
switch (s) {
case "\0":
return "\\0";
case "\n":
return "\\n";
case "\r":
return "\\r";
case "\b":
return "\\b";
case "\t":
return "\\t";
case "\x1a":
return "\\Z";
case "'":
return "''";
case '"':
return '""';
default:
return "\\" + s;
}
});
return val;
};
यह CUBRID Node.js driver से एक अंश है।
आप इस तरह के रूप CJK पात्रों http://en.wikipedia.org/wiki/CJK_characters या iOS/एंड्रॉयड/अन्य मोबाइल फोन के कुछ विशेष भावनात्मक माउस के साथ खेल रहे हैं, तो ... "‡ ‰ ™ ©" या decodeURIComponent ("\ xF3 xBE \ xAD \ xA0 \") ।
आप एक मामले बयान के बजाय सरणियों का उपयोग करते हुए इस
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
skip-character-set-client-handshake
की तरह अपने my.cnf स्थापित करने के लिए की आवश्यकता होगी:
var regex = new RegExp(/[\0\x08\x09\x1a\n\r"'\\\%]/g)
var escaper = function escaper(char){
var m = ['\\0', '\\x08', '\\x09', '\\x1a', '\\n', '\\r', "'", '"', "\\", '\\\\', "%"];
var r = ['\\\\0', '\\\\b', '\\\\t', '\\\\z', '\\\\n', '\\\\r', "''", '""', '\\\\', '\\\\\\\\', '\\%'];
return r[m.indexOf(char)];
};
//Implementation
"Some Crazy String that Needs Escaping".replace(regex, escaper);
मुझे लगा कि मेरे उत्तर में स्विच स्टेटमेंट से ऐसा करने के कुछ और सरल तरीके थे। मुझे संदेह है कि यह मेरे से भी अधिक कुशल है, लेकिन निश्चित रूप से मैंने तुलना नहीं की है देखें। वैकल्पिक दृष्टिकोण का योगदान करने के लिए धन्यवाद! –
केस स्टेटमेंट्स का एक और सेट लिखने के बजाय दूसरी तरफ जाने की स्थिति में दोनों को स्वैप करना आसान है। मेरी राय में यह और अधिक कार्यात्मक और अधिक है जावास्क्रिप्ट की भावना। सबसे अधिक संभावना पर काफी सुधार किया जा सकता है। – Justin
कठिन रास्ता है कि इस समारोह के लिए संख्या गुजर पूरे का कारण बनता है सीखा प्रक्रिया का उपयोग चुपचाप मरने के लिए किया जाता है। तो मैं एक छोटे से परीक्षण जोड़ें:
function mysql_real_escape_string (str) {
if (typeof str != 'string')
return str;
return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
switch (char) {
case "\0":
return "\\0";
case "\x08":
return "\\b";
case "\x09":
return "\\t";
case "\x1a":
return "\\z";
case "\n":
return "\\n";
case "\r":
return "\\r";
case "\"":
case "'":
case "\\":
case "%":
return "\\"+char; // prepends a backslash to backslash, percent,
// and double/single quotes
}
});
}
यह वास्तव में अच्छा है स्वीकार्य उत्तर के अलावा। धन्यवाद। – Dave
- 1. php: एसईओ दोस्ताना यूआरएल
- 2. दोस्ताना यूआरएल
- 3. जावास्क्रिप्ट: स्ट्रिंग
- 4. पायथन: यूनिकोड स्ट्रिंग बनाना
- 5. बनाना OpenXML जावास्क्रिप्ट
- 6. जावास्क्रिप्ट गेम ट्यूटोरियल बनाना
- 7. बनाना लाइव घड़ी जावास्क्रिप्ट
- 8. एसक्यूएल स्ट्रिंग
- 9. एसक्यूएल स्ट्रिंग
- 10. एसक्यूएल स्ट्रिंग
- 11. कोडइग्निटर: एसईओ दोस्ताना यूआरएल
- 12. जीडब्ल्यूटी एसई दोस्ताना आवेदन
- 13. आईओएस - दोस्ताना एनएसडीएटी प्रारूप
- 14. परिणाम सेट से एक लंबी स्ट्रिंग बनाना
- 15. बनाना/पॉप्युलेट जावास्क्रिप्ट कस्टम वस्तु
- 16. जावास्क्रिप्ट में नए ऑब्जेक्ट्स बनाना
- 17. जावास्क्रिप्ट - स्ट्रिंग
- 18. जावास्क्रिप्ट स्ट्रिंग
- 19. जावास्क्रिप्ट: स्ट्रिंग
- 20. जावास्क्रिप्ट स्ट्रिंग
- 21. एसक्यूएल सर्वर संग्रहीत प्रक्रिया को एसक्यूएल इंजेक्शन से सुरक्षित बनाना
- 22. रेल में दोस्ताना बाइट स्वरूपण
- 23. एसईओ दोस्ताना यूआरएल Rewriter पैरामीटर
- 24. सी ++ 11 दोस्ताना ग्राफिक्स लाइब्रेरी
- 25. दोस्ताना आईडी और आरक्षित शब्द
- 26. टी-एसक्यूएल: स्ट्रिंग कॉन्सट
- 27. एसक्यूएल विभाजन स्ट्रिंग PostgreSQL
- 28. एसक्यूएल कनेक्शन स्ट्रिंग
- 29. एसक्यूएल मिलान स्ट्रिंग
- 30. एसक्यूएल स्ट्रिंग मैनिपुलेशन
आप आप एक डालने समारोह – Raynos
मैं कर रहा हूँ करने के लिए कुंजी/मान जोड़े में पारित करने के लिए अनुमति देता है कि एक उचित mysql पुस्तकालय की तर्ज पर इनपुट और फिर कुछ प्रतिबंध लगाया की तर्ज पर कुछ चाहिए NodeJS MySQL लाइब्रेरी का उपयोग करके जो ठीक काम करता है। मैं इसे ठीक से कैसे व्यवस्थित करूं? – Bobby
उस पर एक ईमेल regexp चलाएं, अगर यह क्लाइंट को एक त्रुटि संदेश वापस विफल करने में विफल रहता है। – Raynos