仓酷云

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

[学习教程] ASP网页编程之SQL注进天书之ASP注进毛病全打仗(1)

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

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

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

x
SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。引言

  跟着B/S形式使用开辟的开展,利用这类形式编写使用程序的程序员也愈来愈多。可是因为这个行业的进门门坎不高,程序员的程度及履历也乱七八糟,相称年夜一部分程序员在编写代码的时分,没有对用户输出数据的正当性举行判别,使使用程序存在平安隐患。用户能够提交一段数据库查询代码,依据程序前往的了局,取得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注进。

  SQL注进是从一般的WWW端口会见,并且外表看起来跟一样平常的Web页面会见没甚么区分,以是今朝市情的防火墙都不会对SQL注进收回警报,假如办理员没检察IIS日记的习气,大概被进侵很长工夫都不会觉察。

  可是,SQL注进的伎俩相称天真,在注进的时分会碰着良多不测的情形。能不克不及依据详细情形举行剖析,机关奇妙的SQL语句,从而乐成猎取想要的数据,是妙手与“菜鸟”的基本区分。

  依据国情,国际的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不敷10%。在本文,我们从分进门、进阶至初级解说一下ASP注进的办法及技能,PHP注进的文章由NB同盟的另外一位伴侣zwell撰写,但愿对平安事情者和程序员都有效处。懂得ASP注进的伴侣也请不要跳过进门篇,由于部分人对注进的基础判别办法还存在误区。人人筹办好了吗?LetsGo...

  进门篇

  假如你之前没试过SQL注进的话,那末第一步先把IE菜单=>工具=>Internet选项=>初级=>显现友爱HTTP毛病信息后面的勾往失落。不然,不管服务器前往甚么毛病,IE都只显现为HTTP500服务器毛病,不克不及取得更多的提醒信息。

  第一节、SQL注进道理

  以下我们从一个网站www.mytest.com入手下手(注:本文宣布前已征得该站站长批准,年夜部分都是实在数据)。

  在网站首页上,着名为“IE不克不及翻开新窗口的多种办理办法”的链接,地点为:http://www.mytest.com/showdetail.asp?id=49,我们在这个地点前面加上单引号’,服务器会前往上面的毛病提醒:

MicrosoftJETDatabaseEngine毛病80040e14

  字符串的语法毛病在查询表达式ID=49中。

/showdetail.asp,行8

  从这个毛病提醒我们能看出上面几点:

  1.网站利用的是Access数据库,经由过程JET引擎毗连数据库,而不是经由过程ODBC。

  2.程序没有判别客户端提交的数据是不是切合程序请求。

  3.该SQL语句所查询的表中有一位为ID的字段。

  从下面的例子我们能够晓得,SQL注进的道理,就是从客户端提交特别的代码,从而搜集程序及服务器的信息,从而猎取你想到失掉的材料。

  第二节、判别可否举行SQL注进

  看完第一节,有一些人会以为:我也是常常如许测试可否注进的,这不是很复杂吗?

  实在,这并非最好的办法,为何呢?

  起首,纷歧定每台服务器的IIS都前往详细毛病提醒给客户端,假如程序中加了cint(参数)之类语句的话,SQL注进是不会乐成的,但服务器一样会报错,详细提醒信息为处置URL时服务器上堕落。请和体系办理员联系。

  其次,部分对SQL注进有一点懂得的程序员,以为只需把单引号过滤失落就平安了,这类情形不为多数,假如你用单引号测试,是测不到注进点的

  那末,甚么样的测试办法才是对照正确呢?谜底以下:

  ①http://www.mytest.com/showdetail.asp?id=49

  ②http://www.mytest.com/showdetail.asp?id=49;and1=1

  ③http://www.mytest.com/showdetail.asp?id=49;and1=2

  这就是典范的1=1、1=2测试法了,怎样判别呢?看看下面三个网址前往的了局就晓得了:

  能够注进的体现:

  ①一般显现(这是一定的,否则就是程序有毛病了)

  ②一般显现,内容基础与①不异

  ③提醒BOF或EOF(程序没做任何判别时)、或提醒找不到纪录(判别了rs.eof时)、或显现内容为空(程序加了onerrorresumenext)

  不成以注进就对照简单判别了,①一样一般显现,②和③一样平常城市有程序界说的毛病提醒,或提醒范例转换时堕落。

  固然,这只是传进参数是数字型的时分用的判别办法,实践使用的时分会有字符型和搜刮型参数,我将在中级篇的“SQL注进一样平常步骤”再做剖析。

  第三节、判别数据库范例及注进办法

  分歧的数据库的函数、注进办法都是有差别的,以是在注进之前,我们还要判别一下数据库的范例。一样平常ASP最常搭配的数据库是Access和SQLServer,网上凌驾99%的网站都是个中之一。

  怎样让程序告知你它利用的甚么数据库呢?来看看:

  SQLServer有一些体系变量,假如服务器IIS提醒没封闭,而且SQLServer前往毛病提醒的话,那能够间接从堕落信息猎取,办法以下:

  http://www.mytest.com/showdetail.asp?id=49;anduser>0

  这句语句很复杂,但却包括了SQLServer特有注进办法的精华,我本人也是在一次偶然的测试中发明这类效力极高的猜解办法。让我看来看看它的寄义:起首,后面的语句是一般的,重点在anduser>0,我们晓得,user是SQLServer的一个内置变量,它的值是以后毗连的用户名,范例为nvarchar。拿一个nvarchar的值跟int的数0对照,体系会先试图将nvarchar的值转成int型,固然,转的过程当中一定会堕落,SQLServer的堕落提醒是:将nvarchar值”abc”转换数据范例为int的列时产生语法毛病,呵呵,abc恰是变量user的值,如许,不废吹灰之力就拿到了数据库的用户名。在今后的篇幅里,人人会看到良多用这类办法的语句。

  特地说几句,尽人皆知,SQLServer的用户sa是个同等Adminstrators权限的脚色,拿到了sa权限,几近一定能够拿到主机的Administrator了。下面的办法能够很便利的测试出是不是是用sa登录,要注重的是:假如是sa登录,提醒是将”dbo”转换成int的列产生毛病,而不是”sa”。

  假如服务器IIS不同意前往毛病提醒,那怎样判别数据库范例呢?我们能够从Access和SQLServer和区分动手,Access和SQLServer都有本人的体系表,好比寄存数据库中一切工具的表,Access是在体系表[msysobjects]中,但在Web情况下读该表会提醒“没有权限”,SQLServer是在表[sysobjects]中,在Web情况下可一般读取。

  在确承认以注进的情形下,利用上面的语句:

http://www.mytest.com/showdetail.asp?id=49;and(selectcount(*)fromsysobjects)>0

http://www.mytest.com/showdetail.asp?id=49;and(selectcount(*)frommsysobjects)>0

  假如数据库是SQLServer,那末第一个网址的页面与原页面http://www.mytest.com/showdetail.asp?id=49是大抵不异的;而第二个网址,因为找不到表msysobjects,会提醒堕落,就算程序有容错处置,页面也与原页面完整分歧。

  假如数据库用的是Access,那末情形就有所分歧,第一个网址的页面与原页面完整分歧;第二个网址,则视乎数据库设置是不是同意读该体系表,一样平常来讲是不同意的,以是与原网址也是完整分歧。年夜多半情形下,用第一个网址就能够得知体系所用的数据库范例,第二个网址只作为开启IIS毛病提醒时的考证。
</p>问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.
只想知道 该用户已被删除
沙发
发表于 2015-1-17 17:57:54 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-21 05:41:08 来自手机 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
蒙在股里 该用户已被删除
地板
发表于 2015-1-25 15:24:38 | 只看该作者
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
若相依 该用户已被删除
5#
发表于 2015-1-25 20:16:47 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
因胸联盟 该用户已被删除
6#
发表于 2015-2-1 10:38:03 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
深爱那片海 该用户已被删除
7#
发表于 2015-2-1 17:33:19 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
8#
发表于 2015-2-1 18:15:55 来自手机 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
谁可相欹 该用户已被删除
9#
发表于 2015-2-2 06:40:19 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
爱飞 该用户已被删除
10#
发表于 2015-2-7 16:51:45 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
金色的骷髅 该用户已被删除
11#
发表于 2015-2-22 16:16:05 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
精灵巫婆 该用户已被删除
12#
发表于 2015-3-7 00:51:48 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
活着的死人 该用户已被删除
13#
发表于 2015-3-13 23:09:38 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
冷月葬花魂 该用户已被删除
14#
发表于 2015-3-20 21:38:07 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 17:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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