如何为SQL查询转义字符串(没有预处理语句)

我知道准备好的声明的力量,但我不能在这里使用它。 我通过HTTP而不是通过JDBC将sql查询发送到外部服务器。 如何为SQL查询转义字符串? 有办法通过JDBC做到这一点吗? 或者我应该使用自定义类/函数?

ps我也连接到其他DB,所以我可以使用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; } 

尽管其他人已经告诉过,这不是一个好主意。 您可以通过HTTP调用“模仿”PreparedStatement的行为。

只需在通话中发送多个参数即可

 /sqlInterperter.do?sql=somesql_with_params&param1=...&param2=... 

然后至少你可以在接收方再次使用准备好的语句。

(不过任何人都可以发送任何声明!最好的是:不要这样做)