gpt4 book ai didi

mysql - 使用 RMySQL 的 SQL 插入保护

转载 作者:行者123 更新时间:2023-11-29 05:21:35 24 4
gpt4 key购买 nike

我正在尝试使用 RMySQL 对 SQL 选择语句实现 SQL 插入保护。我一直在尝试在每个风险字符前面添加一个转义字符(即反斜杠) - 即引号(“或')或反斜杠(\)。我正在使用 RMySQL 函数 dbEscapeStrings这似乎类似于 PHP 的 mysql_real_escape_string 函数。

我怀疑我遗漏了一些非常明显的东西,但是,由于 MySQL 要求 WHERE 语句中的字符串用引号括起来,使用 dbEscapeStrings 将转义字符应用于 select 语句中的引号会抛出一个错误阻止所有字符串查询,而不仅仅是注入(inject)攻击。例如,

user <- "'peter'"
tmp <- sprintf("select * from users where username = %s", user)
sql <- dbEscapeStrings(con, tmp)
dbGetQuery(con, sql)

dbEscapeStrings 在每个引号前插入一个双反斜杠(即生成的 sql 变量是 "select * from users where username =\\'peter\\'"),这会引发语法错误dbGetQuery 运行时的 MySQL 服务器。

关于如何使上述工作或使用 RMySQL 实现替代 SQL 插入保护的任何建议? RMySQL 是否提供使用准备好的语句来防止插入攻击?

最佳答案

最安全(也是最简单)的方法是使用参数化查询(这在 CRAN 版本中不可用,但在开发版本中可用)

dbGetQuery(myconnection, "SELECT * FROM users WHERE username = ?", list(user))

关于mysql - 使用 RMySQL 的 SQL 插入保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com