仓酷云

标题: ASP网页编程之URL编码与SQL打针 [打印本页]

作者: 老尸    时间: 2015-1-16 23:44
标题: ASP网页编程之URL编码与SQL打针
Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来;编码|编码说到url编码,你也许会想起N年前的url编码毛病。惋惜我是“生不逢时”啊,我打仗收集时,谁人毛病早就尽迹咯。

言回正传,URL编码是甚么东东呢?看看我从网上抄的界说:

援用:url编码是一种扫瞄器用来打包表单输出的格局。扫瞄器从表单中猎取一切的name和个中的值,将它们以name/value参数编码(移往那些不克不及传送的字符,将数据排行等等)作为URL的一部分大概分别地发给服务器。不论哪一种情形,在服务器真个表单输出格局模样象如许:

theName=Ichabod+Crane&gender=male&status=missing&headless=yes

URL编码遵守以下划定规矩:每对name/value由&符分隔;每对来自表单的name/value由=符分隔。假如用户没有输出值给这个name,那末这个name仍是呈现,只是无值。任何特别的字符(就是那些不是复杂的七位ASCII,如汉字)将以百分符%用十六进制编码,固然也包含象=,&,和%这些特别的字符。


呵呵,分明了吧,实在url编码就是一个字符ascii码的十六进制。不外略微有些变化,必要在后面加上“%”。好比“”,它的ascii码是92,92的十六进制是5c,以是“”的url编码就是%5c。那末汉字的url编码呢?很复杂,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。呵呵,晓得怎样转换的了吧。

URL编码平常我们是用不到的,由于IE会主动将你输出到地点栏的非数字字母转换为url编码。以是关于扫瞄器来讲http://blog.csdn.net/l%61ke2与http://blog.csdn.net/lake2是等效的(注重,第一个url我用%61交换了a)。呵呵,也许你已想起了,有人提出数据库名字里带上“#”以避免被下载,由于IE碰到#就会疏忽前面的字母。破解办法很复杂――用url编码%23交换失落#。我原本妄图使用url编码来躲过打针反省的,不外失利了,由于服务器端会将url编码转换成字符的。

等等,仿佛跑题了啊,呵呵,欠好意义:)

如今SQL打针十分盛行,以是就有人写了一些防打针的剧本。固然啦,思绪纷歧样,效果年夜分歧。列位看官请看上面的××SQL通用防注进asp版部分代码。

Fy_Url=Request.ServerVariables("QUERY_STRING")
Fy_a=split(Fy_Url,"&")
redimFy_Cs(ubound(Fy_a))
OnErrorResumeNext
forFy_x=0toubound(Fy_a)
Fy_Cs(Fy_x)=left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
Next
ForFy_x=0toubound(Fy_Cs)
IfFy_Cs(Fy_x)""Then
IfInstr(LCase(Request(Fy_Cs(Fy_x))),"and")0then
Response.Write"呈现毛病!"
Response.End
EndIf
EndIf
Next


它的思绪就是先取得提交的数据,以“&”为分界取得并处置name/value组,然后判别value里是不是含有界说的关头字(这里为求烦琐,我只留下了“and”),有之,则为打针。

乍一看往,value被反省了,仿佛没有成绩。呵呵,是的,value不会有成绩,但是,name呢?

它的name/value组值来自于Request.ServerVariables("QUERY_STRING"),呵呵,欠好意义,这里出成绩了。Request.ServerVariables("QUERY_STRING")是失掉客户端提交的字符串,这里其实不会主动转换url编码,哈哈,假如我们把name举行url编码再提交的话,呵呵,那就能够绕过反省了。好比参数是ph4nt0m=lake2andlis0,此时程序可以检测到;假如提交%50h4nt0m=lake2andlis0(对p举行url编码),程序就会往判别%50h4nt0m的值,而%50h4nt0m会被转换为ph4nt0m,以是%50h4nt0m值为空,因而就绕过了检测。

等等,为何既然name不解码能够绕过反省而value就不克不及绕过呢?由于value的值取自Request(Fy_Cs(Fy_x)),这个服务器就会解码的。

程序怎样改善呢?只需可以失掉客户端提交的数据是解码后的就能够了,把失掉name的语句改成ForEachSubmitNameInRequest.QueryString就能够了。</p>由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。
作者: 灵魂腐蚀    时间: 2015-1-20 11:39
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
作者: 不帅    时间: 2015-1-24 12:43
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
作者: 小女巫    时间: 2015-1-24 20:58
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
作者: 第二个灵魂    时间: 2015-2-2 13:03
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
作者: 再见西城    时间: 2015-2-23 09:52
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
作者: 蒙在股里    时间: 2015-3-7 07:02
以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。
作者: 小妖女    时间: 2015-3-14 14:17
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
作者: 乐观    时间: 2015-3-21 09:37
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2