防止sql注入的方法和原理

erjian2022-03-282591

防止sql注入的方法和原理

这里详细说下防止结构化查询语言注入的原理

1.代码层手动过滤

首先看下的源码,可以看到对参数做了一定的处理,比如增加单引号,对换行符等一些字符做了转义处理,也就是说封装了一些代码层手动过滤,

经过方法对输入字符串参数进行处理后,消除了一部分结构化查询语言注入的威胁

(,)throwsSQLException { synchronized(this。支票已结清().getconnection mutex()){ if(x==null){ this。set null(参数索引,1);} else { this。检查关闭();intstringLength=x . length();StringBufferbufif(这个。联系。isnobackslashescapesset()){ booleaneedshexcept=this。isescapeneededforstring(x,字符串长度);ObjectparameterAsBytesbyte[]参数以字节表示;如果(!needsHexEscape){ parameter as bytes=null;buf=new string buffer(x . length()2);buf。追加(' \ ' ');buf。追加(x);buf。追加(' \ ' ');如果(!这个。isloaddataquery){ parameter as bytes=string utils。getbytes(buf。tostring()、this.charConverter、this.charEncoding、this。联系。getservercharacterencoding()、this。联系。parserknowsunicode()、this。getexception拦截器());} else {参数as bytes=string utils。getbytes(buf。tostring());}这个。set internal(参数索引,参数为字节);} else { parameterAsBytes=null如果(!这个。isloaddataquery){ parameter as bytes=string utils。getbytes(x,this.charConverter,this.charEncoding,this。联系。getservercharacterencoding(),this。联系。parserknowsunicode(),这个。getexceptioninterceptor());} else {参数as bytes=string utils。getbytes(x);}this.setBytes(parameterIndex,参数as bytes);}返回;} StringparameterAsString=x;booleaneedsquoted=true if(this。isloaddataquery | |这个。isescapeneededforstring(x,字符串长度)){ needsQuoted=falsebuf=new string buffer((int)((double)x . length()* 1.1D));buf。追加(' \ ' ');for(inti=0;istringLengthI){ charc=x . charat(I);开关(c)3360基金会。追加(' \ \ ');buf。追加(“0”);打破;案例

:buf。追加(' \ \ ');buf。追加(' n ');打破;案例:buf。追加(' \ \ ');buf。追加(' r ');打破;案例\ u001a ' :buf。追加(' \ \ ');buf。追加(' Z ');打破;案例””:如果(此。使用ansi模式){ buf。追加(' \ \ ');} buf。追加(“”);打破;案例”:buf。追加(' \ \ ');buf。追加(' \ ' ');打破;案例\ \ ' :buf。追加(' \ \ ');buf。追加(' \ \ ');打破;案例’‘:3360case''3如果(这。字符集编码器!=null){ CharBuffercbuf=char buffer。分配(1);字节缓冲区。分配(1);cbuf。放(c);cbuf。位置(0);这个。字符集编码器。encode(cbuf,bbuf,true);如果(bbuf。get(0)==92){ buf。追加(' \ \ ');} }默认:缓冲区。追加(c);} } buf。追加(' \ ' ');参数asstring=buf。tostring();} buf=nullbyte[]参数以字节表示;如果(!这个。isloaddataquery){ if(needsQuoted){ parameter as bytes=string utils。getbytes wrapped(参数asstring,' \ ' ',' \ ' ',this.charConverter,this.charEncoding,this。联系。getservercharacterencoding(),this。联系。parserknowsunicode(),这个。getexceptioninterceptor());} else {参数as bytes=string utils。getbytes(参数为string,this.charConverter,this.charEncoding,this。联系。getservercharactercencoding(),this。联系。parserknowsunicode(),这个。getexceptioninterceptor());} } else {参数as bytes=string utils。getbytes(参数为字符串);}这个。set internal(参数索引,参数为字节);这个。参数类型[参数索引-1本。getparameter index offset()]=12;}}}

防止sql注入的方法和原理

2.预编译功能

预编译的功能是在服务端开启的,mysql预编译功能默认是关闭的,通过对jdbcurl追加以下参数来开启useserverpestmts=true cacheprepstmts=true

相关阅读

  • 防止sql注入
  • 数据库安全审计应用实践系列文章之三 数据库安全之内外兼顾 图
  • 防止sql注入的方法和原理
  • 本文链接:http://www.slxf119.com/16621.html 转载需授权!

    上一篇:数据库安全审计应用实践系列文章之三 数据库安全之内外兼顾 图

    下一篇:使用动态sql的方法防止sql注入

    相关文章

    网友评论