수중 음파 탐지기는 방법에 대해 불평 :소나의 PreparedStatement는 SQL 주입
이해
"준비된 문이 상수가 문자열에서 생성됩니다", 문자열로 쿼리를 매개 변수화 안전하지 않다 연결,하지만 여기에 나는 테이블의 이름을 정의하고있다. 음향 기기 경고를 없애려면 어떻게해야합니까? 그리고 더 중요한 것은이 문제를 해결하는 방법, SQL 주입을 피하는 방법입니까? db 및 노드 변수에서 유효하지 않은 값을 검색해야합니까? 예 : 공백을 포함해서는 안됩니다. (보통 체크 된 입력 사항), 아니면 우아한 방법이 있습니까?
Btw,이 메서드는 매우 깊은 애플 리케이션, 나는 거기에 이러한 매개 변수에 어떤 값을 강제로 기회가 의심.
방법의 단순화 된 버전 : 어떤 도움
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;
}
감사합니다.