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
default:
return char;
}
});
}
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
}
});
}
var mysql = require('mysql')
var connection = mysql.createConnection( // your connection string here
var query = "SELECT THING FROM THING WHERE FRED= " + connection.escape( your_string_here );
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;
};
9条答案
按热度按时间ut6juiuv1#
事实证明,mysql_real_escape_string()是非常微不足道的。According to the documentation:
**mysql_真实的_escape_string()**调用MySQL的库函数mysql_real_escape_string,该函数在以下字符前面添加反斜杠:\x00、\n、\r、\、'“和\x1a。
实际上,听起来很简单。你可以这样做:
注意:我还没有通过任何类型的单元测试或安全测试来运行它,但它似乎确实工作了--而且,作为一个额外的好处,它转义了制表符、退格和'%',所以它也可以用于LIKE查询,这是OWASP的建议(与PHP原始版本不同)。
我确实知道
mysql_real_escape_string()
是字符集感知的,但我不确定这会增加什么好处。有一个很好的讨论这些问题over here。
6yoyoihd2#
我知道了一个很难的方法,即向这个函数传递数字会导致使用它的整个过程安静地结束。所以我添加了一个小测试:
wgeznvg73#
对于那些从2018年开始就要回答这个问题的人来说,还值得注意的是,许多javascript数据库框架现在都包含了connection.escape方法。
例如:
pjngdqdw4#
如果有人正在查找,CUBRID RDBMS中的escapeString()的工作方式如下:
这是摘自CUBRID Node.js驱动程序的内容。
s6fujrry5#
使用数组而不是case语句:
vjhs03f76#
也适用于前端项目的解决方案
安装sqlstring(由mysqljs维护的库):
如果您使用TypeScript,您还可以安装类型:
然后使用它:
omjgkv6w7#
如果你正在玩中日韩字符http://en.wikipedia.org/wiki/CJK_characters或一些特殊的情绪图标的iOS/Android/其他手机...如“‡ ‰ ©“或decodeURIComponent(“\xF3\xBE\xAD\xA0”).
您将需要如下设置my.cnf
anauzrmj8#
为什么不简单地使用内置函数
escape
呢?这对我在后端使用MySQL很有效。
t98cgbkg9#
这是在JavaScript代码中编写SQL查询简单方法
常量查询=
INSERT INTO users (firstName, lastName) VALUES ( "${firstName}", "${lastName}")