盘州市网站建设,html5个性个人网站,白城网站seo,wordpress如何添加注册登录界面1. SQL注入的原理#xff1a;
SQL注入的攻击行为是通过用户可控参数中注入了SQL语法#xff0c;改变原有SQL结构#xff0c;以下两种情况可以造成SQL注入#xff1a;
1.使用字符串拼接的方式构造SQL语句
2.未对用户可控参数进行严格的过滤#xff0c;便把参数内容拼接到…1. SQL注入的原理
SQL注入的攻击行为是通过用户可控参数中注入了SQL语法改变原有SQL结构以下两种情况可以造成SQL注入
1.使用字符串拼接的方式构造SQL语句
2.未对用户可控参数进行严格的过滤便把参数内容拼接到SQL语句中
2. SQL注入的危害
攻击者通过利用SQL注入漏洞获取数据库的各种信息如后台的账号密码从而脱取数据库的内容脱库
特别的情况下还可以对数据库内容进行插入、修改、删除
如果数据库权限分配存在问题或者数据库本身存在缺陷攻击者可以通过SQL注入漏洞来直接获取webshell或服务器权限
3. SQL注入解决方案
3.1 使用预编译处理
#{}预编译处理。${}字符直接替换。 预编译处理MyBatis 在处理#{}时会将 SQL 中的 #{} 替换为?号使⽤ PreparedStatement 的 set ⽅法来赋值。 直接替换是MyBatis 在处理 ${} 时就是把 ${} 替换成变量的值。 特别注意字符串使用 替换时需要加引号。使用 {} 替换时需要加引号。 使用 替换时需要加引号。使用可以处理关键字,比如我们sql的升序降序关键字,因为$符号是直接替换
select idgetData resultTypecom.demo.getselect * from member order by id ${str};
/select其他建议
严格确定数据的类型比如入参是数字数据库则必须使用int类型来存规定数据长度能在一定程度上防止sql注入严格限制数据库权限能最大程度减少sql注入的危害避免直接响应一些sql异常信息sql发生异常后自定义异常进行响应
3.2 模糊查询的解决方案
如果业务场景中需要使用模糊查询不能使用如下形式
select * from member where username like %${str}%;而是应该是如下形式
select * from member where username like CONCAT(%,#{str},%);3.3 过滤关键词
/*** 关键词校验* param str* return*/
protected static boolean sqlValidate(String str) {// 统一转为小写str str.toLowerCase();// 过滤掉的sql关键字可以手动添加String badStr |and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate| char|declare|sitename|net user|xp_cmdshell|;|or|-||,|like|and|exec|execute|insert|create|drop| table|from|grant|use|group_concat|column_name| information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*| chr|mid|master|truncate|char|declare|or|;|-|--||,|like|//|/|%|#| in|group|net|user|between|concat||||xor|||!|^|~;//另外与|这两个符号也推荐过滤String[] badStrs badStr.split(\\|);for (int i 0; i badStrs.length; i) {if (str.indexOf(badStrs[i]) 0) {return true;}}return false;
}过滤关键词可能会有一些绕过的攻击方案目前以上的过滤关键词没有绕过的方案。
3.4 框架引入的SQL注入问题
在开发项目过程中可能会存在一些框架引入的安全问题最好的方案就是按照官方的指引升级最新的解决安全漏洞的版本。 比如说JeecgBoot 最近就存在sql注入的安全漏洞。
一、漏洞描述 表字典存在 SQL 注入漏洞远程攻击者可利用该漏洞攻击系统数据库获取敏感数据或者进行数据库违规操作。漏洞危害等级高危
二、影响范围 jeecgboot 版本 3.5.4 三、修复方案 升级至3.6.1版本不兼容的请自行调整。