模糊查询 防止 sql注入

mysql  mybatis 环境:

1>. 处理sql特殊字符 {"*","%","_"} --> 替换为 "/*","/%","/_"

2>.   sql 中处理,定义‘/’ 为转义字符  

public abstract class BaseEntity extends PrimaryKeyObject<Long> {

private static final long serialVersionUID = 1L;

@Transient // 用于注释pojo对象中的属性,被注释的属性将成为短暂的,不会持久化。

protected Boolean escapeChar;  // 是否包含转义字符

protected String keyword;   // 模糊查询关键字

public String getKeyword() {

return keyword == null ? null : keyword.trim();

}

public void setKeyword(String keyword) {

this.keyword = keyword == null ? null : keyword.trim();

}

public Boolean getEscapeChar() {

this.getNewKeyword();

return escapeChar;

}

public void setEscapeChar(Boolean escapeChar) {

this.escapeChar = escapeChar;

}

// 处理sql特殊字符 {"*","%","_"} --> 替换为 "/*","/%","/_"

private void getNewKeyword() {

if (escapeChar == null) {

escapeChar = false;

}

if (StringUtils.isNotEmpty(keyword) && !escapeChar) {

Pattern p1 = Pattern.compile("\\*|%|_");

Matcher m1 = p1.matcher(keyword);

StringBuffer buf = new StringBuffer();

while (m1.find()) {

m1.appendReplacement(buf, "/" + m1.group());

}

m1.appendTail(buf);

String newkeyword = buf.toString();

if (!keyword.equals(newkeyword)) {

this.setEscapeChar(true);

this.setKeyword(newkeyword);

}

}

}

}

<!-- 模糊查询 -->

<if test="keyword != null">

<choose>

<when test=true >

and (

name like CONCAT("%",#{keyword},"%") escape ‘/‘

or

uname like CONCAT("%",#{keyword},"%") escape ‘/‘

)

</when>

<when test=false>

</when>

</choose>

</if>

时间: 2024-10-30 01:45:41

模糊查询 防止 sql注入的相关文章

使用参数化查询防止SQL注入漏洞

参数化查询防止SQL注入漏洞 看别人的登录注册sql语句有没漏洞即可 Where  name='admin' or '1=1' and password='123'; 可以Or '1=1'就是漏洞 http://jingyan.baidu.com/article/27fa7326f53ea746f9271f79.html 以往的防御方式 以前对付这种漏洞的方式主要有三种: l        字符串检测:限定内容只能由英文.数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝.但缺点是,系统 中

JDBC模糊查询参数的注入的注意点

笔者刚开始是这样写sql语句的String sql="SELECT * FROM bookBasicInfo,bookTypeInfo WHERE     bookBasicInfo.BelongType=bookTypeInfo.BookTypeID         AND bookBasicInfo.bookName like %?%";采用参数注入ps.setString(1,  bookName);但是在执行的过程中,java跑出如下异常java.sql.SQLExceptio

带参数的查询防止SQL注入攻击

把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设定: string strCmd = "SELECT AccountID FROM Account WHERE [email protected] AND [email protected]"; 对于SQL Server数据库,“@”是参数的前缀.上句中定义了两个参数:@AccountNa

ADO.NET快速入门——带参数的查询防止SQL注入攻击

相关知识: 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设定: string strCmd = "SELECT AccountID FROM Account WHERE [email protected] AND [email protected]"; 对于SQL Server数据库,“@”是参数的前缀.上句中定义了两个参数:@Acc

模糊查询的sql语句

Java程序中使用的sql语句一直不明白是什么作用,在网上搜索了一些资料,看到一篇博客,稍微解答了具体每条代码的作用,因为作者加了详细的注解,可以作为参考 <JavaWeb dao层条件查询(模糊查询)的sql语句> --------------------- 本文来自 阿顾1234 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u010452388/article/details/80548970 目的:通过一条查询语句能够实现用户所有的条件进行查询 代码

参数化查询防止Sql注入

拼接sql语句会造成sql注入,注入演示 namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FillData(dataGridView1); } private void FillData(DataGridView dat

023. Asp.net参数化查询预防Sql注入攻击

1 /// <summary> 2 /// 参数化查询预防SQL注入式攻击 3 /// </summary> 4 public int checkLogin(string loginName, string loginPwd) 5 { 6 string strsql = "select count(*) from tb_LoginUser where [email protected] and [email protected]"; 7 SqlConnectio

【实战】利用联合查询--手工SQL注入拿下网站

看到很多脚本小子,工具党用啊D,明小子,穿山甲对网站扫来扫去,拿个后台什么的,其实基础是最重要的,今天我来说一下纯手工注入一个站点. 目标网址:http://www.******.com/about.asp?id=1 1.首先确认这里是否存在整型注入,很简单,url后加' and 1=1 and 1=2,不细说.同时我们还判断出这是Access的数据库. 2.利用order by判断表项有几个: http://www.******.com/about.asp?id=1 order by 4(这里

.net在Oracle数据库中为In条件查询防止sql注入参数化处理

//返回in条件处理方法 public static string InsertParameters(ref List<OracleParameter> orclParameters, int[] lsIds, string uniqueParName) { string strParametros = string.Empty; for (int i = 0; i <= lsIds.Length - 1; i++) { strParametros += i == 0 ? ":