仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 478|回复: 9
打印 上一主题 下一主题

[学习教程] ASP教程之编写平安的ASP代码

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 23:41:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
asp,jsp,php是web开发的三大技术,asp简单易用且有microsoft做靠山,jsp功能强大是因为有java支持,php则开源跨平台.在国内,asp应用范围最广,jsp发展势头最猛,php则处于劣势.这可能与公司的支持以及技术的培训有关.平安|平安ASP中数据库的平安是一个很严厉的成绩。良多代码的编写者意想到了这类成绩,而且不寒而栗地对他们以为有成绩的中央做了弥补,但罕见的情形是要末没有穷尽一切的可疑地址,要末这类弥补逻辑上有误。关于一个耐烦且嗅觉敏捷的打击者来讲,这类意义上的弥补措施和没有任何弥补措施没有实质上区分。
上面排列的是一些大概呈现的成绩:有些是罕见易犯的毛病,有些基本就是逻辑上有成绩。看看你是否是也如许写过?关于打击者而言,倒着看这些器材,应当对寻觅毛病有点匡助,更加完全一点的检测办法,请等我的关于黑/白盒剖析和主动化测试文章。

1、使人困惑的过滤体例
典范例子是不论掉臂地对一切的输出变量都往失落单引号,大概是把单引号交换成正当的两个单引号,比方:
  1. id=replace(request.querystring("id"),"","")str=replace(request("someinput"),"","")
复制代码

如今很了然的是,第一个做法很有多是毛病的。由于引发SQLInjection的不老是单引号,再扩展一点,引发成绩的不是任何独自的标记,如许子的过滤,有些冤枉单引号了。准确的使用注进,主要的一点是闭合后面的一句SQL查询语句――常常是得先准确地闭合后面一个前提,由于我们大概会在统一句内里引进新的前提,弥补措施只需损坏注进前提应当就能够了,可是思索到其庞大性(上面会说),最好仍是较为完全的限定一下输出的字符品种。
第二个看起来是没有甚么成绩的,但潜伏的会带来一些隐患。这很简单给天然成的一个错觉是,我对输出的字符串已很无效的做过处置了,今后利用没有甚么成绩。这句话没有错,对字符串来讲如许做也是很准确的,可是他饰演了一个不但彩的脚色,试想一下,假如过滤后的字符串放进了数据库,尔后续的语句有间接拿出来利用的,这类对后面过滤的依附性,是否是准确的呢?
大概较好的做法应当是,针对详细的情形来断定过滤的原则。
罕见的输出变量有三种:数字,字符串另有汇合。关于数字型的输出变量,复杂挪用一下判别函数便可,见失掉的代码中,但凡反省了这类变量的,几近都准确。关于字符串型的来讲,基础上在拔出到天生的SQL语句时,前后都有单引号,假如仅从损坏注进前提来看,把单引号交换成两个单引号应当成绩不年夜。同理的,假如是一个字符串的汇合,也能够复杂的用这类办法。而假如是数字的汇合,情形大概略微贫苦一点,最少你得同意数字、逗号也许另有空格之类的标记在输出中一般呈现,如许子的过滤划定规矩大概显得庞大,不外你能够自创一下dvBBS6.1打过补钉后的版本,总的来讲,关于已发明的过滤毛病而言,他们仍是补得对照好的。
关于第二句话,最少如今不克不及说它说错的,我们留待前面办理。

2、猎取的数据值得信任吗?
实在如许子说局限显得有点年夜,一会儿触及到良多方面,一个例子一个例子地举来看好了。
起首是关于选择过滤数据的成绩。一向以来,我们以为但凡用户输出的器材,都要经由得当的处置。没错,但真实的是不是都做到呢?任意找个抓包的工具,好比Ethereal,看看在你用IE提交表单大概是翻开毗连的时分,都提交了甚么。大概,复杂一些,翻开NetAnt编纂一个义务,在协定标签中,看看谁人“自界说提交者”和“用户代办署理”的选项。
我想你已分明了,对方能够本人定制的器材不单单是GET或POST过去的数据!假如一切的用户都规行矩步地用扫瞄器,的确不必戒备这么严,假如对方不这么厚道,在取服务端变量或Cookie的时分可要当心了,没有任何人可以包管你取得的数据是正当的。关于Cookie而言,良多程序都出干涉题,以是之前夸大得对照多,至于别的的,存眷的人大概对照少一点,但你是不是看过大概写过如许的代码:
  1. sql="ShowHOT_COM_inst_online_char2,"&statuserid&","&membername&","&memberclass&","&Request.ServerVariables("REMOTE_HOST")&","&boardid&","&Request.ServerVariables("HTTP_USER_AGENT")&","&replace(stats,"","")&","&Request.ServerVariables("HTTP_X_FORWARDED_FOR")&","&UserGroupID&","&actCome&","&userhidden&","&userid&""
复制代码

Request.ServerVariables("HTTP_USER_AGENT")就是你在NetAnt中看到的用户代办署理选项,也就是说你能够假造,一样能够假造的另有Request.ServerVariables("HTTP_REFERER"),也就是你在NetAnt中看到的提交者选项等等。在做一些项目标时分,很有大概要将这一类的变量增加进数据库,这时候候要万万当心,这个中央的疏忽,引发的成果和其他范例变量未过滤招致的成果是一样的。
在Google上搜刮Referer和Request.ServerVariables两个关头字,还能够看到良多有成绩的写法,大概往看看蒲月份摆布的关于动网论坛进侵的文章,大概你的了解会加倍深入一点。
然后是一个埋没得略微深一点的成绩,不是用户的间接输出要不要过滤?
这就回到了我们后面留下的谁人成绩,单引号换成两个单引号的潜伏威逼。在第二次机关SQL语句的时分,倘使数据是从数据库内里间接往掏出来用的,多半情形下人们会以为后面已处置过的器材看起来仿佛并没有需要再处置,大概爽性就是没无意识到应当处置。这是极为毛病的!从两个方面来看,起首你进库的时分对提交数据中的单引号处置,仅仅是包管了单次SQL语句机关的准确性,并没有与日俱增地办理成绩;再说了,前面掏出数据用的时分,对数据平安性反省的依附并没有失掉包管,由于这类依附干系没有传送上去,并且依附干系自己还不是可传的。
就replace(request("someinput"),"","")而言,它的不安宁性在于这类过滤体例只是一种让步,换句话说只是在无限的局限内掩饰了大概呈现的成绩,而没有永世性的处置失落。它另有一个厌恶的中央在于给人一种错觉,仿佛是处置过的数据已平安了,简单让后继的代码编写者发生虚幻的平安感。对这两个缺点,不是靠换一个写法就可以办理的,由于假如你把单引号爽性往失落,又会引来别的一个成绩,输出数据中的确有必要并且准确的单引号怎样办?从一入手下手我就说,单引号自己是无罪的,过滤它只是一种办理手腕罢了,以是我们仍是就如许写吧,不外要在后继的部分增强一下反省。
这一类的成绩,假如仍然用动网论坛做例子,我倡议看一下六月八号的毛病文章。
另有就是过滤器的地位,这个搀杂了逻辑成绩在内的庞大成绩。
我已经十分惊异地发明乔客论坛对外分布的版本中一段让人以为难以想象的成绩代码,假如你对照感乐趣的话,翻翻gallery.asp就可以看到一个特定的举措序列(action=Flash_view),绕过了一切对id的反省。
实在提及来,这一类代码不太大概有太庞大的逻辑布局,对代码举行检察的时分,举行一切的分支掩盖是能够手工完成的,只需略微想一想就会发明对变量的反省是不是可以无效地抵达你的目标地――天生SQL语句的中央。
关于过滤器的地位,假如要深切下往,即刻就会出来一些让人头昏眼花的器材,两头的剖析很贫苦并且很情势化,固然的确有算法能够包管地位拔取的准确性,可是我想这里仍是给出一些结论性的器材吧。倘使你很有乐趣,我想你能够来信和我交换。
过滤的地位,取决于两个方面:你取得变量的来历,和你必要包管到的天生SQL语句的地位。后面一个,不管是来自于间接仍是直接输出,先想一想大概的输出字符;关于前面一个,你要包管不管程序运转情形如何,经由了过滤语句的流程必定会经由你必要包管到的天生SQL语句的地位(包管其是无效过滤语句的后向必经节点)。假如你不很分明流程的判别,我的倡议是if中仅仅判别,if嵌套间不要有过剩的器材,过滤语句后紧接天生SQL语句。
再回到后面提到的潜伏成绩,我们终究能够在这里办理了:在掏出数据后仍然起首举行判别。由于依据后面说的,这一种直接输出仍然有大概呈现伤害。
说到这里,插一句另类的过滤地位成绩:不要把对输出的过滤放到客户端办理,那是能够绕过的!谁能包管你的VBScript/JavaScript能起感化,假如他人间接用NC大概一个不撑持剧本的扫瞄器呢?
上述两个年夜的方面,以软件测试的眼光来熟悉,明显是没有穷尽一切的分支所招致。在利用对方提交的数据之前,先做一个对方一切大概进进字符的剖析列表,然后就每种输出分支情形举行范例的考核,这是每一个代码编写者都应当做的事变。这是一件很复杂的事变,由于只是范例上的考核还好,碰上语义的成绩就贫苦了……

3、范例准确意味着放行?

触及到语义的成绩,如果大概的话,我选择最好仍是避开。
比如关于一个整型数字,你输出切实其实实是一个整型,经由过程了过滤器,潜伏的成绩是你的输出内容上正当吗,大概基本就不该该从你这里取得信息?良多年前就有人提出来,有些注册的模块存在成绩:它内里的id是经由过程一个type=hidden掩饰后隐式提交的,可是我在第一步创建了用户,第二步仍就有大概经由过程提交内容分歧法的id来修正别人的信息。这类异类的成绩都长短常难发明,并且几近都只要靠履历而不是某一个详细的算法来处置。我们</p>asp,jsp,php是web开发的三大技术,asp简单易用且有microsoft做靠山,jsp功能强大是因为有java支持,php则开源跨平台.在国内,asp应用范围最广,jsp发展势头最猛,php则处于劣势.这可能与公司的支持以及技术的培训有关.
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-20 11:10:18 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
谁可相欹 该用户已被删除
板凳
发表于 2015-1-29 06:55:25 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
不帅 该用户已被删除
地板
发表于 2015-1-29 12:46:10 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
爱飞 该用户已被删除
5#
发表于 2015-1-30 21:06:34 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
再见西城 该用户已被删除
6#
发表于 2015-2-3 14:52:54 来自手机 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
简单生活 该用户已被删除
7#
发表于 2015-2-9 03:15:28 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
乐观 该用户已被删除
8#
发表于 2015-2-26 19:49:13 | 只看该作者
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
老尸 该用户已被删除
9#
发表于 2015-3-16 07:15:58 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
10#
发表于 2015-3-22 21:09:28 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 04:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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