我正在创建一个基本的聊天应用程序。它涉及一个文本字段,用户可以在其中输入任何文本并单击发送按钮。
该应用程序对于您在文本框中输入的任何字符串(包含引号的字符串)都可以正常工作。尝试将字符串添加到sql数据库时,由于引号未转义,因此出现数据库异常。
在字符串上执行replaceAll("'", "\'").replaceAll('"', "\'")
就像在sql查询中使用双引号一样,但是现在所有的双引号都是单引号。
感谢您的帮助。
答案 0 :(得分:2)
数据库是否支持绑定参数?如果不是,您用来与数据库对话的包是否具有字符串转义功能?
与手动操作相比,这些方法会更好,尤其是因为用户输入中除了引号之外可能存在非常不安全的内容。如果您手动将查询字符串组合在一起并将其发送到数据库,那么它将容易受到SQL攻击。
对于您的紧迫问题,您将在两个地方都用单引号代替。假设您可以通过在斜杠前加反斜杠来使报价转义,则其外观应类似于.replaceAll('"', '\\"')
。
请寻找一种更安全的方式来清理用户输入。
答案 1 :(得分:1)
在Dart中运行查询SQL的最佳,最安全的方法是使用绑定参数。
例如,如果您使用sqflite,则需要使用?以这种方式在列表中传递参数。作为查询中的通配符:
插入
int id2 = await txn.rawInsert(
'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
['another name', 12345678, 3.1416]);
更新
int count = await database.rawUpdate(
'UPDATE Test SET name = ?, value = ? WHERE name = ?',
['updated name', '9876', 'some name']);
删除
count = await database
.rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);