Ibatis.net防Sql注入
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注入的更多相关文章
- 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...
- C#语言Winform防SQl注入做用户登录的例子
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- PHP防SQL注入不要再用addslashes和mysql_real_escape_string
PHP防SQL注入不要再用addslashes和mysql_real_escape_string了,有需要的朋友可以参考下. 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助 ...
- mysql之数据库连接的方法封装及防sql注入
一.定义数据库和表 create database animal; CREATE TABLE `pet` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name ...
- nginx服务器防sql注入/溢出攻击/spam及禁User-agents
本文章给大家介绍一个nginx服务器防sql注入/溢出攻击/spam及禁User-agents实例代码,有需要了解的朋友可进入参考. 在配置文件添加如下字段即可 代码如下 复制代码 server { ...
- C#防SQL注入代码的实现方法
对于网站的安全性,是每个网站开发者和运营者最关心的问题.网站一旦出现漏洞,那势必将造成很大的损失.为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位. 下面说下网站防注入的几点 ...
- php防sql注入、xss
php自带的几个防止sql注入的函数http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0318/12234.html addslashe ...
- Sqlparameter防SQL注入
一.SQL注入的原因 随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对 ...
- 防SQL注入:生成参数化的通用分页查询语句
原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...
随机推荐
- sgu - 274 - Spam-filter
题意:判断一个字符串是不是有效的邮件地址. 题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=274 ——>>照着题目做. ...
- PostgreSQL中,如何查表属于哪个数据库
db1=# \x Expanded display is on. db1=# SELECT * FROM information_schema.tables WHERE table_name='tab ...
- phpStudy 2014的Apache虚拟主机配置
安装phpStudy直接百度下载,傻瓜式安装很简单,一直点击下一步即可,中途根据个人爱好设置WWW目录,我的设置在D盘根目录里. 打开虚拟主机配置,打开D:\phpStudy\Apache\conf下 ...
- Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞
Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...
- C#实现注销、重启和关机代码
首先要导入对命名空间 using System.Runtime.InteropServices; 的引用 [StructLayout(LayoutKind.Sequential, Pack = 1)] ...
- UNIX标准化及实现之UNIX标准化、UNIX系统实现、标准和实现的关系以及ISO C标准头文件
一.UNIX标准化 1.ISO C (International Organization for Standardization) 2.IEEE POSIX (Institue of Electri ...
- ckfinder动态指定上传路径
默认情况下无法用代码修改config.ascx中的BaseUrl设置,因为其后端代码ConfigFile中并没有提供修改BaseUrl的方法,这里我借用了fckeditor以前的用法:利用sessio ...
- C#_判断2个对象的值是否相等
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- hdu 3849 (双联通求桥)
一道简单的双联通求桥的题目,,数据时字符串,,map用的不熟练啊,,,,,,,,,,,,, #include <iostream> #include <cstring> #in ...
- MySQL大批量插入数据
MySQL大批量插入数据 1. 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据. ALTER TABLE tblname DISABLE KEYS; loading the ...