防止SQL注入的五种方法

首先,SQL介绍
SQL注入是更常见的网络攻击之一。它不使用操作系统的错误来实现攻击,但程序员编程的疏忽,通过SQL语句,实现无帐户登录,甚至篡改数据库。

防止SQL注入的五种方法
二,整体思想?? SQL注射攻击
1.寻找SQL注入的位置
2.判断服务器类型和背景数据库类型
3. SQL注入攻击对无关的服务器和数据库功能

第三,SQL注入攻击实例
例如,在登录界面中,询问用户名和密码:
您可以实现这样的免除账户:
用户名:’或1 = 1 –
密码:
如果您不进行特殊处理,那么此非法用户非常自豪地登录。(当然,已经处理了某些语言的数据库API)
为什么是这样?让我们分析它:
在理论上,将在后台认证程序中存在以下SQL语句:

String sql = "select * from user_table where username=

' "+userName+" ' and password=' "+password+" '";

当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=


	
'’or 1 = 1 -- and password='’

分析SQL语句: 在条件之后,USERNAME =“或1 = 1用户名相等”或1 = 1,则此条件将成功; 然后添加两个回来 – 这意味着评论,它将稍后发表评论,让他们不起作用,这样的语句将始终正确执行,用户易于欺骗系统,获得法律身份。 如果执行情况,这仍然相对温和.

SELECT * FROM user_table WHERE


username='' ;DROP DATABASE (DB Name) --' and password=''

….后果可以想象……
第四,正确的方法
让我谈谈JSP,说正确的方法:
1.(简单有效的方法)预付术
使用预编译的语句集,它内置于处理SQL注入的能力,只要它使用其SetXXX方法来传递值。
使用福利:
(1)。可读性和可维护性。
(2).PreparedStatement确实可以提高性能。
(3)。最重要的一点是大大提高。
原则:
SQL注入仅被销毁仅用于编写SQL语句(编译)过程
PreparedStatement已准备就绪,执行阶段只使用输入字符串作为数据处理。
不再准备SQL语句,因此避免了SQL注入问题。
2.使用正则表达式来过滤传入参数

要引入的包:

import java.util.regex.*;

正则表达式:

private String CHECKSQL = “^(.+)\\sand\\s(.+)|(.+)\\sor(.+)\\s$”;

判断是否匹配:

Pattern.matches(CHECKSQL,targerStr);

下面是具体的正则表达式:

检测SQL meta-characters的正则表达式 :

/(\%27)|(\’)|(\-\-)|(\%23)|(#)/ix

修正检测SQL meta-characters的正则表达式 :

/((\%3D)|(=))[^\n]*((\%27)|(\’)|(\-\-)|(\%3B)|(:))/i

典型的SQL 注入攻击的正则表达式 :

/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

检测SQL注入,UNION查询关键字的正则表达式 :

/((\%27)|(\’))union/ix(\%27)|(\’)

检测MS SQL Server SQL注入攻击的正则表达式:

/exec(\s|\+)+(s|x)p\w+/ix

等等…..

3.字符串过滤

比较通用的一个方法:

(||之间的参数可以根据自己程序的需要添加)

public static boolean sql_inj(String str){




	






	
String inj_str = "'|and|exec|insert|select|delete|update|




	






	
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";




	






	
String inj_stra[] = split(inj_str,"|");




	






	
for (int i=0 ; i < inj_stra.length ; i++ ){




	






	
if (str.indexOf(inj_stra[i])>=0){




	






	
return true;




	






	
}




	






	
}




	






	
return false;




	






	
}

4.jsp中调用该函数检查是否包函非法字符

 

防止SQL从URL注入:

sql_inj.java代码:

package sql_inj;




	






	
import java.net.*;




	






	
import java.io.*;




	






	
import java.sql.*;




	






	
import java.text.*;




	






	
import java.lang.String;




	






	
public class sql_inj{




	






	
public static boolean sql_inj(String str){




	






	
String inj_str = "'|and|exec|insert|select|delete|update|




	






	
count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";




	






	
//这里的东西还可以自己添加




	






	
String[] inj_stra=inj_str.split("\\|");




	






	
for (int i=0 ; i < inj_stra.length ; i++ ){




	






	
if (str.indexOf(inj_stra[i])>=0){




	






	
return true;




	






	
}




	






	
}




	






	
return false;




	






	
}




	






	
}




	






	


5.JSP页面判断代码:

 

使用javascript在客户端进行不安全字符屏蔽

功能介绍:检查是否含有”‘”,”\\”,”/”

参数说明:要检查的字符串

返回值:0:是1:不是

函数名是

function check(a){




	






	
return 1;




	






	
fibdn = new Array (”‘” ,”\\”,”/”);




	






	
i=fibdn.length;




	






	
j=a.length;




	






	
for (ii=0; ii<i; ii++)




	






	
{ for (jj=0; jj<j; jj++)




	






	
{ temp1=a.charAt(jj);




	






	
temp2=fibdn[ii];




	






	
if (tem’; p1==temp2)




	






	
{ return 0; }




	






	
}




	






	
}




	






	
return 1;




	






	
}

===================================

总的说来,防范一般的SQL注入只要在代码规范上下点功夫就可以了。

凡涉及到执行的SQL中有变量时,用JDBC(或者其他数据持久层)提供的如:PreparedStatement就可以 ,切记不要用拼接字符串的方法就可以了。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

免责声明   ⚠️ 1. 本站所有资源来源于网络收集,若资源侵犯了您的合法权益, 请来信通知我们(Email: 1427707223@qq.com),我们会及时删除,给您带来的不便,我们深表歉意! 2. 分享目的仅供大家学习和交流,若使用商业用途,请购买正版授权! 否则产生的一切后果将由下载用户自行承担! 3. 会员不得使用于非法商业用途,不得违反国家法律。否则后果自负! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 6. 因源码具有可复制性,一经购买 ,不得以任何形式退款。 7.更多详情请点击查看

优站网 网站安全防护 防止SQL注入的五种方法 https://www.zhanceo.com/15051.html

诚乃立身之本、信为道德之基

常见问题
  • 如果付款后没有弹出下载页面,多刷新几下,有问题联系客服!
查看详情
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情

相关文章

联系官方客服

为您解决烦忧 - 24小时在线 专业服务

防止SQL注入的五种方法-海报