Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为SQL查询转义字符串(无准备语句)_Java_Mysql_Sql_Jdbc - Fatal编程技术网

Java 如何为SQL查询转义字符串(无准备语句)

Java 如何为SQL查询转义字符串(无准备语句),java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我知道事先准备好的陈述的力量,但我不能在这里使用它。我通过HTTP而不是JDBC向外部服务器发送sql查询。 如何为SQL查询转义字符串?有没有办法通过JDBC实现这一点?或者我应该为此使用自定义类/函数 p、 另外,我还可以连接到其他数据库,所以我可以使用JDBC函数。我知道链接并不能给出很好的答案-但是如果你不能使用预先准备好的语句,这是一个很好的阅读(而且太大了,无法在这里发表)它为你提供了很多关于如何防止SQL注入的示例,其中包括: static public String escape

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


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

我知道链接并不能给出很好的答案-但是如果你不能使用预先准备好的语句,这是一个很好的阅读(而且太大了,无法在这里发表)它为你提供了很多关于如何防止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;
}
静态公共字符串转义线(字符串s){
字符串retvalue=s;
如果(s.indexOf(“')!=-1){
StringBuffer保持=新建StringBuffer();
字符c;
对于(int i=0;i
这听起来很不安全。如果您通过HTTP发送SQL语句,那么您可能会受到中间人攻击(以及其他攻击)的危害。除此之外,任何普通级别的程序员都可能试图对您的数据库执行恶意SQL,如果他们看到您正在发送SQL语句。他们可以创建用户,更改密码,检索敏感数据。。。你确定这是最好的方法吗?

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

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

/sqlInterperter.do?sql=somesql_with_params&param1=...&param2=...
然后,您至少可以在接收端再次使用准备好的语句


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

如果用户在字符串中提供转义字符
'\'
,会发生什么情况?例如
bobby\'和'1\'=\'1
?链接已断开,感谢您记住在此处转储相关代码!试试这个org.apache.commons.lang.StringEscapeUtils.escapeSql