sql防注入几种惯用策略

作者&投稿:凭湛 (若有异议请与网页底部的电邮联系)
关于防止sql注入的几种手段~


其实特别不愿意说sql注入的问题,因为这的确是个老掉牙的问题了,但是仍然还有不少人在这方面自以为安全性做得很到位,或者说万事只要存储过程就可以防止注入,即全都参数化,这样对于某些复杂逻辑来说,sql存储过程写法太过于冗长,不如在C#拼凑sql,也有很多人鄙视拼凑sql的人,我觉得,看待sql注入这个问题,应该是从本质上来杜绝注入,而不是想当然的依靠存储过程,拒绝拼凑sql。我说一下我自己的经验吧一 存储过程参数化能解决绝大部分的注入问题。存储过程之所以能够解决绝大部分的注入问题,是因为mssql的机制,它认为你的是参数就是参数不能够解析为可执行的sql。但是这仅仅能解决绝大部分问题二 当需要在proc里面动态拼凑sql,使用类似exec,sp_executesql的时候,一定要使用后者,虽然两者都是传递一个字符串,这个字符串作为sql语句执行,但是后者提供为sql语句提供参数的功能,使得被执行的sql语句参数化,而防止注入,前者如果使用传入的参数来拼凑sql,则参数就会间接转换成sql语句而导致注入。本想接着写, 临时有点事,晚上发第二篇

1.(简单又有效的方法)PreparedStatement
采用预编译语句集,它内置了处理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;
}


第2课 GraphQL服务搭建
graphql-java-tools为我们屏蔽了底层细节,我们只需要继承以下几个类完成数据注入即可:Resolver完成的是数据的注入,也就是对*.graphqls文件中的type的字段的数据进行注入,注入需要满足以下规则:比如我们我们根据学校Id查询学校的API:我们在schema.graphqls中定义的类型有与之对应的Java Bean,这些Java ...

上海冠宙QL-380高压清洗机,电机转半圈就转不动了怎么回事?
1、清洗机压力不稳定主要是因为高压水泵或进水管路内吸入了空气所导致的,这时需要检查水源的压力是否足够,进水过滤器是否堵塞,如果发现进水滤网堵塞,将滤网取下用水清洗就可以了。2、运行过程中出现异常尖叫声导致这一现象发生的主要原因是由于电机轴承缺油,这时我们需要及时在电机的注油孔注入普通黄油,...

消防车里分别有什么装备?作用是什么?
12 封闭式防化服 简易\/国产 13 防核防化服 14 内置式重型防化服 国产 15 训练服 国产 16 防毒面具 国产 17 呼吸过滤罐 国产 18 双瓶呼吸器,面罩+双接口 国产 19 防化手套 国产 20 防割手套 国产 21 防高温手套 国产 22 防化安全靴 国产 3单元:侦检毒化设备 23 军事毒剂侦检仪 进口...

二级管分为那几种?
12、 雪崩二极管 (Avalanche Diode) 它是在外加电压作用下可以产生高频振荡的晶体管。产生高频振荡的工作原理是栾的:利用雪崩击穿对晶体注入载流子,因载流子渡越晶片需要一定的时间,所以其电流滞后于电压,出现延迟时间,若适当地控制渡越时间,那么,在电流和电压关系上就会出现负阻效应,从而产生高频振荡。它常被应用于微...

请问二极管是什么一种产品?具体有什么作用?
面接触型二极管的“PN结”面积较大,允许通过较大的电流(几安到几十安),主要用于把交流电变换成直流电的“整流”电路中。平面型二极管是一种特制的硅二极管,它不仅能通过较大的电流,而且性能稳定可靠,多用于开关、脉冲及高频电路中。 一、根据构造分类 半导体二极管主要是依靠PN结而工作的。与PN结不可分割的点接触...

桓仁满族自治县19228115491: 防止sql注入有什么比较可靠的方法 -
永春暖胃: 要防止SQL注入其实不难,你知道原理就可以了. 所有的SQL注入都是从用户的输入开始的.如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了.用户输入有好几种,我就说说常见的吧. 文本框、地址栏里***.asp?中?号后面...

桓仁满族自治县19228115491: 关于防止sql注入的几种手段(一) -
永春暖胃: 其实特别不愿意说sql注入的问题,因为这的确是个老掉牙的问题了,但是仍然还有不少人在这方面自以为安全性做得很到位,或者说万事只要存储过程就可以防止注入,即全都参数化,这样对于某些复杂逻辑来说,sql存储过程写法太过于冗长...

桓仁满族自治县19228115491: 什么是sql注入?sql注入有哪些方式?防止sql注入又有哪些方式(.Net下) -
永春暖胃: 所谓SQL注入,其实是程序漏洞,没有什么技术,比如下面的语句就可能被注入 SQL="SELECT * FROM ADMIN WHERE USER='" &REQUEST("USER")& "' AND PASS ='" &REQUEST("PASS")& "'"别人可以精心设计一个PASS...

桓仁满族自治县19228115491: 程序设计中有效避免SQL注入的方法有哪些?
永春暖胃: 可以替换到客户端传值中的 “ ' ”符号.

桓仁满族自治县19228115491: 如何防止sql注入,常用的方法和优缺点 -
永春暖胃: 一般都是用关键字对比和正则表达式检测那些不能出现在当前SQL语句中的关键字,因不同的数据库系统SQL语句有差别,缺乏通用的方法.

桓仁满族自治县19228115491: 如何从根本上防止 SQL 注入 -
永春暖胃: SQL注入并不是一个在SQL内不可解决的问题,这种攻击方式的存在也不能完全归咎于SQL这种语言,因为注入的问题而放弃SQL这种方式也是因噎废食.首先先说一个我在其他回答中也曾提到过的观点:没有(运行时)编译,就没有注入. ...

桓仁满族自治县19228115491: 怎么样防止Sql注入? -
永春暖胃: (1)对于动态构造SQL查询的场合,可以使用下面的技术: 第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义.再来看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND ...

桓仁满族自治县19228115491: 要阻止SQL注入攻击,需要那样方法?
永春暖胃: SQL注入攻击的总体思路: 发现SQL注入位置; 判断服务器类型和后台数据库类型; 确定可执行情况 对于有些攻击者而言,一般会采取sql注入法.下面我也谈一下自己关于sql注入法的感悟. 注入法: 从理论上说,认证网页中会有型如: ...

桓仁满族自治县19228115491: sql注入方式和防御? -
永春暖胃: 注入方式:QL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.防御:如果是.net的后台 比如sql语句是 id='"+ textbox.Text +"' 就会被注入, 如果id=@idcommand.parameters.addWithValue("@id",textbox.Text) 这样就可以.用replace把单引等特殊字符替换也行

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网