b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

sql注入 过滤_mybatis sql注入_sql注入攻击(3)

电脑杂谈  发布时间:2017-03-02 05:05:52  来源:网络整理

名为idList的list,所以UserDTO中用idList取值,这点和单独传list或array时不太一样。

6.取值

由上面可以看出,取值的时候用的是#{}。它具体的意思是告诉MyBatis创建一个预处理语句参数。

使用JDBC,这样的一个参数在SQL中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:

 // Similar JDBC code, NOT MyBatis…
 String selectPerson = “SELECT * FROM PERSON WHERE ID=?”;
 PreparedStatement ps = conn.prepareStatement(selectPerson);
 ps.setInt(1,id);

可以看到这个写法比较简单,MyBatis为我们做了很多默认的事情,具体的写法应该如下:

#{property,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler,mode=OUT,resultMap=User}

property:属性名,即代码传入的变量名。

javaType:该字段在JA中的类型,比如int。

jdbcType:该字段在JDBC中的类型,比如NUMERIC。

typeHandler:类型处理器

mode:参数类型为IN,OUT或INOUT参数

resultMap:结果。

还好,MyBatis比较体谅我们,一般我们只需写一个属性名即可,如#{id},其他的如javaType和typeHandlerMybatis

会自动帮我们填好。可是这样有时也会出问题,比如出现CLOB字段时。

由于JA代码中的String类型对应的默认typeHandler为StringTypeHandler,当用String类型处理时,如果String长度超过一定长度,就会报如下错误:

setString can only process strings of less than 32766 chararacters

解决办法是指定该属性的typeHandler,如下:

#{message,typeHandler=org.apache.ibatis.type.ClobTypeHandler}

我们也可以自定义typeHandler来处理需要的数据,具体这里详述。mybatis sql注入

JDBC类型是仅仅需要对插入,更新和删除操作可能为空的列进行处理。这是JDBC的需要,而不是MyBatis的。一般不需要配置

mode、resultMap一般不需要,在写存储过程时会用到,这里不详述。

7.字符串替换

一般情况下,我们采用#{}取值,产生预处理语句,但是有时我们可能不希望Mybatis来帮我们预处理,比如ORDER BY时,可以

采用如下写法:

ORDER BY ${columnName}

这里MyBatis不会修改或转义字符串。而是直接拼接到SQL字符串后面。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你

不应该允许用户输入这些字段,或者通常自行转义并检查。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-35320-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 唐天义
      唐天义

      #吴亦凡1106生日快乐##吴亦凡##吴亦凡BadGirl#吴亦凡生日快乐

    热点图片
    拼命载入中...