莫相离 发表于 2015-1-16 23:14:46

ASP教程之提防SQL指令植进式打击

优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件打击甚么是SQL指令植进式打击?
在计划大概保护Web网站时,你大概忧虑它们会遭到某些下游用户的歹意打击。切实其实,现在的Web网站开辟者们针对其站点地点操纵体系平台或Web服务器的平安性而睁开的会商其实太多了。不错,IIS服务器的平安毛病大概招致歹意打击;但你的平安反省清单不该该仅唯一IIS平安性这一条。有些代码,它们一般是专门为数据驱动(data-driven)的Web网站而计划的,实践上常常同别的IIS毛病一样存在严峻的平安隐患。这些埋伏于代码中的平安隐患就有大概被称为“SQL指令植进式打击”(SQLinjection)的手腕所使用而招致服务器遭到打击。
SQL指令植进式打击手艺使得打击者可以使用Web使用程序中某些疏于提防的输出时机静态天生特别的SQL指令语句。举一个罕见的例子:
某Web网站接纳表单来搜集会见者的用户名和暗码以确认他有充足权限会见某些保密信息,然后该表单被发送到Web服务器举行处置。接上去,服务器真个ASP剧本依据表单供应的信息天生SQL指令语句提交到SQL服务器,并经由过程剖析SQL服务器的前往了局来判别该用户名/暗码组合是不是无效。
为了完成如许的功效,Web程序员大概会计划两个页面:一个HTML页面(Login.htm)用于登录,另外一个ASP页面(ExecLogin.asp)用于考证用户权限(即向数据库查询用户名/暗码组合是不是存在)。详细代码大概象如许:
Login.htm(HTML页面)

<formaction="ExecLogin.asp"method="post">
Username:<inputtype="text"name="txtUsername"><br>
Password:<inputtype="password"name="txtPassword"><br>
<inputtype="submit">
</form>

ExecLogin.asp(ASP页面)

<%
Dimp_strUsername,p_strPassword,objRS,strSQL

p_strUsername=Request.Form("txtUsername")
p_strPassword=Request.Form("txtPassword")

strSQL="SELECT*FROMtblUsers"&_
"WHEREUsername="&p_strUsername&_
"andPassword="&p_strPassword&""

SetobjRS=Server.CreateObject("ADODB.Recordset")
objRS.OpenstrSQL,"DSN=..."

If(objRS.EOF)Then
Response.Write"Invalidlogin."
Else
Response.Write"Youareloggedinas"&objRS("Username")
EndIf

SetobjRS=Nothing
%>

乍一看,ExecLogin.asp的代码仿佛没有任何平安毛病,由于用户假如不给出无效的用户名/暗码组合就没法登录。但是,这段代码恰恰不平安,并且它恰是SQL指令植进式打击的幻想方针。详细而言,计划者把用户的输出间接用于构建SQL指令,从而使打击者可以自行决意行将被实行的SQL指令。比方:打击者大概会在表单的用户名或暗码栏中输出包括“or”和“=”等特别字符。因而,提交给数据库的SQL指令便可能是:

SELECT*FROMtblUsersWHEREUsername=or=andPassword=or=

如许,SQL服务器将前往tblUsers表格中的一切纪录,而ASP剧本将会因而而误以为打击者的输出切合tblUsers表格中的第一笔记录,从而同意打击者以该用户的名义登进网站。
SQL指令植进式打击另有另外一种情势,它产生在ASP服务器依据querystring参数静态天生网页时。这里有一个例子,此ASP页面从URL中提掏出querystring参数中的ID值,然后依据ID值静态天生后继页面:

<%
Dimp_lngID,objRS,strSQL
p_lngID=Request("ID")

strSQL="SELECT*FROMtblArticlesWHEREID="&p_lngID

SetobjRS=Server.CreateObject("ADODB.Recordset")
objRS.OpenstrSQL,"DSN=..."

If(NotobjRS.EOF)ThenResponse.WriteobjRS("ArticleContent")

SetobjRS=Nothing
%>

在一样平常情形下,此ASP剧本可以显现具有特定ID值的文章的内容,而ID值是由URL中的querystring参数指定的。比方:当URL为http://www.ckuyun.com/Article.asp?ID=1055时,ASP就会依据ID为1055的文章供应的内容天生页面。
好像前述登录页面的例子一样,此段代码也向SQL指令植进式打击关闭了年夜门。某些歹意用户大概会把querystring中的文章ID值掉包为“0or1=1”等外容(也就是说,把URL换成http://www.ckuyun.com/Article.asp?ID=0or1=1)从而诱使ASP剧本天生不平安的SQL指令如:

SELECT*FROMtblArticlesWHEREID=0or1=1

因而,数据库将会前往一切文章的内容。
固然了,本例服务器所受的打击纷歧定会引发甚么严峻成果。但是,打击者却大概无以复加,好比用一样的手腕发送DELETE等SQL指令。这只必要复杂地修正前述URL中的querystring参数就能够了!比方:任何人都能够经由过程“http://www.ckuyun.com/Article.asp?ID=1055;DELETEFROMtblArticles”之类的URL来会见Web网站。
SQL指令植进式打击的伤害
SQL指令植进式打击大概引发的伤害取决于该网站的软件情况和设置。当Web服务器以操纵员(dbo)的身份会见数据库时,使用SQL指令植进式打击便可能删除一切表格、创立新表格,等等。当服务器以超等用户(sa)的身份会见数据库时,使用SQL指令植进式打击便可能把持全部SQL服务器;在某些设置下打击者乃至能够自行创立用户帐号以完整利用数据库地点的Windows服务器。
根绝SQL指令植进式打击
根绝SQL指令植进式打击的第一步就是接纳各类平安手腕监控来自ASPrequest工具(Request、Request.QueryString、Request.Form、Request.Cookies和Request.ServerVariables)的用户输出,以确保SQL指令的可*性。详细的平安手腕依据你的DBMS而异,上面给出的都是基于MSSQLServer的例子。
在前述登录页面的例子中,剧本希冀失掉的两个输出变量(txtUserName和txtPassword)均为字符串范例。不管用户在哪一个参数中拔出单引号,他都大概让数据库实行单引号中的SQL指令。为了根绝此类SQL指令植进式打击,我们能够借助Replace函数剔除单引号,好比:
p_strUsername=Replace(Request.Form("txtUsername"),"","")
p_strPassword=Replace(Request.Form("txtPassword"),"","")
在第二个例子中,剧本希冀的输出变量是长整型变量(ID)。用户能够经由过程在ID参数中拔出特别字符来运转不平安的SQL指令。为了为了根绝此类SQL指令植进式打击,我们只必要借助CLng函数限定ID值为长整型变量,好比:
p_lngID=CLng(Request("ID"))
当用户试图在ID中包括特别字符时,CLng就会发生一个毛病。
为了进一步削减SQL指令植进式打击的危胁,请务必扫除客户端毛病信息文本中的一切手艺材料。某些毛病信息常常保守了手艺细节,从而让打击者能够看出服务器的平安毛病地点。这里指的毛病信息不仅包含使用程序天生的动静框,还包含来自IIS的堕落提醒。为此,你能够克制由IIS发送的具体毛病信息,而改用自界说的堕落页面。(关于创立自界说的堕落页面的更多信息,请务必参阅《CreatingCustomASPErrorPages》。)
最初,为了加重SQL指令植进式打击的伤害,请限定Web使用程序所用的数据库会见帐号权限。一样平常来讲,使用程序没有需要以dbo大概sa的身份会见数据库。记着,给它的权限越少,你的网站越平安!你还能够思索分离给每一个必要会见数据库的工具分派只具有必</p>使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。

莫相离 发表于 2015-1-20 08:34:33

没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。

admin 发表于 2015-1-29 06:12:25

不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍

变相怪杰 发表于 2015-2-5 22:47:03

我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。

深爱那片海 发表于 2015-2-14 01:02:42

我想问如何掌握学习节奏(先学什么再学什么)最好详细点?

柔情似水 发表于 2015-3-4 03:39:01

运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。

愤怒的大鸟 发表于 2015-3-11 16:02:54

不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍

再现理想 发表于 2015-3-19 01:14:16

以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。

只想知道 发表于 2015-3-27 00:10:49

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
页: [1]
查看完整版本: ASP教程之提防SQL指令植进式打击