防范sql注入式攻击(Java字符串校验,高可用性)

举报
红目香薰 发表于 2022/01/23 18:09:03 2022/01/23
【摘要】 ​ 什么是SQL注入攻击?所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1] 比如先前的很多影视网站...

 什么是SQL注入攻击?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1] 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

正常登录:

用户名:admin 密码:admin

SQL注入漏洞测试:

  • 在正常用户名admin后增加一个单引号,单击"登录"

  • 或在URL地址栏直接输入http://127.0.0.1:8081/login.asp?name=admin'&pass=admin

  • 若出错,证明没有对'进行过滤,存在SQL注入漏洞

那么如何防范出现这种情况呢。说白了直接获取字符串过滤判断即可,那么以下就是一个高可用的字符串判断方法。

可以直接使用。

package StrTest;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class demo {
	public static void main(String[] args) {
		boolean isf = containsSqlInjection("http://127.0.0.1:8081/login?name=admin &pass=admin' and '1=1");
		System.out.println(isf?"sql注入攻击":"安全字符串");
	}

	/**
	 * 是否含有sql注入,返回true表示含有
	 * 
	 * @param obj
	 * @return
	 */
	public static boolean containsSqlInjection(Object obj) {
		Pattern pattern = Pattern.compile(
				"\\b(and|exec|insert|select|drop|grant|alter|delete|update|count|chr|mid|master|truncate|char|declare|or)\\b|(\\*|;|\\+|'|%)");
		Matcher matcher = pattern.matcher(obj.toString());
		return matcher.find();
	}

}

希望能给大家带来一定的帮助。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。