当前位置: 首页 > 知识库问答 >
问题:

在JDBC查询中使用表名作为参数的安全方法

冯旭
2023-03-14

将表名作为参数放入SQL查询的安全方法是什么?不能使用PreparedStatement将表名作为参数。使用语句串联字符串以执行具有动态表名的查询是可能的,但不建议这样做,因为存在SQL注入的风险。最好的方法是什么?

共有1个答案

孔宇
2023-03-14

我会尝试解决设计问题,这样您就不必动态设置表名。如果这是不可能的,我会选择这样的设计:您管理一个可用表的列表,用户按ID从中选择一个表,这样您就可以从选择的ID中检索真正的表名,并用它替换表名占位符,从而避免在表名替换中注入sql的任何机会。

 类似资料:
  • 问题内容: 将表名作为参数放入SQL查询的安全方法是什么?您不能使用PreparedStatement将表名作为参数。可以使用Statement连接字符串以执行具有动态表名称的查询,但是不建议这样做,因为存在SQL注入的风险。最好的方法是什么? 问题答案: 我将尝试解决设计问题,因此您不必动态设置表名。如果无法做到这一点,那么我将进行一种设计,在该设计中,您管理可用表的列表,并且用户从中选择一个表

  • 可以使用列表对象作为jpa查询方法的参数吗,如下所示 其中所述方法定义为: 以下是查询方法中的一些附加信息 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法

  • 我的代码在这里: 但它不起作用。我该怎么做?我在jcombobox get from database中有一个列表表名,当我选择其中一个时,这个框架将显示表的所有列和信息。

  • 问题内容: 我想提供查询的表名作为命令参数,如下所示: 这似乎导致了该查询:这将导致错误(注意单引号)。 我真的需要为此进行字符串连接吗?从安全的角度来看这没关系,因为用户无法更改表名,但是用于创建SQL查询的字符串连接总是让我感到毛骨悚然… 谢谢,埃里克 问题答案: 表名不能作为参数发送。表名称在解析时解析,因为计划和此类操作需要它们。仅在执行程序(或优化程序,必要时)时替换参数。 是的,您将需

  • 问题内容: 我有5个表或表要从\查询 我的语法我喜欢这样 问题是,当我运行此命令时,我收到一条错误消息:“ .....您在SQL WHERE Patient_ID =吗?附近有错误?” 当我使用system.out.println(sql2)输出sql时; 值未在sql2中设置 问题答案: 当您准备一条语句时,数据库将构造一个执行计划,如果表不存在,则该计划无法执行。换句话说,Placehodle

  • 问题内容: 我有一个python列表,说l 我想编写一个sql查询来获取列表中所有元素的数据,例如 我该如何完成? 问题答案: 到目前为止,答案一直是将这些值模板化为纯SQL字符串。这对于整数绝对没问题,但是如果我们想对字符串执行此操作,则会遇到转义问题。 这是一个使用参数化查询的变体,它对两个都适用: