SQL注入防御

【JDBC】

1、预编译语句

      预编译语句会事先把SQL语句编译好,执行时仅仅需要用传入的参数代替掉?占位符即可。

2、存储过程

      存储过程(Stored Procedure)是一组完成特定功能的SQL语句集。经编译后存储在数据库中,用户通过调用存储过程并给定参数(如果该存储过程带有参数)就可以执行它,也可以避免SQL注入攻击。

【Mybatis】

1、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。

2、$将传入的数值直接显示生成在SQL中。

3、#方式能够很大程度上防止SQL注入,$方式无法防止SQL注入。

4、$方式一般用于传入数据库对象,例如传入表名。

5、一般能用#的就别用$,若不得不使用“${xxx}”这样的参数,要手工做好过滤工作,来防止SQL注入攻击。

注:

#{}:相当于JDBC中的PreparedStatement

${}:是输出变量的值

【Hibernate】

      Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程的思维操纵数据库。

1、对参数名称进行绑定

2、对参数位置进行绑定

3、set Parameter()方法

4、set Properties()方法

5、HQL拼接方法----推荐使用Spring工具包的StringEscapeUtils.escapesql()方法对参数进行过滤

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值