它在 RDS 代理的文档中说,当应用程序使用准备好的语句时,连接会自动固定:
准备好的语句使代理固定会话。无论准备好的语句使用 SQL 文本还是二进制协议,此规则都适用。(https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html)
在使用 RDS 代理时,我应该如何保护我的应用程序免受 SQL 注入?我正在使用此服务在我的微服务中更快地建立与数据库的连接,因此我希望重用该连接。
它在 RDS 代理的文档中说,当应用程序使用准备好的语句时,连接会自动固定:
准备好的语句使代理固定会话。无论准备好的语句使用 SQL 文本还是二进制协议,此规则都适用。(https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html)
在使用 RDS 代理时,我应该如何保护我的应用程序免受 SQL 注入?我正在使用此服务在我的微服务中更快地建立与数据库的连接,因此我希望重用该连接。
我有同样的问题。我为 Postgresql RDS 使用了 RDS 代理。为了连接到 RDS 代理,我使用了 gem 'pg'(ruby 项目)。
起初,我在连接建立时禁用了一些对数据库的初始查询(如设置时区等)。
以及准备好的陈述的问题。如果 rds 代理看到如下查询,则将会话固定:
SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
因此,如果 rds 代理看到该查询,会话将被固定。但是,如果您以这种方式进行查询,则会话将不会被固定:
SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
因此,当我稍微更改我的库代码时,我解决了这个问题。如果您为 rds 代理启用日志(高级配置),它也会非常有帮助。启用后,您可以查看为什么您的会话被固定在 Cloud Watch 指标中。
我试图将?binary_parameters=yes
或附加&binary_parameters=yes
到连接字符串。
IE
postgres://user:password@rds-proxy.proxy-dgi349gjv95j.us-east-1.rds.amazonaws.com:5432/db_name?binary_parameters=yes
并且我看到了针上的一滴prepared_statements
。
我还没有遵循该解决方案,因为我仍在调查 RDS 代理是否仍然是我们用例的最佳选择。