admin管理员组文章数量:1794759
Springboot集成防sql注入设置
防sql注入为系统开发最基础的安全开发要求,在此分享基于过滤器和功能可开关的防sql注入写法,仅供学习交流使用。
SqlFilterConfigUtils 为sql注入防护开关工具类,可以灵活开启和关闭sql防注入功能
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * @Auther: GMY * @Date: 2022/09/15/14:24 * @Description: sql注入防护开关工具类 */ @Component public class SqlFilterConfigUtils { /** * sql注入防护开关配置 */ public static Boolean openSqlProtect; /** * sql注入防护开关配置,默认为开启 */ public static Boolean getOpenSqlProtect() { return openSqlProtect == null ? true : openSqlProtect; } @Value("${open.sql.protect}") public void setOpenSqlProtect(Boolean openSqlProtect) { SqlFilterConfigUtils.openSqlProtect = openSqlProtect; } }SqlFilter 为sql防注入过滤器,用来拦截过滤用户请求,检测是否有sql注入攻击
import org.springframework.context.annotation.Configuration; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; import java.util.Enumeration; /** * @Auther: GMY * @Date: 2022/09/15/14:13 * @Description: sql防注入过滤器 */ @WebFilter(urlPatterns = "/*",filterName = "sqlFilter") @Configuration public class SqlFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } /** * @param servletRequest * @param servletResponse * @param filterChain * @return void * @author GMY * @date 2022/9/15 14:17 * @description sql注入过滤 */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { ServletRequest request = servletRequest; ServletResponse response = servletResponse; // 如果sql防注入关闭,则不执行后续校验操作 if(!SqlFilterConfigUtils.getOpenSqlProtect()) { filterChain.doFilter(request,response); } else { // 获得所有请求参数名 Enumeration<String> names = request.getParameterNames(); String sql = ""; while (names.hasMoreElements()){ // 得到参数名 String name = names.nextElement().toString(); // 得到参数对应值 String[] values = request.getParameterValues(name); for (int i = 0; i < values.length; i++) { sql += values[i]; } } if (sqlValidate(sql)) { throw new IOException("您发送请求中的参数中含有非法字符"); } else { filterChain.doFilter(request,response); } } } /** * @param str * @return boolean * @author GMY * @date 2022/9/15 14:16 * @description 匹配效验 */ protected static boolean sqlValidate(String str){ // 统一转为小写 String s = str.toLowerCase(); // 过滤掉的sql关键字,特殊字符前面需要加\\\\进行转义 String badStr = "select|update|and|or|delete|insert|truncate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|table|"+ "char|declare|sitename|xp_cmdshell|like|from|grant|use|group_concat|column_name|" + "information_schema.columns|table_schema|union|where|order|by|" + "'\\\\*|\\\\;|\\\\-|\\\\--|\\\\+|\\\\,|\\\\//|\\\\/|\\\\%|\\\\#"; //使用正则表达式进行匹配 boolean matches = s.matches(badStr); return matches; } @Override public void destroy() { } }以上代码仅供学习交流使用,代码中涉及到真实项目信的内容我都做了相应修改
本文标签: SpringBootSQL
版权声明:本文标题:Springboot集成防sql注入设置 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1687054766a130633.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论