分类:未分类
订阅当前日志(RSS 2.0) 订阅当前日志(Atom 1.0)
  1. 一、获取要生成的html文件的内容
    二、将获取的html文件内容保存为html文件

    我在这里主要说明的只是第一步:如何获取要生成的html文件的内容:

    目前常用获取html文件的内容的方法有几下几种:

    1、这种方法与是在脚本内写要生成的html内容,不太方便预览生成页面的内容,无法可视化布局页面,更改html模板时会更加复杂。用这种方法的人很多,但我感觉这种方法是最不方便的。

    str="<html标记>内容</html标记>"
    str=str&"<html标记>内容</html标记><html标记>数据库读取内容....</html标记>....."

    2、制作单独的HTML模板页,动态的内容用特定的字符作为标记(如:有人用$title$标记为网页标题),用ADODB.Stream或者Scripting.FileSystemObject将其模板内容载入,然后再用替换方法把原先定好的标记替换为动态内容(如:Replace(载入的模板内容,"$title$",rs("title" ) ) )。

    3、用XMLHTTP或serverXMLHTTP获取动态页所显示的HTML内容:

    我常用的生成html文件的实例:
    ''weburl是要获取的动态页地址
    ''getHTTPPage(weburl)是获取动态页内容的函数
    weburl="http://"&Request.ServerVariables("SERVER_NAME")&"/contact.asp?id="&rs("id")&""‘指定动态页地址
    body=getHTTPPage(weburl)''用函数取到动态页地址的内容

    此方法最大的好处就是不用费力气专门去写静态的模板页面,只是将原来就有的动态页面转换为HTML静态页面,但生成速度不是太快。

    我常用的生成HTML的方法就是第3种:用XMLHTTP获取动态页生成的HTML内容,再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。

    第二步是生成文件的方法:

    ASP里常用的有用ADODB.Stream生成文件和Scripting.FileSystemObject生成文件两种:

    1、Scripting.FileSystemObject生成文件方法:
    Set fso = CreateObject("Scripting.FileSystemObject")
    File=Server.MapPath("要生成文件路径和文件名.htm")
    Set txt=fso.OpenTextFile(File,8,True)
    data1="文件内容"用WriteLine方法生成文件
    txt.WriteLine data1
    data2="文件内容"''用Write方法生成文件
    txt.Write data2
    txt.Close
    txt.fso

    2、ADODB.Stream生成文件方法:

     


    Dim objAdoStream
    set objAdoStream = Server.createObject("ADODB.Stream")
    objAdoStream.Type = 1
    objAdoStream.Open()
    objAdoStream.Write("文件内容")
    objAdoStream.SaveToFile 要生成文件路径和文件名.htm,2
    objAdoStream.Close()

     

    采集原理:

    采集程序的主要步骤如下:

    一、获取被采集的页面的内容
    二、从获取代码中提取所有用的数据

    一、获取被采集的页面的内容

    我目前所掌握的ASP常用获取被采集的页面的内容方法:

    1、用serverXMLHTTP组件获取数据

    Function GetBody(weburl)

    ''创建对象
    Dim ObjXMLHTTP
    Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
    ''请求文件,以异步形式
    ObjXMLHTTP.Open "GET",weburl,False
    ObjXMLHTTP.send
    While ObjXMLHTTP.readyState <> 4
    ObjXMLHTTP.waitForResponse 1000
    Wend
    ''得到结果
    GetBody=ObjXMLHTTP.responseBody
    ''释放对象
    Set ObjXMLHTTP=Nothing
    End Function

    调用方法:GetBody(文件的URLf地址)

    2、或XMLHTTP组件获取数据

    Function GetBody(weburl)

    ''创建对象
    Set Retrieval = CreateObject("Microsoft.XMLHTTP")
    With Retrieval
    .Open "Get", weburl, False, "", ""
    .Send
    GetBody = .ResponseBody
    End With
    ''释放对象
    Set Retrieval = Nothing

    End Function

    调用方法:GetBody(文件的URLf地址)

    这样获取的数据内容还需要进行编码转换才可以使用

    Function BytesToBstr(body,Cset)
    dim objstream
    set objstream = Server.CreateObject("adodb.stream")
    objstream.Type = 1
    objstream.Mode =3
    objstream.Open
    objstream.Write body
    objstream.Position = 0
    objstream.Type = 2
    objstream.Charset = Cset
    BytesToBstr = objstream.ReadText
    objstream.Close
    set objstream = nothing

    End Function

    调用方法:BytesToBstr(要转换的数据,编码)''编码常用为GB2312和UTF-8。

    二、从获取代码中提取所有用的数据

    1、用ASP内置的MID函数截取需要的数据

    Function body(wstr,start,over)

    start=Newstring(wstr,start)
    ''设置需要处理的数据的唯一的开始标记
    over=Newstring(wstr,over)
    ''和start相对应的就是需要处理的数据的唯一的结束标记
    body=mid(wstr,start,over-start)
    ''设置显示页面的范围

    End Function

    调用方法:body(被采集的页面的内容,开始标记,结束标记)

    2、用正则获取需要的数据

    Function body(wstr,start,over)

    Set xiaoqi = New Regexp''设置配置对象
    xiaoqi.IgnoreCase = True''忽略大小写
    xiaoqi.Global = True''设置为全文搜索
    xiaoqi.Pattern = "”&start&“.+?”&over&“"''正则表达式
    Set Matches =xiaoqi.Execute(wstr)''开始执行配置
    set xiaoqi=nothing
    body=""
    For Each Match in Matches
    body=body&Match.Value ''循环匹配
    Next
    ''
    End Function

    调用方法:body(被采集的页面的内容,开始标记,结束标记)

    采集程序祥细思路:

    1、取得网站的分页列表页的每页地址
    目前绝大部分动态网站的分页地址都有规则,如:
    动态页
    第一页:index.asp?page=1
    第二页:index.asp?page=2
    第三页:index.asp?page=3
    .....

    静态页
    第一页:page_1.htm
    第二页:page_2.htm
    第三页:page_3.htm
    .....

    取得网站的分页列表页的每页地址,只需要用变量替代每页地址的变化的字符即可如:page_<%="&page&"%>.htm

    2、获取被采集网站的分页列表页内容

    3、从分页列表代码中提取[color=Blue]被采集的内容页面的URL连接地址[/color]
    绝大部分分页页面里的内容页连接也有固定规则,如:
    <a href="url1">连接1</a> <br>
    <a href="url2">连接2</a> <br>
    <a href="url3">连接3</a> <br>

    用以下代码就可以获得一个URL连接集合
    Set xiaoqi = New Regexp
    xiaoqi.IgnoreCase = True
    xiaoqi.Global = True
    xiaoqi.Pattern = ””“.+?”““
    Set Matches =xiaoqi.Execute(页面列表内容)
    set xiaoqi=nothing
    url=""
    For Each Match in Matches
    url=url&Match.Value
    Next

    4、取得被采集的内容页面内容,根据”提取标记“从被采集的内容页面分别截取要取得的数据。

    因为是动态生成的页面,大多数内容页面内都有相同的html标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。如:

    每个页面都有网页标题<title>网页标题</title>,用我上面写的MID截取函数就可以获得<title></title>之间的值,也可以用正则表达式来获得。
    例:body("<title>网页标题</title>","<title>","</title>")

    目前防采集的方法有很多种,先介绍一下常见防采集策略方法和它的弊端及采集对策:

    一、判断一个IP在一定时间内对本站页面的访问次数,如果明显超过了正常人浏览速度,就拒绝此IP访问

    弊端:
    1、此方法只适用于动态页面,如:asp\jsp\php等...静态页面无法判断某个IP一定时间访问本站页面的次数。
    2、此方法会严重影响搜索引擎蜘蛛对其收录,因为搜索引擎蜘蛛收录时,浏览速度都会比较快而且是多线程。此方法也会拒绝搜索引擎蜘蛛收录站内文件
    采集对策:只能放慢采集速度,或者不采
    建议:做个搜索引擎蜘蛛的IP库,只允许搜索引擎蜘蛛快速浏览站内内容。搜索引擎蜘蛛的IP库的收集,也不太容易,一个搜索引擎蜘蛛,也不一定只有一个固定的IP地址。
    评论:此方法对防采集比较有效,但却会影响搜索引擎对其收录。

    二、用javascript加密内容页面

    弊端:此方法适用于静态页面,但会严重影响搜索引擎对其收录情况,搜索引擎收到到的内容,也都是加密后的内容
    采集对策:建议不采,如非要采,就把解密码的JS脚本也采下来。
    建议:目前没有好的改良建议
    评论:建议指望搜索引擎带流量的站长不要使用此方法。

    三、把内容页面里的特定标记替换为[color=Red]”特定标记+隐藏版权文字“[/color]

    弊端:此方法弊端不大,仅仅会增加一点点的页面文件大小,但容易反采集
    采集对策:把采集来的含有隐藏版权文字内容的版权文字替掉,或替换成自己的版权。
    建议:目前没有好的改良建议
    评论:自己感觉实用价值不大,就算是加上随机的隐藏文字,也等于画蛇添足。

    四、只允许用户登陆后才可以浏览

    弊端:此方法会严重影响搜索引擎蜘蛛对其收录
    采集对策:目前落伍已经有人发了对策文章 ,具体对策就看这个吧《ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送》
    建议:目前没有好的改良建议
    评论:建议指望搜索引擎带流量的站长不要使用此方法。不过此方法防一般的采集程序,还是有点效果的。

    五、用javascript、vbscript脚本做分页

    弊端:影响搜索引擎对其收录
    采集对策:分析javascript、vbscript脚本,找出其分页规则,自己做个对应此站的分页集合页即可。
    建议:目前没有好的改良建议
    评论:感觉懂点脚本语言的人都能找出其分页规则

    六、只允许通过本站页面连接查看,如:Request.ServerVariables("HTTP_REFERER")

    弊端:影响搜索引擎对其收录
    采集对策:不知道能不能模拟网页来源。。。。目前我没有对应此方法的采集对策
    建议:目前没有好的改良建议
    评论:建议指望搜索引擎带流量的站长不要使用此方法。不过此方法防一般的采集程序,还是有点效果的。

    从以上可以看出,目前常用的防采集方法,要么会对搜索引擎收录有较大影响,要么防采集效果不好,起不到防采集的效果。那么,还有没有一种有效防采集,而又不影响搜索引擎收录的方法呢?那就请继续往下看吧!

    从前面的我讲的采集原理大家可以看出,绝大多数采集程序都是靠分析规则来进行采集的,如分析分页文件名规则、分析页面代码规则。

    一、分页文件名规则防采集对策

    大部分采集器都是靠分析分页文件名规则,进行批量、多页采集的。如果别人找不出你的分页文件的文件名规则,那么别人就无法对你的网站进行批量多页采集。

    实现方法:

    我认为用MD5加密分页文件名是一个比较好的方法,说到这里,有人会说,你用MD5加密分页文件名,别人根据此规则也可以模拟你的加密规则得到你的分页文件名。

    我要指出的是我们加密分页文件名时,不要只加密文件名变化的部分

    如果I代表分页的页码,那么我们不要这样加密:page_name=Md5(I,16)&".htm"

    最好给要加密的页码上再跟进一个或多个字符,如:page_name=Md5(I&"任意一个或几个字母",16)&".htm"

    因为MD5是无法反解密的,别人看到的会页字母是MD5加密后的结果,所以加人也无法知道你在 I 后面跟进的字母是什么,除非他用暴力****MD5,不过不太现实。

    二、页面代码规则防采集对策

    如果说我们的内容页面无代码规则,那么别人就无法从你的代码中提取他们所需要的一条条内容。所以我们要的这一步做到防采集,就要使代码无规则。

    实现方法:

    使对方需要提取的标记随机化

    1、定制多个网页模板,每个网页模板里的重要HTML标记不同,呈现页面内容时,随机选取网页模板,有的页面用CSS+DIV布局,有的页面用table布局,此方法是麻烦了点,一个内容页面,要多做几个模板页面,不过防采集本身就是一件很烦琐的事情,多做一个模板,能起到防采集的作用,对很多人来说,都是值得的。
    2、如果嫌上面的方法太麻烦,把网页里的重要HTML标记随机化,也可以。

    做的网页模板越多,html代码越是随机化,对方分析起内容代码时,就越麻烦,对方针对你的网站专门写采集策略时,难度就更大,在这个时候,绝大部分人,都会知难而退,因为这此人就是因为懒,才会采集别人网站数据嘛~~~再说一下,目前大部分人都是拿别人开发的采集程序去采集数据,自己开发采集程序去采集数据的人毕竟是少数。

    还有些简单的思路提供给大家:

    1、把对数据采集者重要,而对搜索引擎不重要的内容用客户端脚本显示
    2、把一页数据,分为N个页面显示,也是加大采集难度的方法
    3、用更深层的连接,因为目前大部分采集程序只能采集到网站内容的前3层,如果内容所在的连接层更深,也可以避免被采集。不过这样可能会给客户造成浏览上的不便。如:

    大多网站都是 首页----内容索引分页----内容页
    如果改成:
    首页----内容索引分页----内容页入口----内容页
    注:内容页入口最好能加上自动转入内容页的代码

    <meta http-equiv="refresh" content="6;url=内容页(http://www.xiaoqi.net)">

    其实,只要做好防采集的第一步(加密分页文件名规则),防采集的效果就已经不错了,还是建议两条反采集方法同时使用,给采集者增加采集难度,使得他们知难页退。

    Posted @2007-11-07 guanliyuan 阅读(1) 评论(0) 分类:未分类
  2. 2、实现软RAID 

      ①在“磁盘管理”中,右击要设置软RAID的硬盘,并在快捷菜单中选择“创建卷”选项,将显示“创建卷向导”窗口。 

      ②单击“下一步”按钮,将显示“选择卷类型”页面,在这里选择要创建的卷类型。通常情况下,为了保障数据的安全,应当选择采用RAID-1或RAID-5卷。 

      ③单击“下一步”按钮,将显示“选择磁盘”页面。在左侧“所有可用的动态磁盘”列表框中选择要添加的磁盘,并单击“添加”按钮,即可将其添加至该RAID-5卷,并显示在“选定的动态磁盘”列表框中。 

      ④动态磁盘添加安毕后,单击“下一步”按钮,将显示“指派驱动器号和路径”页面。选中“指派驱动器号”选项,并为该RAID-5卷指派驱动器号,以便于管理和访问。 

      ⑤单击“下一步”按钮,显示“卷区格式化”页面。选择“按下面提供的信息格式化这个卷”选项,并采用默认的NTFS文件系统和分配单位大小。可以为该RAID-5卷指定一个卷标,以用于与其他卷相区别。 

      ⑥单击“下一步”按钮,将显示“完成创建卷向导”页面,此时卷的创建完成。 

      ⑦单击“完成”按钮,系统将自动格式化新创建的卷。至此,RAID-5卷已创建完成。 

    四、RAID卷的管理 

      1、添加镜像卷 

      对于已有的动态磁盘,可以简单地通过添加镜像卷的方式来提高数据的安全性。 

      在“磁盘管理”中,右击要添加镜像磁盘的动态磁盘,并在快捷菜单中选择“添加镜像”选项,此时将显示“添加镜像”对话框。在磁盘列表中选择要设置为镜像的动态磁盘,然后单击“添加镜像”按钮,至此镜像添加完成,需要注意的是,添加为镜像的磁盘空间必须大于或等于现存卷。 

       2、测试镜像系统或启动卷 

      关闭计算机,然后断开或关闭某个磁盘以模拟磁盘故障,使用剩余镜像来重新启动计算机。验证 Windows 可正确启动后,请关闭计算机然后重新连接磁盘,重新启动计算机。启动菜单出现时,选择仍保持连接状态的磁盘上的镜像。打开计算机管理(本地),在控制台树中单击"磁盘管理",右键单击具有任一标有"失败的重复"的卷的磁盘,然后单击"重新激活磁盘。 
       3、重新激活 RAID-5 磁盘 

      如果 I/O 错误是暂时的,则可以尝试重新激活磁盘;打开计算机管理(本地),在控制台树中单击"磁盘管理"。右键单击局部出现故障的磁盘,然后单击"重新激活磁盘",RAID-5 卷的状态应变为"正在重新生成",然后变为"良好"。 

      4、软RAID的恢复 

      磁盘冗余的目的就在于当磁盘出现故障时,系统能够保存数据的完整性。虽然在RAID-1和RAID-5中某个磁盘成员的失败不会导致丢失数据,其他成员仍然可以继续运转,但是如果失败不能得到及时恢复,那么磁盘卷将不再拥有冗余的特性。因此,必须及时恢复失败的RAID-1和RAID-5。 

       1)修复镜像卷和RAID-5卷 

      在“磁盘管理”中,失败卷的状态将显示为“失败的冗余”,磁盘之一将显示为“脱机”、“丢失”或“联机(错误)”。可以通过下述操作来恢复镜像卷: 

      ①确保该磁盘已连接到了计算机,并且已经加电。 

      ②在“磁盘管理”中,右击标识为“脱机”、“丢失”或“联机(错误)”的磁盘,然后在快捷菜单中单击“重新激活磁盘”选项。此时该磁盘的状态应当回到“良好”,同时镜像卷应该自动重新生成。 

      如果磁盘被严重破坏或者不可能修复,在弹出的快捷菜单中将只能看到“删除”命令,此时Windows 2003将无法再修复该镜像卷。另外,如果磁盘连续显示“联机(错误)”,则有可能表明该磁盘很快就要发生故障了,应当尽可能快地替换该磁盘。 

       2)替换磁盘和创建新的镜像卷 

      如果经修复仍未能重新激活镜像磁盘,或者镜像卷的状态没有恢复到“良好”状态,就必须替换失败磁盘,并创建新的镜像卷。 

      ①在失败的卷上右击鼠标,并选择“删除镜像”选项,将显示“删除镜像”对话框。 

      ②从磁盘列表中选择丢失的磁盘,然后单击“删除镜像”按钮,将显示“磁盘管理”警告框,以提示用户确认。 

      ③单击“是”按钮,将删除该镜像卷。然后右击该丢失的磁盘,并在弹出的快捷菜单中选择“删除磁盘”选项,将该磁盘删除。 

      ④更换新的磁盘,并将磁盘设置为动态磁盘。 

      ⑤创建新的镜像卷。新镜像卷的创建过程请参见前述“添加镜像卷”。 

       3)替换磁盘和重新生成RAID-5卷 

      ①更换故障磁盘,并将它设置为动态磁盘。 

      ②在“磁盘管理”中,右击失败磁盘的RAID-5卷,在弹出的快捷菜单中选择“恢复卷”选项,将显示“修复RAID-5卷”对话框。 

      ③选择要在RAID-5卷中替换失败磁盘的磁盘,并单击“确定”按钮。此时RAID-5卷开始自动修复。 

      ④右击失败的磁盘,并在弹出的快捷菜单中选择“删除磁盘”选项,并从系统中删除该磁盘。

    Posted @2007-11-02 guanliyuan 阅读(0) 评论(0) 分类:未分类
  3. 用Windows 2003实现软RAID,硬件RAID解决方案速度快、稳定性好,可以有效地提供高水平的硬盘可用性和冗余度,但是居高不下的价格实在令人可畏。
    一、概述 

      大家知道,硬件RAID解决方案速度快、稳定性好,可以有效地提供高水平的硬盘可用性和冗余度,但是居高不下的价格实在令人可畏。 不过可庆幸的是,Windows 2003提供了内嵌的软件RAID功能,并且软RAID可以实现RAID-0、RAID-1、RAID-5。软RAID不仅实现上非常方便,而且还大量地节约了宝贵的资金,确实是Windows 2003 Server的一个很实用的新功能。RAID-5 卷是数据和奇偶校验间断分布在三个或更多物理磁盘的容错卷。 

      如果物理磁盘的某一部分失败,我们可以用余下的数据和奇偶校验重新创建磁盘上失败的那一部分上的数据。对于多数活动由读取数据构成的计算机环境中的数据冗余来说,RAID-5 卷是一种很好的解决方案。可使用基于硬件或基于软件的解决方案来创建 RAID-5 卷。通过基于硬件的 RAID,智能磁盘控制器处理组成 RAID-5 卷的磁盘上的冗余信息的创建和重新生成。

      Windows Server 2003 家族操作系统提供基于软件的 RAID,其中 RAID-5 卷中的磁盘上的信息的创建和重新生成将由“磁盘管理”来处理,两种情况下数据都将跨磁盘阵列中的所有成员进行存储。当然,软RAID的性能和效率是不能与硬RAID相提并论的。下面我们首先从动态磁盘的创建谈起,然后说明在Windows 2003 Server 实现如何实现软RAID,最后讲一下软RAID的管理。 

    二、创建动态磁盘 

       在安装Windows 2003 Server时,硬盘将自动初始化为基本磁盘。我们不能在基本磁盘分区中创建新卷集、条带集或者RAID-5组,而只能在动态磁盘上创建类似的磁盘配置。也就是说,如果想创建RAID-0、RAID-1或RAID-5卷,就必须使用动态磁盘。在Windows 2003 Server安装完成后,可使用升级向导将它们转换为动态磁盘。 

      在将一个磁盘从基本磁盘转换为动态磁盘后,磁盘上包含的将是卷,而不再是磁盘分区。其中的每个卷是硬盘驱动器上的一个逻辑部分,还可以为每个卷指定一个驱动器字母或者挂接点。但是要注意的是只能在动态磁盘上创建卷。动态磁盘有以下几个优于基本磁盘的特点: 

      卷可以扩展到包含非邻接的空间,这些空间可以在任何可用的磁盘上。 
      对每个磁盘上可以创建的卷的数目没有任何限制。 
      Windows 2003将动态磁盘配置信息存储在磁盘上,而不是存储在注册表中或者其他位置。同时,这些信息不能被准确地更新。Windows 2003将这些磁盘配置信息复制到所有其他动态磁盘中。因此,单个磁盘的损坏将不会影响到访问其他磁盘上的数据。 

      一个硬盘既可以是基本的磁盘,也可以是动态的磁盘,但不能二者兼是,因为在同一磁盘上不能组合多种存储类型。但是,如果计算机有多个硬盘,就可以将各个硬盘分别配置为基本的或动态的。 


       1、从基本磁盘升级到动态磁盘: 
      ①依次单击“开始”->“所有程序”->“管理工具”->“计算机管理”选项,显示“计算机管理”窗口。 

      ②在左侧控制台中依次展开“存储”->“磁盘管理”选项,以显示计算机中安装的所有磁盘。 

      ③右击要设置为动态磁盘的硬盘,并在弹出的快捷菜单中选择“升级到动态磁盘”选项,将显示“升级到动态磁盘”对话框。 

      ④选中要升级的磁盘,然后单击“确定”:按钮,将显示“要升级的磁盘”对话框,在这里要求用户对要升级为动态磁盘的硬盘进行确认。这样做的原因很简单,因为这一升级操作是不可逆的。也就是说,基本磁盘可以升级为动态磁盘,但动态磁盘却不能恢复为基本磁盘。 

       ⑤单击“升级”按钮,将显示“磁盘管理”提示框,系统再次要求用户对磁盘升级予以确认。当将该磁盘升级为动态磁盘后,Windows98/Me等操作系统将不能再从该磁盘引导启动。 

      ⑥单击“是”按钮,将显示“升级磁盘”警告框。在这里提示要升级磁盘上的文件系统将被强制卸下,并要求用户对该操作进一步予以确认。 

       ⑦单击“是”按钮,系统将开始磁盘的升级过程。当升级完成后,将显示 “确认”警告框,单击“确定”按钮将重新启动计算机,以完成磁盘的升级过程。 

       在升级到动态磁盘时,应该注意以下几个方面的问题: 

       必须以管理员或管理组成员的身份登录才能完成该过程。如果计算机与网络连接,则网络策略设置也可能阻止我们完成此步骤。 
       将基本磁盘升级到动态磁盘后,就再也不能将动态卷改回到基本分区。这时惟一的方法就是,必须删除磁盘上的所有动态卷,然后使用“还原为基本磁盘”命令。 
       在升级磁盘之前,应该关闭在那些磁盘上运行的程序。 
       为保证升级成功,任何要升级的磁盘都必须至少包含1MB的未分配空间。在磁盘上创建分区或卷时,“磁盘管理”工具将自动保留这个空间,但是带有其他操作系统创建的分区或卷的磁盘上可能就没有这个空间。 
       扇区大小超过512字节的磁盘,不能从基本磁盘升级为动态磁盘。 
       一旦升级完成,动态磁盘就不能包含分区或逻辑驱动器,也不能被非Windows 2003的其他操作系统所访问。 

       2、将新磁盘设置为动态磁盘 

      ①计算机安装新硬盘后,当第一次访问“计算机管理”中的“磁盘管理”工具时,将自动运行“写入签名和升级磁盘向导”窗口。 

      ②单击“下一步”按钮,将显示“选择要写入签名的磁盘”页面,在该列表中选择要写入签名的磁盘。需要注意的是,磁盘在安装到系统前必须进行签名。 

      ③单击“下一步”按钮,将显示“选择要升级的磁盘”页面,选择要升级为动态磁盘的磁盘。 

      ④单击“下一步”按钮,将显示“完成写入签名和升级磁盘向导”页面,在这里要求确认签名并升级的磁盘。如果有任何不妥,可单击“上一步”按钮返回并重新进行设置。 

      ⑤单击“完成”按钮,动态磁盘升级过程完成。 


    三、实现软RAID 

       软RAID也必须在多磁盘系统中才能实现。实现RAID-1最少要拥有两块硬盘,而实现RAID-5则最少要拥有三块硬盘。通常情况下,操作系统所在磁盘采用RAID-1,而数据所在磁盘采用RAID-5。 

       1、卷的类型 
      ①简单卷 

      简单卷由单个物理磁盘上的磁盘空间组成,它可以由磁盘上的单个区域或链接在一起的相同磁盘上的多个区域组成。可以在同一磁盘中扩展简单卷或把简单卷扩展到其他磁盘。如果跨多个磁盘扩展简单卷,则该卷就是跨区卷。 

      只能在动态磁盘上创建简单卷。简单卷不能包含分区或逻辑驱动器,也不能由MS-DOS 或Windows 2003以外的其他Windows操作系统访问。如果网络中的计算机还在运行Windows98或更早版本,那么应该创建分区而不是动态卷。 

      如果想在创建简单卷后增加它的容量,则可通过磁盘上剩余的未分配空间来扩展这个卷。要扩展一个简单卷,则该卷必须使用Windows 2003中所用的NTFS版本格式化。同时不能扩展基本磁盘上作为以前分区的简单卷。也可将简单卷扩展到同一计算机的其他磁盘的区域中。当将简单卷扩展到一个或多个其他磁盘时,它会变成为一个跨区卷。在扩展跨区卷之后,不删除整个跨区卷便不能将它的任何部分删除。要注意的是跨区卷不能是镜像卷或带区卷。 

      ②条带卷 

      利用条带卷,可以将两个或者更多磁盘(最多为32块硬盘)的空余空间组成为一个卷。在向条带卷中写入数据时,数据被分割为64KB的块,并均衡地分布在阵列中的所有磁盘上。一个阵列是两个或者多个磁盘的集合。条带卷可以有效地提高磁盘的读取性能,但是它并不提供容错功能,任何一块硬盘的损坏都会导致全部数据的丢失。条带卷类似于RAID-0。 

      ③跨越卷 

      利用跨越卷,也可以将来自两个或者更多磁盘(最多为32块硬盘)的空余磁盘空间组成为一个卷。与条带卷所不同的是,将数据写入跨越卷时,首先填满第一个磁盘上的空余部分,然后再将数据写入下一个磁盘,依次类推。虽然利用跨越卷可以快速增加卷的空量,但是跨越卷既不能提高对磁盘数据的读取性能,也不提供任何容错功能。当跨越卷中的某个磁盘出现故障时,存储在该磁盘上的所有数据将全部丢失。 

      ④镜像卷 

      利用镜像卷即RAID-1卷,可以将用户的相同数据同时复制到两个物理磁盘中。如果其中的一个物理磁盘出现故障,虽然该磁盘上的数据将无法使用,但系统能够继续使用尚未损坏而仍继续正常运转的磁盘进行数据的读写操作,从而通过另一磁盘上保留完全冗余的副本,保护磁盘上的数据免受介质故障的影响。由此可见,镜像卷的磁盘空间利用率只有50%(即每组数据有两个成员),所以镜像卷的成本相对较高。要创建一个镜像卷,必须使用另一磁盘上的可用空间。动态磁盘中现有的任何卷(甚至是系统卷和引导卷),都可以使用相同的或不同的控制器镜像到其他磁盘上大小相同或更大的另一个卷。最好使用大小、型号和制造厂家都相同的磁盘作镜像卷,以避免可能产生的兼容性错误。 

      镜像卷可以大大地增强读性能,因为容错驱动程序同时从两个磁盘成员中同时读取数据,所以读取数据的速度会有所增加。当然,由于容错驱动程序必须同时向两个成员写数据,所以它的写性能会略有降低。镜像卷可包含任何分区(包括启动分区或系统分区),但是镜像卷中的两个硬盘都必须是Windows 2003动态磁盘。 
       ⑤RAID-5卷 

      在RAID-5卷中,Windows 2003通过给该卷的每个硬盘分区中添加奇偶校验信息带区来实现容错。如果某个硬盘出现故障,Windows 2003便可以用其余硬盘上的数据和奇偶校验信息重建发生故障的硬盘上的数据。 

      由于要计算奇偶校验信息,所以RAID-5卷上的写操作要比镜像卷上的写操作慢一些。但是,RAID-5卷比镜像卷提供更好的读性能。其中的原因很简单,Windows 2003可以从多个磁盘上同时读取数据。与镜像卷相比RAID-5卷的性价比较高,而且RAID-5卷中的硬盘数量越多,冗余数据带区的成本越低。但是RAID-5卷也有一些限制。第一,RAID-5卷至少需要3个硬盘才能实现,但最多也不能超过32个硬盘;第二,RAID-5卷不能包含根分区或系统分区;RAID-1卷与RAID-5卷的区别如下表1所示: 

    Posted @2007-11-02 guanliyuan 阅读(10) 评论(0) 分类:未分类
  4. 说明:本文中所有程序均在Windows 2000 Server中文版 + SP2上编译运行无误
    开发环境:.Net 框架1.0 Version 1.0.3705
      一、ASP.NET虚拟主机存在的重大隐患
      我曾经在WWW.BRINKSTER.COM申请了一个免费的ASP.NET空间,上传了两个程序,其中一个查看目录和文件的程序证明我的判断:ASP共享空间服务器存在的一个安全问题,在 ASP+ 共享空间服务器中依然存在并且变得更加难以防范!通过这个程序我可以浏览所有用户的ASP+程序,可以查看服务器的系统日志……,当然,如果我想删除什么的话也不会有什么问题。为了让大家更清楚地了解这一问题,我们有必要简单介绍一下ASP中就已经存在的这一问题。
      ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录和文件进行读写、删除、改名等操作。FSO对象来自微软提供的脚本运行库scrrun.dll中。
      使用下面的代码就可以在ASP中创建一个FSO对象:
      Set fso = CreateObject("Scripting.FileSystemObject")
      我们使用fso对象包含的属性和方法,如Drive、Drives、Folder、Floders、File、Files等对服务器的磁盘、目录和文件进行读、写、删除等操作。这一强大的文件系统访问能力给ASP共享空间提供者带来了严重的安全问题,很多ASP空间的管理员都删除此组件或将这个组件改名以避免用户使用这一标准组件。删除组件或组件改名确实是一个简单的方法并且也很有效,但是却使广大用户无法使用它的强大的功能。网络上还有一种看起来很美的方案,它允许用户使用 FileSystemObject 组件又不影响服务器的安全,即对每一个用户都设置一个独立的服务器用户和单个目录的操作权限。但是这种方法是有问题的。因为ASP和ASP.NET中在这方面的问题十分类似,所以我们将在ASP.NET的相应解决办法部分详加说明。

      在ASP.NET中我们发现这一问题仍然存在,并且变得更加难以解决。这是因为.NET中关于系统IO操作的功能变得更加强大,而使这一问题更严重的是ASP.NET所具有的一项新功能,这就组件不需要象ASP那样必须要使用regsvr32来注册了,只需将Dll类库文件上传到bin目录下就可以直接使用了。这一功能确实给开发ASP.NET带来了很大的方便,但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了,防范此问题就变得更加复杂。在讨论解决方案之前,我们先来看一下怎么来实现上述的危险的功能。

      二、文件系统操作示例
      在我们编写代码之前,有必要了解一下我们需要用到的几个主要的类。这几个类都在System.IO名称空间下,System.IO 名称空间包含允许在数据流和文件上进行同步和异步读写的类。
      在整个应用程序的开始部分我们需要了解一下服务器的系统信息,这就需要用到System.Environment类,该类提供有关当前环境和平台的信息以及操作它们的方法。我们通过System.Environment类可以得到系统的当前目录和系统目录,这可以使我们更快的发现几个关键的目录;我们还可以通过获取运行当前进程的用户名来帮助我们了解ASP.NET程序运行所使用的用户,进一步设置用户权限以避免这一安全问题。
      我们还要使用System.IO名称空间的其他几个类是:
      System.IO.Directory:提供用于创建、移动和枚举通过目录和子目录的静态方法的类
      System.IO.File:提供用于创建、复制、删除、移动和打开文件的静态方法的类
      System.IO.FileInfo:提供创建、复制、删除、移动和打开文件的实例方法的类
      System.IO.StreamReader:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。
      每个我们所使用的类的属性和方法的具体用法我们将以代码注释的方式在程序中加以说明。
      System.IO名称空间在 .NET FRAMEWORK提供的mscorlib.dll中,在使用VS.Net编程之前需要将此Dll引用到此项目中。
      我们所编写的程序都使用了Codebehind方式,即每一个aspx程序都有一个对应的aspx.cs程序,aspx程序中只是写与页面显示相关的代码,所有逻辑实现的代码都放在相应的aspx.cs文件中,这样就可以更好得做到显示与逻辑的分离。由于我们的目的不是讨论Codebehind技术,所以就不在对此多加讨论了。
      在这篇文章里,我们只介绍几个主要的类及其关键方法的用法,详细程序请查看附带的源代码。
      程序一:显示服务器的当前信息和全部逻辑驱动器的名称的程序listdrivers.aspx
      主要方法1:我们使用 GetSysInf() 方法来得到服务器的当前环境和平台的信息
    //获取系统信息的方法,此方法在listdrivers.aspx.cs文件中
    public void GetSysInf () {
    //获取操作系统类型
    qDrives = Environment.OSVersion.ToString();
    //获取系统文件夹
    qSystemDir = Environment.SystemDirectory.ToString();
    /*获取映射到进程上下文的物理内存量,通过这一内存映射量可以了解ASP.NET程序在运行时需要多少系统物理内存,有助于更好的规划我们的整个应用,因为物理内存量是以Byte为单位的,所以我们将此数值除以1024,可以得到单位为KB的物理内存量*/
    qMo = (Environment.WorkingSet/1024).ToString();
    //获取当前目录(即该进程从中启动的目录)的完全限定路径
    qCurDir = Environment.CurrentDirectory.ToString();
    //获取主机的网络域名
    qDomName = Environment.UserDomainName.ToString();
    //获取系统启动后经过的毫秒数
    qTick = Environment.TickCount;
    //计算得到系统启动后经过的分钟数
    qTick /= 60000;
    //获取机器名
    qMachine = Environment.MachineName;
    //获取运行当前进程的用户名
    qUser = Environment.UserName;
    /*检索此计算机上格式为"<驱动器号>:\"的逻辑驱动器的名称,返回字符串数组,这是下一步操作的关键所在*/

    achDrives = Directory.GetLogicalDrives();
    //获取此字符串数组的维数,确定有多少个逻辑驱动器
    nNumOfDrives = achDrives.Length;
    }
      系统信息不需要进行操作,我们简单的用asp:Label将他们显示出来就行了。逻辑驱动器的个数在不同的服务器上是不定的,所以用不定长数组保存逻辑驱动器的名称,而且逻辑驱动器的名称也是我们下一步浏览目录和文件的基础,故我们采用了数据网格DataGrid来显示和处理它。
      显示和处理逻辑驱动器名称的DataGrid的代码(代码在listdrivers.aspx文件):
    <asp:DataGrid id="DriversGrid" runat="server" AutoGenerateColumns="false">
    <Columns>
    <asp:BoundColumn HeaderText="ID" DataField="ID" />
    <asp:BoundColumn HeaderText="磁盘名" DataField="Drivers" />
    <asp:HyperLinkColumn
    HeaderText="详细信息"
    DataNavigateUrlField="Drivers" DataNavigateUrlFormatString="listdir.aspx?dir={0}"
    DataTextField="Detail"
    Target="_new" />
    </Columns>
    </asp:DataGrid>
      前两个BoundColumn列都是显示序号和实际逻辑驱动器名称的,需要说明的是第三列,我们在进入各个逻辑驱动器显示目录和文件之前需要将所选择的逻辑驱动器的名称传递到显示目录的文件去,所以需要一个特殊的超级链接行HyperLinkColumn,我们将DataNavigateUrlField设置为数据源中要绑定到 HyperLinkColumn 中的超级链接的 URL 的字段,在此即逻辑驱动器名称。然后将DataNavigateUrlFormatString设置为当 URL 数据绑定到数据源中的字段时,此HyperLinkColumn中的超级链接的 URL 的显示格式,即要链接到的下一级处理页面,在此为listdir.aspx?dir={用户点击行的逻辑驱动器名称}

      创建数据源的代码(代码在listdrivers.aspx.cs文件中):

    //通过此方法返回一个集合形式的数据视图DataView
    ICollection CreateDataSource() {
    //定义内存中的数据表DataTable
    DataTable dt = new DataTable();
    //定义DataTable中的一行数据DataRow
    DataRow dr;
    /*向DataTable中增加一个列,格式:DataColumn("Column", type)
    Column为数据列的名字,type为数据列的数据类型*/
    dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
    dt.Columns.Add(new DataColumn("drivers", typeof(string)));
    dt.Columns.Add(new DataColumn("detail", typeof(string)));
    //使用for循环将逻辑驱动器的名称以行的形式添加到数据表DataTable中
    for (int i = 0; i < nNumOfDrives; i++) {
    //定义新行
    dr = dt.NewRow();
    //对行中每列进行赋值,注意要与上边定义的DataTable的行相对应
    dr[0] = i; //循环生成的序号
    dr[1] = achDrives[i].ToString(); //逻辑驱动器的名称
    dr[2] = "查看详情";
    //向DataTable中添加行
    dt.Rows.Add(dr);
    }
    //根据得到的DataTable生成自定义视图DataView
    DataView dv = new DataView(dt);
    //返回得到的视图DataView
    return dv;
    }
      我们通过这个方法得到了一个包含所有我们需要的数据的数据视图DataView,我们只需要在此aspx页的Page_Load方法中将此数据视图绑定到DataGrid上就可以了。
      数据绑定代码(代码在listdrivers.aspx.cs文件中):
    /* 设置DataGrid的数据源DataSource为我们从CreateDataSource()方法得到的数据视图DataView */
    DriversGrid.DataSource = CreateDataSource();
    //将此DataGrid进行数据绑定
    DriversGrid.DataBind();
      通过上边介绍的几种主要方法我们就实现了获取系统信息和显示所有逻辑驱动器名称的功能,并且可以通过相应的链接进入下一个显示目录和文件名的程序listdir.aspx显示该逻辑驱动器下的所有目录和文件。

    Posted @2007-10-31 guanliyuan 阅读(10) 评论(0) 分类:未分类
  5. [摘要] 本文将为大家介绍在Microsoft Win系列的2003 SERVER IIS6.0中如何简单快速解决ASP.NET中的危险漏洞与隐患对WEB服务器系统的安全威胁之详细防范设置步骤。  五、解决办法操作步骤:
      1、我们将每一个Asp.Net虚拟主机站点都分配一个独立的应用程序池,并赋予不同的权限。下面我就针对此来做一个示例:首先,我们为网站创建两个用户(一个是App_31896.net_User、密码为App_31896.net,一个是IUSR_31896.net_User、密码为IUSR_31896.net)
      2、依次打开"计算机管理器"→"系统管理工具"→"本地用户和组"→"用户",然后新增两个用App_31896.net_User与IUSR_31896.net_User密码分别为:App_31896.net与IUSR_31896.net。选择“用户不能更改密码”与“密码永不过期”,然后分别把App_31896.net_User添加到iis_wpg组,把IUSR_31896.net_User添加到Guests组。将用户赶出其它组成员。
      3、然后,打开IIS管理员器新建相应的应用程序池。依次打开Internet 信息服务→本地计算机→应用程序池→新建→应用程序池,新建一个名字为App_31896.net的应用程序池。
      4、编辑App_31896.net应用程序池的属性→标示→配置→用户名→浏览→把用户名改为我们刚才建立的App_31896.net_Use并输入相应的密码App_31896.net。
      5、然后再建立相应的网站。依次打开Internet 信息服务→本地计算机→网站→新建→31896.net的网站,目录为E:\Vhost\31896.net^_^→编辑31896.net网站的属性→主目录→应用程序池→App_31896.net →目录安全性→身份验证和访问控制→编辑,选择我们刚才建立的IUSR_31896.net_User,并输入相应的密码IUSR_31896.netr→保存并退出。
      6、最后设定IIS的站点目录权限Acls以及整个服务器系统的安全,这里就不再详细讨论,关于服务器的整体系统安全可以参考下本人的Win Server 2003服务器整体安全技术白皮书。(IIS站点权限参考《FSO安全隐患解决办法》与《ASP木马Webshell之安全防范解决办法》这两篇进行;关于IIS的运行权限请参考《IIS 6.0所需要的默认ACLs权限[即NTFS的硬盘权限]》此文进行)
      好了,我们已经简单的介绍了一下ASP.NET中关于文件IO系统的漏洞的防治方法,这一方法虽然有些繁琐,但是却可以从根本上杜绝一些漏洞,这里我们讨论的只是很少的一部分,更多的解决放法需要大家共同来探索、学习。当然如果你发现了更好的办法可别忘了告诉我哟^_^
      笔者后记:这里为大家介绍的仅仅是本人在处理ASP.NET木马、Webshell上的一些心得体会。在下一篇中将为大家介绍如何简简单单的对系统某些相应的服务进行降权处理,以防止溢出、提权等攻击、加强服务器系统的安全。其实服务器、系统的安全是个整体的概念;远远不止这些,可能你其中有一小点的疏忽就可以让你的网站、甚至服务器沦陷。因此安全策略必需走防患未然的道路,任何一个小地方都不能马虎、今天关于防Asp.Net安全隐患小技巧就为大家介绍到这里...

    Posted @2007-10-31 guanliyuan 阅读(1) 评论(0) 分类:未分类
  6. [摘要] 本文将为大家介绍在Microsoft Win系列的2003 SERVER IIS6.0中如何简单快速解决ASP.NET中的危险漏洞与隐患对WEB服务器系统的安全威胁之详细防范设置步骤。
      Network Service帐户在创建时不仅仅考虑了在IIS6.0中的.net应用程序,需要具有IIS6.0服务器上某些位置的访问权限,进程标识 W3WP.exe 也需要具有类似位置的访问权限,而且还需要一些默认情况下没有指派给内置组的权限。

      二、为了管理的方便,在安装IIS6.0时创建了"IIS_WPG"组(也称为IIS工作进程组,IIS Worker Process Group),而且它的成员包括Local System (本地系统)、Local Service(本地服务)、Network Service(网络服务)和IWAM帐户。IIS_WPG 的成员具有适当的NTFS的Acls权限和必要的用户权限,可以充当IIS 6.0中工作进程的进程标识。

      三、因此,Network Service帐户提供了访问上述位置的权限,具有充当 IIS 6 工作进程的进程标识的充足权限,以及具有访问网络的权限。Msdn上说:在Windows Server 2003中,用户上下文称为NETWORK SERVICE。这些用户帐户是在 .NET Framework安装过程中创建的,它具有唯一的不易破解的密码,并仅被授予有限的权限。ASPNET或NETWORK SERVICE用户只能访问运行Web应用程序所需的特定文件夹,如Web应用程序存储 已编译文件的\bin 目录。要将进程标识设置为特定用户名,以取代ASPNET或NETWORK SERVICE用户标识,您提供的用户名和密码都必须存储在machine.config 文件中。但是根据实际情况,asp.net的system.io可以无限制访问不设防的服务器

    Posted @2007-10-31 guanliyuan 阅读(1) 评论(0) 分类:未分类
  7. [摘要] 本文将为大家介绍在Microsoft Win系列的2003 SERVER IIS6.0中如何简单快速解决ASP.NET中的危险漏洞与隐患对WEB服务器系统的安全威胁之详细防范设置步骤。
      Security Fuard Solution Of ASP.NET and Webshell

      文章简介:本文将为大家介绍在Microsoft Win系列的2003 SERVER IIS6.0中如何简单快速方案

      大家都知道,Asp类木马可以通过对IIS中的虚拟主机采用独立匿名用户来控制FSO组件的安全,让其只能在站类活动,而不能跨站或者危害到其它硬盘的数据(注:如果您不明白可以参考一下本人以前的两篇文章《FSO安全隐患解决办法》; 《ASP木马Webshell之安全防范解决办法》) Asp的安全问题与设置这里不再作讨论,下面我们开始着手Asp.Net木马/WebShell防范方法的讲解:

      一、在IIS6.0中,WEB应用程序的工作进程为以进程标识“Network Service”运行。而在IIS5.0中,进程外WEB应用程序则是以“IWAM_服务器名”用户运行行,这个User是普通的本地Guests用户。网上有部份人提出针对此问题用Microsoft .NET Framework Configration设置System.io的对目录读取的权限,但很遗憾经过我们测试没有成功,可能是.net framework1.1机制改了?

      Network Service 是Windows Server 2003中的内置帐户。了解IIS5.0上的本地用户帐户(IUSR和IWAM)与这个内置帐户之间的区别是非常重要的。Windows操作系统中的所有帐户都分配了一个SID(安全标识:Security ID)。服务器是根据 SID,而不是与SID相关的名称来识别服务器上所有帐户的,而我们在与用户界面进行交互时,则是使用名称进行交互的。服务器上创建的绝大部分帐户都是本地帐户,都具有一个唯一的 SID,用于标识此帐户隶属于该服务器用户数据库的成员。由于SID只是相对于服务器是唯一的,因此它在任何其他系统上无效。所以,如果您为本地帐户分配了针对某文件或文件夹的 NTFS 权限,然后将该文件及其权限复制到另一台计算机上时,目标计算机上并没有针对这个迁移SID的用户帐户,即使其上有一个同名帐户也是如此。这使得包含NTFS权限的内容复制可能出现问题。内置帐户是由操作系统创建的、一类较为特别的帐户 或组,例如System帐户、Network Service和Everyone 组。这些对象的重要特征之一就是,它们在所有系统上都拥有一个相同的、众所周知的SID。当将分配了NTFS权限的文件复制到内置帐户时,权限在服务器之间是有效的,因为内置帐户的SID在所有服务器上都是相同的。Windows Server 2003 服务中的 Network Service 帐户是特别设计的,专用于为应用程序提供访问网络的足够权限,而且在IIS 6.0中,无需提升权限即可运行Web 应用程序。这对于IIS安全性来说,是一个特大的消息,因为不存在缓冲溢出,怀有恶意的应用程序无法破译进程标识,或是对应用程序的攻击不能进入System用户环境。更为重要的一点是,再也不能形成针对System帐户的“后门”,例如,再也无法通InProcessIsapiApps元数据库项利用加载到Inetinfo的应用程序。我们已经简单的介绍了一下ASP.NET中关于文件IO系统的漏洞的防治方法,这一方法有些繁琐,但是却可以从根本上杜绝一些漏洞,我们讨论的只是很少的一部分,更多的解决放法需要大家共同来探索、学习。(AD^_^:游刃在技术鬼神边缘,打造服务器安全神话!创世纪网络技术前瞻,成就互联网革命先驱!服务器安全讨论区[S.S.D.A])

    Posted @2007-10-31 guanliyuan 阅读(0) 评论(0) 分类:未分类
  8. 测试

    Posted @2007-10-25 guanliyuan 阅读(0) 评论(0) 分类:未分类