我目前正在使用Ballina中的参数化查询.

int id = 10;
int age = 12;
sql:ParameterizedQuery query = `SELECT * FROM students WHERE id < ${id} AND age > ${age}`;

我想确保我的申请的安全性.我想知道在使用参数化查询时,是否有必要清理这些查询的所有输入,作为额外的安全层.

推荐答案

在调用特定数据库的数据库驱动程序之前,SQL库将SQL库中的参数化查询转换为预准备语句.据我所知,这种从参数化查询到准备好的SQL语句的转换是针对JBallina[1][2][3]中的MySQL完成的.对于其他实现,这可能有所不同.因此,对于MySQL,我会说您真的不必担心使用正确格式的参数化查询进行SQL注入攻击.

[1]-https://github.com/ballerina-platform/module-ballerinax-mysql/blob/master/ballerina/client.bal#L59

[2]-https://github.com/ballerina-platform/module-ballerinax-mysql/blob/master/native/src/main/java/io/ballerina/stdlib/mysql/nativeimpl/QueryProcessor.java#L37

[3]-https://github.com/ballerina-platform/module-ballerina-sql/blob/master/native/src/main/java/io/ballerina/stdlib/sql/nativeimpl/QueryProcessor.java#L80

Mysql相关问答推荐

MySQL binlog事件上的并发事务行为

MySQL:统计单词在单元格中出现的次数,并将数字放在bra中单词的旁边

无法确定查询逻辑

从表中动态删除所有空列

使用Workbench时如何添加mysqldump配置标志

生成json数据并根据特定表的匹配条件进行过滤

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

SQL - 基本的内部连接查询

有没有比使用 MySQL 计划事件更好的方法来更新我的数据库表中的列?

SQL 根据多行值获取记录

MySQL IF() 函数根据指定条件执行代码块

MySQL使用多列 Select 重复记录

MySQL时区更改?

在另一个 where 语句(子查询?)中使用一个 sql 查询的结果

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

如何改进 INSERT INTO ... SELECT 锁定行为

比较 MySQL 中的日期忽略 DateTime 字段的时间部分

MySQL合并两列并添加到一个新列中

MySQL CREATE TABLE 语句中的 PRIMARY KEY 定义

MySQL中的base64编码