首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查SQL-Injection的输入。

检查SQL-Injection的输入。
EN

Stack Overflow用户
提问于 2016-03-07 12:00:55
回答 3查看 1.7K关注 0票数 1

我想检查我的输入字符串的潜在SQL-注入。

下面是我的类、方法和查询:

代码语言:javascript
复制
public class UserNamesQuery {

   public static String getUserNames(Map<String, Object> params) {
       String userNames = (String) params.get("userNames");
       return "SELECT * FROM users WHERE name IN (" + userNames + ") ";
   }

}

是否有一种工具或一种快速的方法来验证userNames是否没有SQL注入?

请注意,我使用的是Mybatis

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-07 12:03:41

不是的。根本不可能。也没必要。

坦率地说,没有像"SQL注入“这样的东西。只有,这是对格式不正确的查询的利用。

因此,不必寻找任何“注入”,您必须通过使用准备语句来正确地格式化查询。

任何数据,取决于上下文,可能是潜在的注入,也可能是无害的文本块。因此,无论使用哪种过滤功能,都会出现太多的假阳性。更糟糕的是,不管过滤是“黑名单”实现,这意味着总是不完整--只是不可能过滤掉用于利用注入的所有代码。

另一方面,准备语句是一个相对简单的解决方案,它可以在不知道任何类型的注入的情况下对任何类型的注入免疫,只是因为它不会让数据干扰查询。

票数 8
EN

Stack Overflow用户

发布于 2016-07-26 10:57:09

消毒输入不是防止这种注射的方法。使用预先准备好的语句是可行的。

代码语言:javascript
复制
PreparedStatement ps = connection.prepareStatement("SELECT * FROM users WHERE username IN (?)"); //Add however many ?'s you want, if you have an array you can use a StringBuilder for this to add more ?'s
ps.setString(1, userName);
ResultSet rs = ps.executeQuery();

这将设置?在你的字符串的代码中。然后,数据库驱动程序处理其余部分。如果in子句中有多个值,请使用StringBuilder和一个循环来添加更多的问询符号。

还请注意索引是如何以1而不是0开始的。

票数 0
EN

Stack Overflow用户

发布于 2019-08-08 13:12:37

mybatis模板可能是一个不错的选择。FYI:

代码语言:javascript
复制
<sql id="orderTypeSql">
    <trim prefix=" ">
        <if test="orderType=='desc'">desc</if>
    </trim>
</sql>

<sql id="oderColumnSql">
    <trim prefix="order by " suffix="" >
        <choose>
            <when test="orderColumn==null or orderColumn==''"></when>
            <when test="orderColumn=='id'">
                id<include refid="orderTypeSql"/>
            </when>
            <when test="orderColumn=='name'">
                `name`<include refid="orderTypeSql"/>
            </when>
        </choose>
    </trim>
</sql>

<select id="testOrderBy" resultType="User">
    select
    id,
    `name`
    from t_user
    <include refid="oderColumnSql"/>
    limit 0, 10
</select>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35843211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档