源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 808|回复: 33

[ASP编程] SQL 注入式攻击的终极防范

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2008-12-25 12:28:13 | 显示全部楼层 |阅读模式
前一篇我们已经讲了SQL注入攻击漏洞产生的本质是由编程人员编码的不当造成的,下面我们就来继续讲如何才是正确的编码,才不会受到SQL注入的攻击 在讲这个问题之前让我们来先看一段代码:
复制代码 代码如下:
dim sql_injdata,SQL_inj,SQL_Get,SQL_Data,Sql_Post
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "<Script Language=javascript>alert('SQL防注入系统提示,请不要在尝试注入!');history.back(-1)</Script>"
Response.end
end if
next
Next
End If
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "<Script Language=javascript>alert('SQL防注入系统提示,请不要在尝试注入!');history.back(-1)</Script>"
Response.end
end if
next
next
end if

这是一段在互联网上广泛流行的ASP防注入的代码,其思想是通过对Post方法和Get方法提交的数据进行检查,通过过滤Insert、Update、And等等这些敏感字符的办法来防止受到SQL注入式的攻击,从理论上来说如果我们过滤了足够多的字符那是绝对可以保证不会受到SQL注入式攻击的,但是请再仔细阅读一下这段代码,注意一下它的判断方式,它是通过instr函数来判断的,也就是说如果我要过滤and字符,实际上被过滤的不仅仅是And这个单词,同时把所有包含and这种字符组合方式的所有单词都给过滤掉了,比如island、mainland、hand…………,如果把这些字符都过滤了还有人会愿意用吗?所以这种过滤敏感字符的方法根本就没有意义,让我比较意外的是这么一个垃圾东西居然在互联网上被人奉为经典的贴来贴去,真是无语。
有人说SQL注入式攻击是因为拼接SQL查询字符串造成的,所以使用存储过程不使用拼接SQL查询字符串的方式可以不受SQL注入式的攻击,真是这样吗?不见得,下面再让我们来看一个存储过程被注入攻击的例子。
存储过程dt_GetNews代码如下:
CREATE PROCEDURE dt_GetNews
@newstype int
AS
select * from news where newstype=@newstype
GO
调用的代码:
<%
dim adoconnection
set adoconnection=server.createobject("adodb.connection")
'…………这里省略了建立数据库连接的相关代码
adoconnection.execute "exec dt_GetNews "+request("newstype")
adoconnection.close
%>
如果request("newstype")的值等于1,运行的结果是返回news表中所有newstype字段为1的记录,但是如果request("newstype")的值是"1;drop table news"呢,返回的结果是news表被删除。
从这个例子中可以看出来即便是用存储过程同样也会被攻击,再说了select * from news where newstype=@newstype难道就不是拼接,所以说拼接SQL查询字符串和SQL注入攻击之间没有必然的联系,存储过程也不一定能防御注入式攻击。
那么究竟怎么写才不会受到SQL注入攻击呢,下面我就介绍一种终极方法,说白了很简单也很原始就是数据类型验证加单引号替换。不管是Oracle、Sql Server还是mySql、Access还是别的关系数据库,字段的类型大体上可以分为两大类:数值型(如:int、float等)和字符型(如:char、varchar等),根据字段类型的不同对应的SQL语句也略有区别,比如:
“Select * from news where newstype=1”里面newstype字段必然是一个数值型的字段,
”select * from news where newstype='社会新闻'”里面newstype字段必然是一个字符型的字段。
针对数值型的字段,我们必须要做的是一定要检查参数的数据类型,比如我们用”select * from news where newstype=”+v_newstype这种方式构造查询语句的时候必须检查v_newstype变量的数据类型,v_newstype至少得是一个数,可以是整数也可以是浮点数,如果作了这样的检查,”select * from news where newstype=”+v_newstype这种方式就绝对不会构造出类似”select * from news where newstype=1;drop table news”这样的语句。ASP相对ASP.Net、JSP等更容易受到攻击的原因,就是因为在ASP中变量可以不用申明以及变量类型不明确导致的。
针对字符型的字段,我们必须要做的是一定要处理单引号('),处理的方法就是将一个单引号替换成两个的单引号(‘'),比如我们用”select * from news where newstype='”+v_newstype+”'”这种方式构造查询语句的时候必须将v_newstype里的单引号替换成两个单引号,因为在SQL中被两个单引号括起来的部分表示一个字符串,而连续的两个单引号则表示一个单引号字符,做了这样的处理以后再来看”select * from news where newstype='”+v_newstype+”'”这种构造方式,当v_newstype的值为:
“社会新闻';drop table news--”
经过一个单引号到两个单引号的替换后v_newstype的值就成了:
“社会新闻'';drop table news--”
构造出来的SQL语句成了:
”select * from news where newstype='社会新闻'';drop table news—‘”
查询的结果是返回news表中newstype字段的值为”社会新闻';drop table news--”的记录,而并不会像之前那样造成news表被删除的后果。
另外,需要做处理的不仅仅是Select语句,包括Insert、Update、Delete、Exec等等都需要处理,大家可以再看看以下这几种注入方式:
在"insert into news(title) values('"+v_title+"')"这种构造中,
当v_title="123';drop table news--'"的时候;
在"update news set title='"+v_title+"' where id="+v_id这种构造中,
当v_title="123'--" 或者 v_id="1;drop table news--" 的时候,所以不光是Select语句的问题,其他语句都可能会有问题,不要仅仅盯着Select
总之,做好了数据类型的验证和单引号字符的处理以后,就算它孙猴子有万般能耐也飞不出我如来的掌心。
回复

使用道具 举报

15

主题

2万

回帖

122

积分

注册会员

Rank: 2

积分
122
发表于 2022-9-11 05:23:50 | 显示全部楼层
天天源码社区www.tiantianym.com
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

194

积分

注册会员

Rank: 2

积分
194
发表于 2022-9-11 20:00:55 | 显示全部楼层
需要很久了终于找到了
回复 支持 反对

使用道具 举报

匿名  发表于 2022-9-11 21:10:48

Ламинат Класс 33





Весь ламинат, предлагаемый нашей компанией, систематизирован в наглядном и удобном онлайн каталоге, что существенно упрощает процесс выбора и последующего приобретения Купить Ламинат
   Каждый клиент может подобрать необходимый вариант напольного покрытия в соответствии с уровнем его износостойкости, что определяет назначение представленного материала [url=https://store-parket.ru/category/laminat/?yclid=1][/url]


回复 支持 反对

使用道具

匿名  发表于 2022-9-11 21:12:02

Купить Массив







回复

使用道具

匿名  发表于 2022-9-11 21:12:35

Паркете

6ox8dn ·±нУЪ 2022-9-11 05:23
МмМмФВлЙзЗшwww.tiantianym.com





Ламинат Кроностар коллекция Бродвей - прекрасная имитация натуральной древесины итальянского дуба [/url]
   Оригинальная  текстура доски, выполненная методом термопрессования, придает ей благородный вид [url=https://store-parket.ru/category/inzhenernaja-doska/?yclid=1]

   Покрытие отличается высокой прочностью, может применяться не только в жилых помещениях, но и в офисах, кафе, магазинах [url=https://store-parket.ru/category/inzhenernaja-doska/?yclid=1][/url]


回复 支持 反对

使用道具

匿名  发表于 2022-9-11 21:13:39

Ламинат Цена

ШёУГ§1 ·±нУЪ 2022-9-11 20:00
РиТЬГБЛЦХУЪХТБЛ







回复 支持 反对

使用道具

匿名  发表于 2022-9-11 21:14:16

Купить Ламинат



Широко признанный в России, ламинат кроностар, является высококачественным напольным покрытием, устойчивым к истиранию и скольжению благодаря специальному покрытию Паркете
   Изготовлен из высококачественных п [/url]
   [url=https://store-parket.ru/category/laminat/?yclid=1]

   [/url]
   537 руб [url=https://store-parket.ru/category/probkovoe-pokrytie/?yclid=1]



Модные тенденции, подмеченные дизайнерами FLOORWOOD, нашли отражение в коллекции EPICA от FLOORWOOD [/url]
   Коллекция получилась разнообразной и стильной: Яркие дизайны, Смелые структуры -  это то, что несомненно притягивает взгляд к  FLOORWOOD EPICA [url=https://store-parket.ru/category/laminat/?yclid=1]

   Такой пол не может остаться незамеченным [/url]


За светлыми полами сложнее ухаживать, но они визуально увеличивают и освежают помещение [url=https://store-parket.ru/category/parketnaja-doska/?yclid=1]

   Особенно они востребованы в скандинавских стилях и провансе [/url]
   А состаренные или выбеленные серии изящно дополнят классические интерьеры и лофт [url=https://store-parket.ru/category/massivnaya-doska/?yclid=1]


回复 支持 反对

使用道具

匿名  发表于 2022-9-11 21:14:53
回复 支持 反对

使用道具

匿名  发表于 2022-9-11 21:15:22

Паркет На



0 [/url]
  426 м0 [url=https://store-parket.ru/category/laminat/?yclid=1]

  45 м0 Пробковый
  461 м0 [/url]
  472 м1 м1 [url=https://store-parket.ru/category/massivnaya-doska/?yclid=1]

  06 м1 [/url]
  5 м10 мм10,1см10,2см10,4см10,5см100100 мм101,5см105107,4см109см10см11 мм11,4см11,8см110110,5см116 мм117,5см118,4см11см12 мм12,1см12,3см12,5см12,7см12,8см12,9см12 [url=https://store-parket.ru/?yclid=1]Купить Ламинат

  512 Пробковый
  5 мм122см124см126,5см12см13 мм13,2см13,3см13,5см13,6см13,7см13,9см13 Ламинат Класс 33
  3 мм130133см13см14 мм14 см14,2см14,5см14,8см14,9см14 [/url]
  5 мм14см15 мм15,2см15,3см15,5см15,9см150150 мм150см159 мм15см1616 мм16,3см16,5см16,6см16,7см16,8см160162 мм16см17 мм17,3см17,4см17,5см17,8см173 [url=https://store-parket.ru/category/parketnaja-doska/?yclid=1]

  2175 мм17см18 мм18,2см18,3см18,6см18,8см18018см19 мм19,1см19,5см194 мм19см2 м2 [/url]
  5 м20 мм20,2см20,3см20,5см200 мм205 мм20см21 мм21,5см210 мм21см22 мм22,1см22,2см22,3см22,4см22,5см22,7см220 мм226 мм228 мм22см23 мм23,5см23,8см230 мм231 мм232мм23см24,3см24,8см24024см25 мм25,4см25,5см25,6см25,8см250 мм254 мм25см26,5см26см27,2см27,3см27,5см27,9см275 мм27см28см29,5см29,6см29,8см29см3 м3 [url=https://store-parket.ru/category/laminat/?yclid=1]

  5 м30,4см30,5см300 мм30см31,2см31см32,2см32,4см32,5см32,6см320 мм32см33,4см33,5см33,7см33,8см33см34,5см34см35,1см35,5см350 мм35см36,5см36см37см38,2см38,5см38см4 м40 мм40-160 мм40,3см400 мм40см41,5см41см42,5см43см44,6см447 мм44см45,1см45,5см45,7см450 мм459 мм45см46,2см46,4см46,6см463 мм46см47см48,3см48см49см5 м5,1см5050 мм50,5см500 мм50см51,5см51см53,2см53,5см53,7см54см550 мм55см56,4см56,5см59,3см59см6,5см6,8см60 мм60,7см600 мм60см61см62,8см63см64,2см64см65,7см66см67 мм67,3см68,5см7,8см7,9см70 мм700 мм70см71см72,5см73,2см79,6см7см8,2см800 мм80см81,3см81см88,6см89,5см89,7см8см9,3см9,5см9,7см9,8см90 мм900мм93,5см9см




回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-23 21:12 , Processed in 0.078451 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表