我知道事先准备好的声明的权力,但我不能在这里使用它。 我通过HTTP发送SQL查询到外部服务器,而不是通过JDBC。 如何逃避SQL查询字符串? 有办法通过JDBC做到这一点? 或者我应该使用自定义类/功能吗?
PS我也有连接到其它数据库,这样我就可以使用JDBC功能。
我知道事先准备好的声明的权力,但我不能在这里使用它。 我通过HTTP发送SQL查询到外部服务器,而不是通过JDBC。 如何逃避SQL查询字符串? 有办法通过JDBC做到这一点? 或者我应该使用自定义类/功能吗?
PS我也有连接到其它数据库,这样我就可以使用JDBC功能。
这听起来很没有安全感。 如果你通过HTTP发送SQL语句,那么你就可以得到由人在这方面的中间人攻击(其中包括)损害。 除此之外,任何平均平整的程序员可能会试图执行恶意的SQL对你的数据库,如果他们看到你周围发送SQL语句。 他们可以创建用户,更改密码,获取敏感数据......你确定这是做事的最佳方式?
我知道链接真的不好好回答-但这SQL注入预防小抄是一个很好的阅读(太大了,张贴在这里的),如果你无法使用预处理语句-它给你很多的例子就如何防止SQL注射
阅读它有这个:
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;
}
尽管别人已经告诉,这不是一个好主意。 你可以“模拟”的PreparedStatement的通过您的HTTP调用的行为。
就像调用中发送多个参数
/sqlInterperter.do?sql=somesql_with_params¶m1=...¶m2=...
然后ATLEAST可以在接收方再次使用准备好的语句。
(不过任何人都可以发送给您的任何陈述所以最好的是:不要做)