sql注入是一个古老的话题了,但经常会被我们忽略。尤其是使用了ibatis.net之后。

Ibatis.net框架对sql注入问题已经做了很好的防护,但经常由于开发人员使用不当,会造成sql的注入隐患。在模糊查询中,经常会忽略这一问题。如下面的这个例子:

我们有一张UserInfo表,字段Name表示用户姓名,需要按用户名进行模糊查询,于是乎sqlmap写法如下:

select * from UserInfo where Name like '%$Name$%'

$Name$是有用户界面传入的,这样sql注入就成立了,用户输入 %' or 1=1 or name like '%,执行语句变成了这样:

select * from UserInfo where Name like '%%' or 1=1 or name like '%%',查询了所有的用户。

如果用户输入 ';delete from pt_userinfo where personid like ',执行语句变成这样:

select * from UserInfo where Name like '%';delete from UserInfo where personid like '%',这将是灾难性的后果。

解决方案,在模糊查询的地方,不要使用$$,而是要使用##,sqlmap的正确写法:

select * from UserInfo where Name like '%'+ #Name# + '%'

这样,当用户试图进行sql注入时,ibatis.net将进行防注入检查,如果检测到sql注入,将返回结果一个空集。

后续思考:ibatis.net中$$和##的区别

在ibatis.net中,$$只是简单的字符串拼接,ibatis.net不做任何处理,对于##,ibatis.net会采用参数化命令方式进行处理,有效防止sql注入。但为什么ibatis.net不将$$去掉,$$是有自己的特殊场景的,如果需要查询前十条记录,sqlmap写法如下:

select top $limit$ * from UserInfo,由于$$只是简单拼接,limit=10,执行语句为:select top 10 * from UserInfo;

如果sqlmap写为:

select top #limit# * from UserInfo,limit=10,执行语句为:select top '10' * from UserInfo;显然执行会报错的,达不到预期效果。

Ibatis.net防Sql注入的更多相关文章

  1. 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  2. C#语言Winform防SQl注入做用户登录的例子

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  3. PHP防SQL注入不要再用addslashes和mysql_real_escape_string

    PHP防SQL注入不要再用addslashes和mysql_real_escape_string了,有需要的朋友可以参考下. 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助 ...

  4. mysql之数据库连接的方法封装及防sql注入

    一.定义数据库和表 create database animal; CREATE TABLE `pet` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name ...

  5. nginx服务器防sql注入/溢出攻击/spam及禁User-agents

    本文章给大家介绍一个nginx服务器防sql注入/溢出攻击/spam及禁User-agents实例代码,有需要了解的朋友可进入参考. 在配置文件添加如下字段即可  代码如下 复制代码 server { ...

  6. C#防SQL注入代码的实现方法

    对于网站的安全性,是每个网站开发者和运营者最关心的问题.网站一旦出现漏洞,那势必将造成很大的损失.为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位. 下面说下网站防注入的几点 ...

  7. php防sql注入、xss

    php自带的几个防止sql注入的函数http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0318/12234.html addslashe ...

  8. Sqlparameter防SQL注入

    一.SQL注入的原因 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对 ...

  9. 防SQL注入:生成参数化的通用分页查询语句

    原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...

随机推荐

  1. U3D中的协同等待函数

    WaitForSeconds.WaitForseconds等待函数; 创建一个yield指令,来等待给定的秒数; using UnityEngine; using System.Collections ...

  2. php7.0 redis扩展下载地址

    http://windows.php.net/downloads/pecl/snaps/redis/20160319/

  3. Codeforces Gym 100513M M. Variable Shadowing 暴力

    M. Variable Shadowing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/ ...

  4. Python2.7.3移除字符串中重复字符(一)

    移除重复字符很简单,这里是最笨,也是最简单的一种.问题关键是理解排序的意义: # coding=utf-8 #learning at jeapedu in 2013/10/26 #移除给定字符串中重复 ...

  5. [Jest] Track project code coverage with Jest

    Jest comes pre-packaged with the ability to track code coverage for the modules you're testing, but ...

  6. iOS开发——数据解析Swift篇&简单json数据处理

    简单json数据处理 //loadWeather var url = NSURL(string: "http://www.weather.com.cn/adat/sk/101240701.h ...

  7. XtraBackup原理3

    http://mysql.taobao.org/monthly/2016/03/07/ MySQL · 物理备份 · Percona XtraBackup 备份原理 前言 Percona XtraBa ...

  8. RDDTest.scala

    /** * Created by root on 9/7/15. */ import org.apache.spark.SparkContext import org.apache.spark.Spa ...

  9. PAT 1019

    1019. General Palindromic Number (20) A number that will be the same when it is written forwards or ...

  10. cocos2dx jsoncpp

    jsoncpp下载 http://sourceforge.net/projects/jsoncpp/ 下载解压后用到的是include\json下面的头文件跟src\lib_json下的文件. 导入头 ...