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

使用Order by的prepared语句防止SQL注入

江凯风
2023-03-14

我对where条件、order by和limit有一个查询。我使用准备好的语句来设置where条件和限制。当前,我使用字符串append作为order,从而导致SQL注入漏洞。

SELECT siteid, technology, address, state, status FROM archive  LEFT OUTER 
JOIN mappings ON siteid = child_site_id order by siteid asc limit ? offset ?


SELECT siteid, technology, address, state, status FROM archive  LEFT OUTER 
JOIN mappings ON siteid = child_site_id order by siteid asc limit 10 offset 0

共有1个答案

景元徽
2023-03-14

这样做并将其串联起来:

List<String> allowedSortableColumns = Arrays.asList(new String[]{"siteid", "technology", "address"})
if(! allowedSortableColumns.contains(sortByColumn)){
   throw new RuntimeException("Cannot sort by: " + sortByColumn);
}
// Continue here and it's safe to concatenate sortByColumn...

你可以做卫生和其他事情,但这应该适用于你的情况

 类似资料:
  • 我正在处理的目标系统不支持PDO ist,尽管我在Postgres-DB8.2+上使用PHP 5.1.x寻求防止SQL注入的解决方案。目前没有机会切换到PDO。 我目前的解决方案是pg_prepare-prepared语句: 该函数从查询字符串创建一个名为stmtname的准备好的语句,该语句必须包含单个SQL命令。stmtname可以是“”来创建未命名语句,在这种情况下,任何先前存在的未命名语句

  • 问题内容: 停止使用不推荐使用的mysql_ *函数后,我切换到mysqli。但是后来,我注意到未准备好的语句对于SQL注入是不安全的。然后,我再次更改了代码。 我所拥有的是以下函数,该函数检查数据库中是否存在变量 $ ID 并打印该行的 title 值: 我将其更改为: 我的问题是:这是执行准备好的语句的正确方法吗?另外,我现在可以安全使用SQL注入吗?非常感谢任何愿意回答这个问题的人:) 问题

  • 我已经读了很多关于sql注入的书,并且已经使用mysqli编写的语句一年多了。我越接近我的问题是,为什么这个MySQLI编写的语句允许SQL注入? 现在,我想创建一个函数,根据用户的搜索条件运行查询。我使用这个,所以我可以使用很多不同的标准。 这里有一个简化的例子,你可以围绕我的问题来思考:假设我们有两张桌子,一张有轮胎,一张有轮子。 现在我们有一个表单让用户进行搜索 现在,处理请求的php如下所

  • 在我的应用程序中,我们从UI收集一些用户输入,并基于这些值生成具有不同“where”条件的动态SQL,以查询数据。发现这段代码有一些SQL注入缺陷。 序列号-可以是一个值、一个值、一个值或两个值。2.创建日期-可以是一个值、一个值、一个值或两个值 ReportTypeNumbers-可以是一个或一个或两个以上 ReportTitleNames-这可以是一个或一个,也可以是两个以上 基于这些输入值,

  • 问题内容: 我有一个现有的代码,其中应用程序根据很多条件生成不同的sql并通过hibernate会话createSQLQuery()执行它们。在这里,这些参数与作为普通字符串替换驻留在java类中的sql字符串相连接。现在的问题是,我需要防止sql注入。因此,为此,我必须使用getNamedQuery()并绑定参数,以便hibernate将处理特殊字符。但是问题在于将字符串sql的字符串移动到xm

  • 问题内容: 准备好的语句如何帮助我们防止SQL注入攻击? 维基百科说: 准备好的语句可以抵御SQL注入,因为稍后需要使用其他协议传输的参数值不需要正确地转义。如果原始语句模板不是从外部输入派生的,则不会发生SQL注入。 我不太清楚原因。用简单的英语和一些例子,简单的解释是什么? 问题答案: 这个想法很简单-查询和数据被发送到数据库服务器 分开 。 就这样。 SQL注入问题的根源在于 代码和数据 的