sql注入单引号
A. 简述什么是sql注入,写出简单的SQL注入语句
SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。
B. sql注入通俗说到底是什么意思
一般开发,肯定是在前台有两个输入框,一个用户名,一个密码,会在后台里,读取前台传入的这两个参数,拼成一段sql,例如:
select
count(1)
from
tab
where
usesr=userinput
and
pass
=
passinput,把这段sql连接数据后,看这个用户名/密码是否存在,如果存在的话,就可以登陆成功了,如果不存在,就报一个登陆失败的错误。对吧。
但是有这样的情况,这段sql是根据用户输入拼出来,如果用户故意输入可以让后台解析失败的字符串,这就是sql注入,例如,用户在输入密码的时候,输入
''''
'
or
1=1'',
这样,后台的程序在解析的时候,拼成的sql语句,可能是这样的:
select
count(1)
from
tab
where
user=userinput
and
pass=''
or
1=1;
看这条语句,可以知道,在解析之后,用户没有输入密码,加了一个恒等的条件
1=1,这样,这段sql执行的时候,返回的
count值肯定大于1的,如果程序的逻辑没加过多的判断,这样就能够使用用户名
userinput登陆,而不需要密码。
防止sql注入,首先要对密码输入中的单引号进行过滤,再在后面加其它的逻辑判断,或者不用这样的动态sql拼。
C. SQL注入攻击的时候,为什么要在URL后面加上abc.aspp=YY',为什么多要个单引号
有些人喜欢直接拼凑SQL语句
比如你说的这个。可以这么写
select * from table1 where column='"& Request.QueryString("p") &"'
这样你加个单引号,就可以跟前面的单引号形成一组,后面再加点其它的语句,也就可以一并执行了
D. 输入单引号就报错,这样的链接存在sql注入吗
这样肯定会存在注入的,可以使用SQL变量的方式来对数据库进行操作,部分C#代码MySqlParameter[] pars = new MySqlParameter[] {
new MySqlParameter("GroupId",MySqlDbType.String){Value=groupId}
};
string sql = "select * from employee where IsDel!=1 and GroupId=@GroupId";
E. 求教谁给讲讲SQL注入攻击的步骤
第一步:SQL注入点探测。探测SQL注入点是关键的第一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户输入未进行有效验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。
第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法有很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断,还可以使用特定函数来判断。
第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的,通过构造特殊的SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
第四步:查找Web后台管理入口。Web后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
F. sql注入' or '' = ' ,最后一个单引号是什么意思
这是sql注入的写法,把or给当成字符串了
G. sql中怎么注入单引号的值
单引号前另外加一个单引号。我举一个例子:SELECT 'o''liven' 注意“o”和“liven”前面有两个单引号,但是只输出一个运行输出结果:插入、删除和更新也是如此。
H. 如何防范SQL注入漏洞及检测
SQL注入漏洞攻击的防范方法有很多种,现阶段总结起来有以下方法:
(1)数据有效性校验。如果一个输入框只可能包括数字,那么要通过校验确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符,最好的方法是增加字符复杂度自动验证功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单数据输入和查询字符串输入的长度也是一个好方法。如果用户的登录名最多只有10个字符,那么不要认可表单中输入10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。
(2)封装数据信息。对客户端提交的数据进行封装,不要将数据直接存入cookie中,方法就是在编程的代码中,插入session、if、try、else,这样可以有效地防止攻击者获取cookie中的重要信息。
(3)去除代码中的敏感信息。将在代码中存在的用户名、口令信息等敏感字段删除,替换成输入框。
SQL=" select from users where username = ’admin’and password= ’1234567’ "
如:这样显然会暴露管理员的用户名、口令信息。可以将其修改成:
SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"
这样就安全了很多,入侵者也是不会轻易的就获取到用户名、口令信息。
(4)替换或删除单引号。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注入漏洞攻击,单引号时常会无法约束插入数据的Value,可能给予输入者不必要的权限。用双引号替换掉单引号可以使大部分SQL注入漏洞攻击失败。 如:
“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”
显然会得到与
“select * from users where username='admin' and password= '1234567'”
相同的结果。
(5)指定错误返回页面。攻击者有时从客户端尝试提交有害代码和攻击字符串,根据Web Service给出的错误提示信息来收集程序及服务器的信息,从而获取想得到的资料。应在Web Service中指定一个不包含任何信息的错误提示页面。
(6)限制SQL字符串连接的配置文件。使用SQL变量,因为变量不是可以执行的脚本,即在Web页面中将连接数据库的SQL字符串替换成指定的Value,然后将Web.config文件进行加密,拒绝访问。
(7)设置Web目录的访问权限。将虚拟站点的文件目录禁止游客用户(如:Guest用户等)访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。
(8)最小服务原则。Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp、cmd、vbscript等。
(9)鉴别信息加密存储。将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。
(10)用户权限分离。应尽可能的禁止或删除数据库中sa权限用户的访问,对不同的数据库划分不同的用户权限,这样不同的用户只能对授权给自己的数据库执行查询、插入、更新、删除操作,就可以防止不同用户对非授权的数据库进行访问。
I. 怎么绕过这个SQL注入后面的单引号
绕过不执行不知道怎么写
但可以让where条件变成无意义的条件
arg="1' OR '1'='1";这样c='"+"1' OR '1'='1"+"'。执行时应该就变成了
select * from table where c='1' OR '1'='1' ,判断条件无意义了,即相当于 select * from table
这个网络上就有示例
J. SQL注入单引号
SqlParameter到数据库里单引号会被转义,所以才能有效避免注入攻击。http://msdn.microsoft.com/zh-cn/library/ms161953(v=SQL.105).aspx