4

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

ps 另外我有连接到其他数据库,所以我可以使用 JDBC 函数。

4

4 回答 4

1

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

只需在调用中发送多个参数,例如

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

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

(尽管如此,任何人都可以向您发送任何声明!所以最好的是:不要这样做)

于 2012-07-17T21:13:53.027 回答
1

我知道链接并不能很好地回答 - 但是如果你无法使用准备好的语句,这个SQL 注入预防备忘单是一个很好的读物(而且太大而不能在这里发布) - 它为你提供了很多关于如何防止 SQL 的示例注射

于 2012-07-12T09:15:32.320 回答
1

阅读这个有这个:

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;
}
于 2012-07-12T09:22:36.330 回答
1

这听起来很不安全。如果您通过 HTTP 发送 SQL 语句,那么您可能会受到中间人攻击(以及其他攻击)的危害。除此之外,任何平均水平的程序员都可能尝试对您的数据库执行恶意 SQL,如果他们看到您正在发送 SQL 语句。他们可以创建用户、更改密码、检索敏感数据……您确定这是处理事情的最佳方式吗?

于 2012-07-12T09:37:20.937 回答