Java 如何为SQL查询转义字符串(无准备语句)
我知道事先准备好的陈述的力量,但我不能在这里使用它。我通过HTTP而不是JDBC向外部服务器发送sql查询。 如何为SQL查询转义字符串?有没有办法通过JDBC实现这一点?或者我应该为此使用自定义类/函数Java 如何为SQL查询转义字符串(无准备语句),java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我知道事先准备好的陈述的力量,但我不能在这里使用它。我通过HTTP而不是JDBC向外部服务器发送sql查询。 如何为SQL查询转义字符串?有没有办法通过JDBC实现这一点?或者我应该为此使用自定义类/函数 p、 另外,我还可以连接到其他数据库,所以我可以使用JDBC函数。我知道链接并不能给出很好的答案-但是如果你不能使用预先准备好的语句,这是一个很好的阅读(而且太大了,无法在这里发表)它为你提供了很多关于如何防止SQL注入的示例,其中包括: static public String escape
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¶m1=...¶m2=...
然后,您至少可以在接收端再次使用准备好的语句
(尽管如此,任何人都可以向您发送任何语句!最好的方法是:不要这样做)如果用户在字符串中提供转义字符
'\'
,会发生什么情况?例如bobby\'和'1\'=\'1
?链接已断开,感谢您记住在此处转储相关代码!试试这个org.apache.commons.lang.StringEscapeUtils.escapeSql