[英]How can I sanitize user-input data to be inserted into my Carto Table?
我有一个应用程序,可将用户提供的地理数据和用户输入的注释插入 Carto 表。 Carto SQL API 的工作原理是通过q
参数传递完整的 PostgreSQL 查询。 如何在 javascript 中构造要通过 POST 调用传递给 API 的查询字符串,以便单引号不会破坏我的查询?
目前我正在做类似的事情
var sql = "SELECT insert_data('" + user_input +"');";
$.ajax({type: 'POST',
url: 'https://' + config.cartoUsername + '.carto.com/api/v2/sql', //Sending the data to Carto
crossDomain: true,
data: {"q": sql},
dataType: 'json',
success: function(responseData, textStatus, jqXHR) {
console.log("Data saved");
},
error: function(responseData, textStatus, errorThrown) {
console.log("Problem saving the data");
}
});
如果我提交类似I'm here
那么我会收到 400 错误
{"error":["syntax error at or near \"m\""]}
因为查询看起来像:
SELECT insert_data('I'm here');
是否有方便的前端 javascript 库可以像这样清理 SQL 输入?
试试你的user_input
这种格式。
var user_input = "I am her";
console.log("SELECT insert_data(" + user_input +");");
这个查询看起来像: SELECT insert_data(I am here);
目前我的解决方案是使用string.replace()
和贪婪的全局 REGExp将任意数量的单引号加倍,并使用 JSON.stringify() 来清理双引号。
JSON.stringify(user_input.replace(/'+/g, "''"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.