如何逃避SQL查询字符串(无准备的语句)(How to escape string for SQL

2019-07-30 08:57发布

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

PS我也有连接到其它数据库,这样我就可以使用JDBC功能。

Answer 1:

这听起来很没有安全感。 如果你通过HTTP发送SQL语句,那么你就可以得到由人在这方面的中间人攻击(其中包括)损害。 除此之外,任何平均平整的程序员可能会试图执行恶意的SQL对你的数据库,如果他们看到你周围发送SQL语句。 他们可以创建用户,更改密码,获取敏感数据......你确定这是做事的最佳方式?



Answer 2:

我知道链接真的不好好回答-但这SQL注入预防小抄是一个很好的阅读(太大了,张贴在这里的),如果你无法使用预处理语句-它给你很多的例子就如何防止SQL注射



Answer 3:

阅读它有这个:

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;
}


Answer 4:

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

就像调用中发送多个参数

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

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

(不过任何人都可以发送给您的任何陈述所以最好的是:不要做)



文章来源: How to escape string for SQL query (without prepared statement)