首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声纳PreparedStatement - sql注入

声纳PreparedStatement - sql注入
EN

Stack Overflow用户
提问于 2014-04-15 18:27:12
回答 1查看 2.4K关注 0票数 1

声纳抱怨一种方法:

“准备好的语句由非常量字符串生成”

我理解,通过字符串连接来参数化查询是不安全的,但是这里我定义了表的名称。如何消除声纳警告?更重要的是,如何解决这个问题,如何避免sql注入?应该开始搜索db和节点变量中的无效值,例如。不能包含空格或;(通常检查的输入内容),还是有一个优雅的方式?

顺便说一句,该方法在应用程序中非常深入,我怀疑是否有机会通过ui强制使用这些参数。

该方法的简化版本:

代码语言:javascript
复制
private PreparedStatement getPs(Connection conn, String db, String node, String ext) {
    StringBuilder sql = new StringBuilder("select name, sum(counter) cnt");
    sql.append(" from ").append(db).append(".").append(node).append("_stuff");
    sql.append(" where something = ?");
    sql.append(" group by name");

    PreparedStatement ps;
    try {
        ps = conn.prepareStatement(sql.toString());
        ps.setString(1, ext);
    } catch (SQLException sqle) {
        throw new MyRuntimeException(sqle);
    }
    return ps;
}

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-15 18:32:09

声纳警告准确地说明了它所警告的内容:

“准备好的语句由非常量字符串生成”

这并不意味着您的代码容易受到SQL注入攻击。这仅仅意味着它可能是。如果您绝对确信用户无法注入数据库模式或表名,那么只需忽略警告即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23091574

复制
相关文章

相似问题

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