Sql注入例子

2019-08-17 13:46

Sql注入例子

一没有正确过滤转义字符

■SELECT * FROM users WHERE name = '\

这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为:a' or '1'='1那么原语句就变成 SELECT * FROM users WHERE name = 'a' or 't'='t';

如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。

如果userName设置为a'; DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '% 就执行以下操作:

SELECT * FROM users WHERE name = 'a'; DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%';

■ select * from [User] where username='\

password='\

比如我知道用户名为student,那么输入:student;‘--’ - -用于注释掉后面的内容,原语句就变成:

select * from [User] where username=student;--and password=;语句执行成功。

■ 其它的SQL执行不会将执行同样查询中的多个命令作为一项安全措施。这会防止攻击者注入完全独立的查询,不过却不会阻止攻

击者修改查询。 2绕过程序限制继续注入

在上文中提到,有很多人喜欢用’号测试注入漏洞,所以也有很多人用过滤’号的方法来“防止”注入漏洞,这也许能挡住一些入门者的攻击,但对SQL注入比较熟悉的人,还是可以利用相关的函数,达到绕过程序限制的目的。

有些语句包含有’号,我们举个例子来看看怎么改造这些语句:

简单的如where xtype=’U’,字符U对应的ASCII码是85,所以可以用where xtype=char(85)代替;如果字符是中文的,比如where name=’用

户’,可以用where name=nchar(29992)+nchar(25143)代替。

解决方案:

使用参数化的过滤性语句

要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。

输入过滤包括过滤敏感字符,敏感数据等。可以用rstrSQL = strSQL.replace(\把\变成\

参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。

1使用全局文件:

再在Global文件里里加入

protected void Application_BeginRequest(Object sender, EventArgs e) {

//SQL防注入 string Sql_1 =

\clare|drop+|drop+table|creat+|creat+table\ string Sql_2 =

\r+|truncate+|char+|+char(|declare+|drop+|creat+|drop+table|creat+table\ string[] sql_c = Sql_1.Split('|'); string[] sql_c1 = Sql_2.Split('|');

if (Request.QueryString != null) {

foreach (string sl in sql_c) {

if (Request.QueryString.ToString().ToLower().IndexOf(sl.Trim()) >= 0) {

Response.Write(\警告!你的IP已经被记录!不要使用敏感字符!\ Response.Write(sl);

Response.Write(Request.QueryString.ToString()); Response.End(); break; } } }

if (Request.Form.Count > 0) {

string s1 = Request.ServerVariables[\服务器名称 if (Request.ServerVariables[\ {

string s2 = Request.ServerVariables[\接收的名称

string s3 = \

if (s1.Length > (s2.Length - 7)) {

s3 = s2.Substring(7); } else {

s3 = s2.Substring(7, s1.Length); }

if (s3 != s1) {

Response.Write(\警告!你的IP已经被记录!不要使用敏感字符!\ Response.End(); } } } }

注意:过滤关键字时要考虑到关键字的多种形式,比如:select,可能的注入词为selecT. SelEct. 等形式。

2使用参数化语句

Public model) {

StringBuilder strSql = new StringBuilder(); strSql.Append(\Academy=@Studept,Class=@Stuclass,Stu_Name=@Studentname,Stu_Sex=@Studentsex,\);

strSql.Append(\where Study_Num=@Studynum\);

SqlParameter []parameters=

bool

Updatainfo(Logindemo.Model.Studentinfo

new SqlParameter(\, SqlDbType.NChar ,10) , new SqlParameter(\, SqlDbType.NChar,10),

new SqlParameter(\, SqlDbType.NChar ,11) , new SqlParameter(\, SqlDbType.BigInt), new SqlParameter(\, SqlDbType.NChar,10), new SqlParameter(\, SqlDbType.VarChar,50)}; parameters[0].Value = model.Studept; parameters[1].Value = model.Stuclass; parameters[2].Value = model.Studynum; parameters[3].Value = model.Stutelephone; parameters[4].Value = model.Studentsex; parameters[5].Value = model.Studentname;

int rows= SqlHelper.ExecuteSql (strSql.ToString(), parameters);

if (rows > 0) {

return true; } else {

return false; }

二:Incorrect type handling

如果一个用户提供的字段并非一个强类型,或者没有实施


Sql注入例子.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:西方文化史笔记

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: