[hyddd的Fortify SCA分析Java代码记录][Semantic]SQL Injection
2009-02-26 18:50 hyddd 阅读(1680) 评论(0) 编辑 收藏 举报先看一段代码:
private String getInsertSql(Map<String, Object> parameterValues) {
StringBuffer insertSql = new StringBuffer();
StringBuffer fieldsSql = new StringBuffer();
StringBuffer valuesSql = new StringBuffer();
insertSql.append("INSERT INTO ");
insertSql.append(parameterValues.get("__TableName")); //有可能注入了。
insertSql.append(" ");
Set<String> keys = parameterValues.keySet();
for (String key : keys) {
if (key.equals("__TableName") || key.equals("__Key") || key.equals("__Value")) {
continue;
}
fieldsSql.append(String.format(",%s", key));
valuesSql.append(",?");
}
fieldsSql.deleteCharAt(0);
valuesSql.deleteCharAt(0);
insertSql.append(String.format("(%s) VALUES (%s)", fieldsSql.toString(), valuesSql.toString()));
return insertSql.toString();
}
StringBuffer insertSql = new StringBuffer();
StringBuffer fieldsSql = new StringBuffer();
StringBuffer valuesSql = new StringBuffer();
insertSql.append("INSERT INTO ");
insertSql.append(parameterValues.get("__TableName")); //有可能注入了。
insertSql.append(" ");
Set<String> keys = parameterValues.keySet();
for (String key : keys) {
if (key.equals("__TableName") || key.equals("__Key") || key.equals("__Value")) {
continue;
}
fieldsSql.append(String.format(",%s", key));
valuesSql.append(",?");
}
fieldsSql.deleteCharAt(0);
valuesSql.deleteCharAt(0);
insertSql.append(String.format("(%s) VALUES (%s)", fieldsSql.toString(), valuesSql.toString()));
return insertSql.toString();
}
在代码注释处可能出现SQL注入,如果parameterValues.get("__TableName")的值是一段注入用的SQL语句,至少,在这种情况下就有问题了,现在一般防止SQL注入的方法是使用:prepareStatement
PreparedStatement ps = conn.prepareStatement("SELECT * FROM EMPLOYEE_TABLE WHERE LASTNAME = ?");
ps.setString(1,'Dettinger');
ps.setString(1,'Dettinger');
作者:hyddd
出处:http://www.cnblogs.com/hyddd/
本文版权归作者所有,欢迎转载,演绎或用于商业目的,但是必须说明本文出处(包含链接)。