是否有必要將JavaScript字符串傳遞給NodeJS友好的MySQL?我試圖將電子郵件地址傳遞給我的NodeJS服務器並查詢到MySQL數據庫。當做常規文本,如用戶名工作正常,但電子郵件地址沒有。顯然使用轉義不是正確的答案,因爲它不適用於SQL插入。我假設我需要PHP函數mysql_real_escape_string()
的一些東西。製作一個javascript字符串sql友好
回答
事實證明,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
}
});
}
注意:我沒有經過任何的run這個單元測試或安全測試,但它似乎工作 - 並且,作爲額外的獎勵,它逃脫選項卡,退格和'%',因此它也可以在LIKE查詢中使用,按照OWASP's recommendations(不同於PHP原創)。
我知道mysql_real_escape_string()
是字符集意識,但我不確定增加什麼好處。
對這些問題有很好的討論over here。
萬一有人在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/Android /其他手機的某些特殊情感圖標(如「 ‡‰™©」或decodeURIComponent(「\ xF3 \ xBE \ xAD \ xA0」)) 。
您將需要設置你的my.cnf這樣
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
skip-character-set-client-handshake
使用數組,而不是一個case語句:
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);
我覺得有一些比我的答案中的switch語句更直接的方法,我懷疑它比我的效率更高,但我當然沒有做過比較請參閱。感謝您提供了一種替代方法! –
在不得不另外寫一套病例陳述的情況下,更換兩者更容易。在我看來,它更具功能性,更多Javascript的精神,最有可能會大大改善。 – 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. 談到Html.ValidationSummary到一個JavaScript字符串友好
- 2. PHP:URL友好字符串
- 3. 串聯小時陣列成一個友好的字符串
- 4. 製作一個移動友好網站
- 5. 創建一個URL友好的字符串
- 6. 靜態HTML Typed.js /字符串(SEO友好)
- 7. 友好的URL和查詢字符串
- 8. 如何將字符串轉換爲HTML友好的字符串
- 9. SQL Server:字符串操作來寫出搜索引擎優化友好標題
- 10. 在PHP中將一個名稱轉換爲一個URL友好的字符串?
- 11. 製作一個字符串Palindrome in C
- 12. 製作一個字符串模式
- 13. 製作一個字符串頻率表
- 14. 唯一ID SQL好友
- 15. Javascript添加數字,就好像它們是一個字符串
- 16. 製作一個定製的wordpress主題移動友好
- 17. JavaScript的簡單的正則表達式 - 限制字符串恰好有「#」作爲第一個字符
- 18. 在一個字符串複製一個字符,留下一個空字符串
- 19. 將一個朋友的名字的PHP字符串傳遞給javascript函數
- 20. SQL Server的一個字符串中刪除多個字符串
- 21. Htaccess重定向一個ID查詢字符串URL到用戶友好的URL
- 22. 在列表製作列表中的一個字符串,兩個字符串
- 23. JavaScript - 讀取二進制文件,並從它製作一個字符串
- 24. JavaScript字符串限制?
- 25. 將一個字符串作爲十六進制一個uint32_t的
- 26. 使用JavaScript從乾淨/ SEO友好的URL獲取查詢字符串參數
- 27. 將字符串轉換爲Javascript安全且友好的變量名稱
- 28. 多個SQL字符串不能工作
- 29. 限制一個字符串256字節
- 30. 寫一個友好的URL
你需要沿着正確的MySQL庫,它允許你在鍵/值對傳遞給插入函數 – Raynos
我的線消毒輸入,然後什麼東西線使用工作正常的NodeJS MySQL庫。我將如何正確地進行消毒? – Bobby
運行電子郵件正則表達式,如果失敗,則將錯誤消息發送回客戶端。 – Raynos