防止SQL注入的五种方法

2021-08-18 0 325

首先,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 网站名称:汇站网
2 永久网址:https://www.huizhanii.com
3 本站资源来源于网友投稿和付费购买,仅供编程人员及源代码爱好者下载参考与研究,不提供任何技术支持服务!
4 资源展示图片及相关信息仅供参考,不代表本站立场!本站仅作为信息存储平台
5 禁止在服务器和虚拟机上搭建运营,所有资源仅限本地调试与研究使用,不支持联网运行!
6 未经版权方授权,严禁用于商业用途。使用者如违反国家法律法规,需自行承担全部法律责任!
7 请在下载后24小时内删除!建议支持正版授权作品
8 如资源侵犯您的合法权益,请提供版权证明及相关作品信息发送至邮箱:972908224@qq.com,我们将及时处理
9 如遇下载链接失效或支付未到账,请联系站长处理
10 欢迎投稿优质源码或教程,审核通过后将获得相应奖励
11 资源收费仅用于维持网站正常运营
12 数字商品具有特殊性质,一经购买概不退款

汇站网 Linux 防止SQL注入的五种方法 https://www.huizhanii.com/15051.html

站长资源下载中心-找源码上汇站

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

相关文章

联系官方客服

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