我知道预备声明的力量,但我不能在这里使用它。我通过HTTP而不是通过JDBC将sql查询发送到外部服务器。 如何为SQL查询转义字符串?有办法通过JDBC做到这一点吗?或者我应该使用自定义类/函数?
P.S。我也连接到其他DB,所以我可以使用JDBC函数。
答案 0 :(得分:1)
我知道链接并没有真正得到好的答案 - 但如果您无法使用预备语句,这个SQL Injection Prevention Cheat Sheet是一个很好的阅读(并且在这里发布的方式太大了) - 它提供了很多关于如何使用的示例防止SQL注入
答案 1 :(得分:1)
Read this有这个:
static public String escapeLine(String s) {
String retvalue = s;
if (s.indexOf ("'") != -1 ) {
StringBuffer hold = new StringBuffer();
char c;
for(int i=0; i < s.length(); i++ ) {
if ((c=s.charAt(i)) == '\'' ) {
hold.append ("''");
}else {
hold.append(c);
}
}
retvalue = hold.toString();
}
return retvalue;
}
答案 2 :(得分:1)
这听起来很不安全。如果您通过HTTP发送SQL语句,那么您可能会受到中间人攻击(以及其他攻击)的攻击。除此之外,如果他们发现你正在发送SQL语句,那么任何普通的程序员都可能会尝试对你的数据库执行恶意SQL。他们可以创建用户,更改密码,检索敏感数据......您确定这是处理事情的最佳方式吗?
答案 3 :(得分:1)
尽管其他人已经被告知,这不是一个好主意。您可以通过HTTP调用“模仿”PreparedStatement的行为。
只需在通话中发送多个参数,如
/sqlInterperter.do?sql=somesql_with_params¶m1=...¶m2=...
然后至少你可以在接收方再次使用准备好的陈述。
(尽管如此,任何人都可以发送任何声明!最好的是:不要这样做)