㈠ sql注入漏洞的形成原因
我想来是把一串字符串拼接起来的,顶多就是写个函数把变量中的特殊字符过滤一下。
㈡ 关于sql注入漏洞的问题
取值时id=后面的全部算作id的值,这样and 1=1也被传到sql的参数中
1=1即为true,所以对sql本身没有影响
1=2即为false,在where条件中添加一个了false条件,所以数据是读不到的
像and 1=1这种本来不属于程序设计需要的参数,被恶意添加到了程序里
并且未处理过滤就是漏洞
㈢ SQL注入漏洞该怎么修复啊
防止注入漏洞,是一种设计理念啊。
具体点说,就是应该:
1、将页面的输入项拆分成数据项变量,通过函数调用的方式;
2、将变量传入处理函数,然后处理函数重新整理并判断变量的合法性;
3、最后将变量在函数内部整理成sql语句执行;
这样增加了页面提交数据的判断,可以比较有效的避免被注入的可能。
㈣ 如何解决SQL注入漏洞
要防止SQL注入其实不难,你知道原理就可以了。
所有的SQL注入都是从用户的输入开始的。如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了。用户输入有好几种,我就说说常见的吧。
文本框、地址栏里***.asp?中?号后面的id=1之类的、单选框等等。一般SQL注入都用地址栏里的。。。。如果要说怎么注入我想我就和上面的这位“仁兄”一样的了。
你只要知道解决对吗?
对于所有从上一页传递过来的参数,包括request.form 、request.qurrystring等等进行过滤和修改。如最常的***.asp?id=123 ,我们的ID只是用来对应从select 里的ID,而这ID一般对应的是一个数据项的唯一值,而且是数字型的。这样,我们只需把ID的值进行判定,就可以了。vbs默认的isnumeric是不行的,自己写一个is_numeric更好,对传过来的参数进行判定,OK,搞定。算法上的话,自己想想,很容易了。但是真正要做到完美的话,还有很多要计算的。比如传递过来的参数的长度,类型等等,都要进行判定。还有一种网上常见的判定,就是判定传递参数的那一页(即上一页),如果是正常页面传弟过来就通过,否则反之。也有对' or 等等进行过滤的,自己衡量就可以了。注意一点就是了,不能用上一页的某一个不可见request.form("*")进行判定,因为用户完全可以用模拟的形式“复制”一个和上一页完全一样的页面来递交参数。
㈤ sql注入漏洞如何修复
我理解的SQL注入是这么一回事。比如你做一个登录的功能,你后台的SQL拼接 是
WHERE USER_NAME = 'XX' AND PASSWORD = 'XX'
如果用户想办法将 USER_NAME 的值穿过去是 ' OR 1=1 OR '' = 这个的话 (包括引号)
那么你的查询条件将失效 将会查出全部的用户。
这种注入 能防范的方法太多了。 比如查出来之后 你可以用PASSWORD和用户输入的PASSWORD对比一下 看是否一致 不一致 说明是入侵。
㈥ SQL注入漏洞的判断
如果以前没玩过注入,
请把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。
为了把问题说明清楚,以下以asp?id=xx(" target=_blank>http://www.hackbase.com/news.asp?id=xx(这个地址是假想的)
为例进行分析,xx可能是整型,也有可能是字符串。
1、整型参数的判断
当输入的参数xx为整型时,通常news.asp中SQL语句原貌大致如下:
select * from 表名 where 字段=xx,所以可以用以下步骤测试SQL注入是否存在。
最简单的判断方法
http://www.hackbase.com/news.asp?id=xx’(附加一个单引号),
此时news.asp中的SQL语句变成了
select * from 表名 where 字段=xx’,
如果程序没有过滤好“’”的话
就会提示 news.asp运行异常;
但这样的方法虽然很简单,但并不是最好的
因为
first,不一定每台服务器的IIS都返回具体错误提示给客户端,
如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,
但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。
请和系统管理员联络。
second,目前大多数程序员已经将“’“ 过滤掉,所以用” ’”测试不到注入点
所以一般使用经典的1=1和1=2测试方法
见下文:
http://www.hackbase.com/news.asp?id=xx and 1=1, news.asp运行正常,
而且与http://www.hackbase.com/news.asp?id=xx运行结果相同;
http://www.hackbase.com/news.asp?id=xx and 1=2, news.asp运行异常;(这就是经典的 1=1 ;1=2 判断方法)
如果以上面满足,news.asp中就会存在SQL注入漏洞,反之则可能不能注入。
2、字符串型参数的判断
方法与数值型参数判断方法基本相同
当输入的参数xx为字符串时,通常news.asp中SQL语句原貌大致如下:
select * from 表名 where 字段='xx',所以可以用以下步骤测试SQL注入是否存在。
http://www.hackbase.com/news.asp?id=xx’(附加一个单引号),此时news.asp中的SQL语句变成了
select * from 表名 where 字段=xx’,news.asp运行异常;
http://www.hackbase.com/news.asp?id=xx and '1'='1', news.asp运行正常,
而且与http://www.hackbase.com/news.asp?id=xx运行结果相同;
http://www.hackbase.com/news.asp?id=xx and '1'='2', news.asp运行异常;
如果以上满足,则news.asp存在SQL注入漏洞,反之则不能注入
3、特殊情况的处理
有时ASP程序员会在程序员过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种方法试一试。
①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;
②UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等
;URLEncode信息参见附件一;
③ASCII码法:可以把输入的部分或全部字符全部
<4>出了上述方法以外,还有个更简单的方法就是使用现成的工具
像NB联盟的NBSI就是一款很不错的工具,目前最新的版本为2.2
㈦ 如何发现sql注入漏洞
要防止SQL注入其实不难,你知道原理就可以了。
1、所有的SQL注入都是从用户的输入开始的。如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了。用户输入有好几种,我就说说常见的吧。
2、文本框、地址栏里***.asp?中?号后面的id=1之类的、单选框等等。一般SQL注入都用地址栏里的。。。。
3、对于所有从上一页传递过来的参数,包括request.form 、request.qurrystring等等进行过滤和修改。如最常的***.asp?id=123 ,我们的ID只是用来对应从select 里的ID,而这ID一般对应的是一个数据项的唯一值,而且是数字型的。这样,我们只需把ID的值进行判定,就可以了。
㈧ sql server有哪些 sql注入漏洞
SQL注入,这个很早的事情了,流行于ASP时代,主要是由于前台验证不够,后台又没有过滤不安全字符。
简单的例子:
分别由NameTxt,PwdTxt接受页面输入用户名和密码,然后构造如下sql语句:
select * from [User] where userName = '" + NameTxt + "’and userPassword = '" + PwdTxt + "'";
比如你的用户名为your,我不知道密码,但是我在"用户名"处输入 your '--"
select * from [User] where userName='your '-- 'and userPassword =....
注意"--",会把后边的sql作为注释,这就是sql注入。
03-05年比较流行sql注入,也可通过地址注入(使用QueryString传参数),如果权限足够,何以执行update/delete语句。
㈨ 提示有SQL注入漏洞
strSql="select * from user where 用户名='"&Uname&"' and 密码='"&Upass&"'"
改成:
strSql="select * from user where 用户名='"&Replace(Uname,"'", "''")&"' and 密码='"&Replace(Upass,"'", "''")&"'"
就是说,把单引号替换成2个单引号,就可以避免字符串型的注入漏洞了
如果是int型,就不能用Replace了,而要在拼接sql前判断是否数字