一、sql注入的攻击原理是什么
SQL注入式攻击的主要形式有两种。
1、直接注入式攻击法
直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。
2、间接攻击方法
它将恶意代码注入要在表中存储或者作为原数据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。
二、杀毒软件可以处理sql注入么
不能,该软件只对系统的文件进行检查
三、SQL注入的直接手段是什么
1、UNIONquerySQLinjection(可联合查询注入)
2、Error-basedSQLinjection(报错型注入)
数据库报错注入版本限制
extractvalue()
updatexml()
floor()
exp()
GeometryCollection()
linestring()
polygon()
multipoint()
multipolygon()
multilinestring()
3、Boolean-basedblindSQLinjection(布尔型注入)
1、判断长度
2、猜测内容
4、Time-basedblindSQLinjection(基于时间延迟注入)
Sleep()
Benchmark(ket,)
笛卡尔积Writeup
GET_LOCKWriteup
RLIKE
5、StackedqueriesSQLinjection(可多语句查询注入/堆叠注入)
6、其它注入
1、http头部注入
1、User-Agent头字段注入
2、Referer头字段注入
3、Cookie头字段注入
4、二次注入
四、java如何防止sql注入
java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement来代替Statement来执行SQL语句,其后只是输入参数,SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构,大部分的SQL注入已经挡住了,在WEB层我们可以过滤用户的输入来防止SQL注入比如用Filter来过滤全局的表单参数
01importjava.io.IOException;
02importjava.util.Iterator;
03importjavax.servlet.Filter;
04importjavax.servlet.FilterChain;
05importjavax.servlet.FilterConfig;
06importjavax.servlet.ServletException;
07importjavax.servlet.ServletRequest;
08importjavax.servlet.ServletResponse;
09importjavax.servlet.http.HttpServletRequest;
10importjavax.servlet.http.HttpServletResponse;
11/**
12*通过Filter过滤器来防SQL注入攻击
13*
14*/
15publicclassSQLFilterimplementsFilter{
16privateStringinj_str="'|and|exec|insert|select|delete|update|count|*|%
|chr|mid|master|truncate|char|declare|;|or|-|+|,";
17protectedFilterConfigfilterConfig=null;
18/**
19*Shouldacharacterencodingspecifiedbytheclientbeignored?
20*/
21protectedbooleanignore=true;
22publicvoidinit(FilterConfigconfig)throwsServletException{
23this.filterConfig=config;
24this.inj_str=filterConfig.getInitParameter("keywords");
25}
26publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
27FilterChainchain)throwsIOException,ServletException{
28HttpServletRequestreq=(HttpServletRequest)request;
29HttpServletResponseres=(HttpServletResponse)response;
30Iteratorvalues=req.getParameterMap().values().iterator();//获取所有的表单参数
31while(values.hasNext()){
32String[]value=(String[])values.next();
33for(inti=0;i<value.length;i++){
34if(sql_inj(value[i])){
35//TODO这里发现sql注入代码的业务逻辑代码
36return;
37}
38}
39}
40chain.doFilter(request,response);
41}
42publicbooleansql_inj(Stringstr)
43{
44String[]inj_stra=inj_str.split("\\|");
45for(inti=0;i<inj_stra.length;i++)
46{
47if(str.indexOf(""+inj_stra[i]+"")>=0)
48{
学习资源
百度搜索圈T社区(www.aiquanti.com)免费视频教程
文章分享结束,sql注入怎么解决和sql注入危害不包括的答案你都知道了吗?欢迎再次光临本站哦!