<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post/954/</link>
<title><![CDATA[Bash Code Injection Vulnerability via Specially Crafted Environment Variables]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[安全相关]]></category>
<pubDate>Thu, 25 Sep 2014 08:41:36 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/954/</guid> 
<description>
<![CDATA[ 
	一、漏洞概述<br/>在GNU bash环境变量中定义一个函数之后，如果后续还有其它字符串，bash在解析这些字符串的时候存在一个缺陷，允许远程攻击者执行任意的命令，只要攻击者 构建一个特殊的环境变量即可。攻击者可以利用此缺陷重写或绕过环境变量的限制执行shell命令，从而导致信息泄漏、未授权的恶意修改、服务中断。 <br/><br/>二、受影响版本<br/><br/>&nbsp;&nbsp;目前GNU bash4.3及以下版本存在此问题。<br/><br/>三、利用场景<br/><br/>如下业务场景中都会受此缺陷影响：<br/>1、OpenSSHsshd使用了ForceCommand特性<br/><br/>ForceCommand特性用来给远程用户提供受限的命令执行能力，因此使用了此特性的如git、subversion等都会受影响。<br/><br/>2、Apache HTTP Server使用了modcgi和mod_cgid模块；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>在Apache Server启用了modcgi和mod_cgid模块时，只要CGI脚本是由bash编写，或者使用了派生的subshell都会受影响。能够产生这样的subshell的包括：<br/>C语言的system/popen，Python的os.system/os.popen，PHP的system/exec，Perl的open/system。<br/><br/>四、修复方法<br/><br/>yum clean all <br/>yum --enablerepo=updates install bash <br/><br/>五、验证方法<br/><br/>验证是否存在次漏洞的方法： <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>[root@localhost]# env x='() &#123; :;&#125;; echo vulnerable' bash -c "echo this is a test"<br/>vulnerable<br/>this is a test <br/><br/>漏洞修复之后，再执行该命令： <br/>[root@localhost]# env x='() &#123; :;&#125;; echo vulnerable' bash -c "echo this is a test"<br/>&nbsp;&nbsp;&nbsp;&nbsp; bash: warning: x: ignoring function definition attempt <br/>&nbsp;&nbsp;&nbsp;&nbsp; bash: error importing function definition for `x' <br/>&nbsp;&nbsp;&nbsp;&nbsp; this is a test <br/><br/>六、参考链接<br/><a href="https://www.invisiblethreat.ca/2014/09/cve-2014-6271/" target="_blank">https://www.invisiblethreat.ca/2014/09/cve-2014-6271/</a><br/><a href="https://access.redhat.com/node/1200223" target="_blank">https://access.redhat.com/node/1200223</a><br/>Tags - <a href="http://www.zhanghaijun.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhanghaijun.com/tags/bash/" rel="tag">bash</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/867/</link>
<title><![CDATA[[php安全]php pathinfo设置]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[安全相关]]></category>
<pubDate>Sat, 24 Sep 2011 02:15:14 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/867/</guid> 
<description>
<![CDATA[ 
	由于脚本编写时出错导致可能存在pathinfo漏洞，请所有lnmp用户检查一下php的pathinfo设置！！！<br/><br/>编辑/usr/local/webserver/php/etc/php.ini 文件，搜索 cgi.fix_pathinfo ，如果cgi.fix_pathinfo 该行为 ; cgi.fix_pathinfo=0 请修改为 cgi.fix_pathinfo=0<br/>或直接执行：sed -i 's/; cgi.fix_pathinfo=0/cgi.fix_pathinfo=0/g' /usr/local/webserver/php/etc/php.ini<br/><br/>再执行：/usr/local/webserver/php/sbin/php-fpm restart 重启php-fpm<br/><br/>如果是cgi.fix_pathinfo=0则没问题，不需要修改。<br/>请各位lnmp(linux+nginx+mysql+php)用户检查一下，防止pathinfo漏洞给网站或服务器带来安全隐患。<br/><br/>Tags - <a href="http://www.zhanghaijun.com/tags/php/" rel="tag">php</a> , <a href="http://www.zhanghaijun.com/tags/pathinfo/" rel="tag">pathinfo</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/780/</link>
<title><![CDATA[最佳的75个安全工具]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[安全相关]]></category>
<pubDate>Mon, 09 May 2011 18:39:49 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/780/</guid> 
<description>
<![CDATA[ 
	【导读】nmap-hackers邮件列表中发起了最佳安全工具的评选活动，活动取得了成功，最终由2200名Nmap用户评选出的安全工具 <br/><br/>在nmap-hackers邮件列表中做出的评选，因此没有把nmap安全扫描器（http://www.insecure.org/nmap/）评选在内。<br/>这次评选出来的75个最佳安全工具在网络安全领域都是一些很有代表性的软件，对于那些在网络安全方面不知从何处开始的新手们来说，这对他们有相当的参考价值。<br/><br/><br/>工具：Nessus（最好的开放源代码风险评估工具）<br/>网址：http://www.nessus.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：Nessus是一款可以运行在Linux、BSD、Solaris以及其他一些系统上的远程安全扫描软件。它是多线程、基于插入式的软件，拥有很好的GTK界面，能够完成超过1200项的远程安全检查，具有强大的报告输出能力，可以产生HTML、XML、LaTeX和ASCII文本等格式的安全报告，并且会为每一个发现的安全问题提出解决建议。<br/><br/>工具：Ethereal（网络协议检测工具）<br/>网址：http://www.ethereal.com/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Ethereal是一款免费的网络协议分析程序，支持Unix、Windows。借助这个程序，你既可以直接从网络上抓取数据进行分析，也可以对由其他嗅探器抓取后保存在硬盘上的数据进行分析。你能交互式地浏览抓取到的数据包，查看每一个数据包的摘要和详细信息。Ethereal有多种强大的特征，如支持几乎所有的协议、丰富的过滤语言、易于查看TCP会话经重构后的数据流等。<br/><br/>工具：Snort（免费的入侵检测系统）<br/>网址：http://www.snort.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Snort是一款轻量级的网络入侵检测系统，能够在IP网络上进行实时的流量分析和数据包记录。它不仅能进行协议分析、内容检索、内容匹配，而且能用于侦测诸如缓冲溢出、隐秘端口扫描、CGI攻击、SMB探测、操作系统指纹识别等大量的攻击或非法探测。Snort使用灵活的规则去描述哪些流量应该被收集或被忽略，并且提供一个模块化的探测引擎。<br/><br/>工具：Netcat（网络瑞士军刀）<br/>网址：http://www.atstake.com/research/tools/network_utilities/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：一个简单而有用的工具，透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具，能够直接由其它程序和脚本轻松驱动。同时，它也是一个功能强大的网络调试和探测工具，能够建立你需要的几乎所有类型的网络连接，还有几个很有意思的内置功能。<br/><br/> <br/><br/>工具：TCPDump/WinDump（用于网络监测和数据收集的优秀嗅探器）<br/>网址：http://www.tcpdump.org/，http://windump.polito.it/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Tcpdump是一款众人皆知和受人喜欢的基于命令行的网络数据包分析和嗅探工具。它能把匹配规则的数据包的包头给显示出来。你能使用这个工具去查找网络问题或者去监视网络上的状况。WinDump是Tcpdump在Windows平台上的移植版。<br/><br/>工具：Hping2（类似ping的网络探测工具）<br/>网址：http://www.hping.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：hping2能发送自定义的ICMP/UDP/TCP包到目标地址并且显示包的响应情况。它有一个方便的traceroute模式，并且支持IP分片。这个工具在traceroute、ping和探测_blank">防火墙后的主机时特别有用。<br/><br/>工具：DSniff(一流的网络审计和渗透测试工具）<br/>网址：http://naughty.monkey.org/~dugsong/dsniff/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：DSniff是由Dug Song开发的一套包含多个工具的软件套件。其中，dsniff、filesnarf、mailsnarf、msgsnarf、rlsnarf和 webspy可以用于监视网络上我们感兴趣的数据（如口令、e-mail、文件等），arpspoof、dnsspoof和macof能很容易地载取到攻击者通常难以获取的网络信息（如二层交换数据），sshmitm和webmitm则能用于实现重写SSH和HTTPS会话达到monkey-in-the -middle攻击。在http://www.datanerds.net/~mike/dsniff.html可以找到Windows平台上的移植版。<br/><br/>工具：GFI LANguard（商业化的网络安全扫描软件）<br/>网址：http://www.gfi.com/lannetscan/<br/>类别：商业<br/>平台：Windows<br/>简介：LANguard扫描网络并且得出诸如每台机器的服务包等级、缺少的安全补丁、打开的共享、开放的端口、正在运行的服务和应用程序、注册表键值、弱口令、用户和组等扫描信息的报告。扫描结果输出为一个HTML格式的报告，报告能够自定义。 <br/><br/>工具：Ettercap（为你的交换环境提供更多的安全）<br/>网址：http://ettercap.sourceforge.net/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Ettercap是一款以太网环境下的网络监视、拦载和记录工具，支持多种主动或被动的协议分析（甚至跟加密相关的SSH、HTTPS等），有数据插入、过滤、保持连接同步等多种功能，也有一个能支持多种嗅探模式的、强大而完整的嗅探套件，支持插件，能够检查网络环境是否是交换局域网，并且能使用主动或被动的操作系统指纹识别技术让你了解当前局域网的情况。<br/><br/>工具：Whisker/Libwhisker（CGI缺陷扫描软件和库）<br/>网址：http://www.wiretrip.net/rfp/p/doc.asp/d21.htm<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Whisker是一款非常好的HTTP服务器缺陷扫描软件，能扫描出大量的已知安全漏洞，特别是些危险的CGI漏洞。Libwhisker是一个用perl编写的由Whiskerr使用的程序库，通过它你可以创建自己HTTP扫描器。<br/><br/>工具：John the Ripper（格外强大、灵活、快速的多平台哈希口令破解器）<br/>网址：http://www.openwall.com/john/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：John the Ripper是一个快速的口令破解器，支持多种操作系统，如Unix、DOS、Win32、BeOS和OpenVMS等。它设计的主要目的是用于检查 Unix系统的弱口令，支持几乎所有Unix平台上经crypt函数加密后的口令哈希类型，也支持Kerberos AFS和Windows NT/2000/XP LM哈希等。<br/><br/><br/>工具：OpenSSH/SSH（访问远程计算机的一种安全方法）<br/>网址：http://www.openssh.com/，http://www.ssh.com/commerce/index.html<br/>类别：开放源码/商业<br/>平台：Linux/BSD/Unix/Windows<br/>简介：SSH（Secure Shell）是一款用来登录远程服务器并在远程服务器上执行命令的程序，在缺少安全防护的网络上它能给两台互不信任的主机间提供安全可靠的加密通讯。X11连接和其他任意的TCP/IP端口连接都可以通过SSH进行数据封装转发到一个安全的通道里。SSH开发的本意是用于代替rlogin、rsh和rcp这些不安全的程序，以及为rdist和rsync提供安全通道。需要注意的是，OpenSSH是SSH的替代软件，SSH对于某些用途是要收费的，但OpenSSH总是免费。<br/><br/>工具：Sam Spade（Windows平台上的免费网络查询工具）<br/>网址：http://www.samspade.org/ssw/<br/>类别：免费软件<br/>平台：Windows<br/>简介：SamSpade提供了一个友好的GUI界面，能方便地完成多种网络查询任务，它开发的本意是用于追查垃圾邮件制造者，但也能用于其它大量的网络探测、网络管理和与安全有关的任务，包括ping、nslookup、whois、dig、traceroute、finger、raw HTTP web browser、DNS zone transfer、SMTP relay check、website search等工具，在它的网站还有大多数查询工具的一个在线版本（http://www.samspade.org/t/）。<br/><br/>工具：ISS Internet Scanner（应用层风险评估工具）<br/>网址：http://www.iss.net/products_services/enterprise_protection/vulnerability_assessment/scanner_internet.php<br/>类别：商业<br/>平台：Windows<br/>简介：互联网扫描器（Internet Scanner）始于1992年一个小小的开放源代码扫描器，它是相当不错的，但价格昂贵，使用开源软件Nessus来代替它也是一个不错的选择。<br/><br/>工具：Tripwire（功能强大的数据完整性检查工具）<br/>网址：http://www.tripwire.com/<br/>类别：商业<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Tripwire是一款文件和目录完整性检查工具，它能帮助系统管理员和用户监视一些重要文件和目录发生的任何变化。通过制定一些基本的系统策略，在文件遭到破坏或篡改时由Tripwire通知系统管理员，从而能及时地做出处理。Tripwire的商业版本非常昂贵，在Tripwire.Org网站有一个免费的开放源代码的Linux版本，UNIX用户也可能需要考虑AIDE（http://www.cs.tut.fi/~rammer/aide.html），它是Tripwire的免费替代品。<br/><br/>工具：Nikto（一款非常全面的web扫描器）<br/>网址：http://www.cirt.net/code/nikto.shtml<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Nikto是一款能对web服务器多种安全项目进行测试的扫描软件，能在200多种服务器上扫描出2000多种有潜在危险的文件、CGI及其他问题。它也使用LibWhiske库，但通常比Whisker更新的更为频繁。<br/><br/>工具：Kismet（强大的无线嗅探器）<br/>网址：http://www.kismetwireless.net/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Kismet是一款802.11b网络嗅探和分析程序，功能有：支持大多数无线网卡，能通过UDP、ARP、DHCP数据包自动实现网络IP阻塞检测，能通过Cisco Discovery协议列出Cisco设备，弱加密数据包记录，和Ethereal、tcpdump兼容的数据包dump文件，绘制探测到的网络图和估计网络范围。<br/><br/>工具：SuperScan（Windows平台上的TCP端口扫描器）<br/>网址：http://www.foundstone.com/index.htm?subnav=resources/navigation.htm&subcontent=/resources/proddesc/superscan.htm<br/>类别：免费<br/>平台：Windows<br/>简介：SuperScan是一款具有TCP connect端口扫描、Ping和域名解析等功能的工具，能较容易地做到对指定范围内的IP地址进行ping和端口扫描。源代码不公开。 <br/><br/>工具：L0phtCrack 4（Windows口令审计和恢复程序）<br/>网址：http://www.atstake.com/research/lc/<br/>类别：商业<br/>平台：Linux/BSD/Unix/Windows<br/>简介：L0phtCrack试图根据从独立的Windows NT/2000工作站、网络服务器、主域控制器或Active Directory上正当获取或者从线路上嗅探到的加密哈希值里破解出Windows口令，含有词典攻击、组合攻击、强行攻击等多种口令猜解方法。<br/><br/>工具：Retina（eEye公司的风险评估扫描工具）<br/>网址：http://www.eeye.com/html/Products/Retina/index.html<br/>类别：商业<br/>平台：Windows<br/>简介：像上面提到的Nessus和ISS Internet Scanner一样，Retina的功能也是用于扫描网络内所有的主机并且报告发现的每一个缺陷。<br/><br/>工具：Netfilter（当前Linux内核采用的包过滤_blank">防火墙）<br/>网址：http://www.netfilter.org/<br/>类别：开放源码<br/>平台：Linux<br/>简介：Netfilter是一款功能强大的包过滤_blank">防火墙，在标准的Linux内核内得到实现，iptables是 _blank">防火墙配置工具。它现在支持有状态或无状态检测的包过滤，支持所有种类的NAT和包分片。相应的，对于非Linux平台上的 _blank">防火墙，OpenBSD平台上有pf，UNIX平台上有ipfilter，Windows平台上有Zone Alarm个人_blank">防火墙。<br/><br/>工具：traceroute /ping /telnet /whois（基本命令）<br/>网址：<br/>类别：免费<br/>平台：Linux/BSD/Unix/Windows<br/>简介：当我们使用大量的高水平的工具来辅助安全审计工作时，别忘了这几个最基本的工具。我们每个人都应非常熟悉这几个工具的用法，几乎所有的操作系统上都附带有这几个工具，不过Windows平台上没有whois工具，并且traceroute改名为tracert。<br/><br/>工具：Fport（增强的netstat）<br/>网址：http://www.foundstone.com/index.htm?subnav=resources/navigation.htm&subcontent=/resources/proddesc/fport.htm<br/>类别：免费<br/>平台：Windows<br/>简介：Fport能显示主机上当前所有打开的TCP/IP、UDP端口和端口所属的进程，因此通过使用它能即刻发现未知的开放端口和该端口所属的应用程序，是一款查找木马的好工具。不过，Fport仅支持Windows系统，在许多UNIX系统上有一个netstat命令实现类似功能，Linux系统上用“netstat -pan”命令。源代码不公开。<br/><br/>工具：SAINT（安全管理员的综合网络工具）<br/>网址：http://www.saintcorporation.com/saint/<br/>类别：商业<br/>平台：Linux/BSD/Unix<br/>简介：Saint是一款商业化的风险评估工具，但与那些仅支持Windows平台的工具不同，SAINT运行在UNIX类平台上，过去它是免费并且开放源代码的，但现在是一个商业化的产品。<br/><br/>工具：Network Stumbler（免费的Windows平台802.11嗅探器）<br/>网址：http://www.stumbler.net/<br/>类别：免费<br/>平台：Windows<br/>简介：Netstumbler是最有名的寻找无线接入点的工具，另一个支持PDA的WinCE平台版本叫Ministumbler。这个工具现在是免费的，仅仅支持Windows系统，并且源代码不公开，而且该软件的开发者还保留在适当的情况下对授权协议的修改权。UNIX系统上的用户可以使用Kismet来代替。<br/><br/>工具：SARA（安全管理员的辅助工具）<br/>网址：http://www-arc.com/sara/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：SARA是一款基于SATAN安全扫描工具开发而来的风险评估工具，每月更新两次。<br/><br/>工具：N-Stealth（web服务器扫描工具）<br/>网址：http://www.nstalker.com/nstealth/<br/>类别：商业<br/>平台：Windows<br/>简介：N-Stealth是一款商业化的Web服务器安全扫描软件，通常它比whisker、nikto等免费的web扫描器升级的更为频繁。N-Stealth开发商宣称的“超过20,000条的缺陷和 exploit数据”和“每天新增大量的缺陷检查”是非常可疑的。我们也要注意到，在nessus、ISS、Retina、SAINT和SARA等所有常见的风险评估工具里已含有web扫描组件，不过它们可能没有N-Stealth这样灵活易用和更新频繁。n-stealth不公开源代码。<br/><br/>工具：AirSnort（802.11 WEP密码破解工具）<br/>网址：http://airsnort.shmoo.com/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：AirSnort是一款无线局域网密钥恢复工具，由Shmoo小组开发。它监视无线网络中的传输数据，当收集到足够多的数据包时就能计算出密钥。<br/><br/>工具：NBTScan（从Windows网络上收集NetBIOS信息）<br/>网址：http://www.inetcat.org/software/nbtscan.html<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：NBTscan是一个用于扫描网络上NetBIOS名字信息的程序。这个程序对给出范围内的每一个地址发送NetBIOS状态查询，并且以易读的表格列出接收到的信息，对于每个响应的主机，它列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地址。<br/><br/>工具：GnuPG/PGP（保护你的文件和通信数据的先进加密程序）<br/>网址：http://www.gnupg.org/，http://www.pgp.com/<br/>类别：开放源码/商业<br/>平台：Linux/BSD/Unix/Windows<br/>简介：PGP是由Phil Zimmerman开发的著名加密程序，它使用公钥加密算法和常规的加密技术相结合，能将加密后的文件安全地从一地传递到另一地，从而保护用户的数据免于窃听或其他的安全风险。GnuPG是遵照PGP标准开发的开源程序，不同的是，GnuPG是永远免费的，而PGP对于某些用途要收费。<br/><br/>工具：Firewalk（高级的traceroute）<br/>网址：http://www.packetfactory.net/projects/firewalk/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：Firewalk使用类似traceroute的技术来分析IP包的响应，从而测定网关的访问控制列表和绘制网络图。2002年10月，这个一流的工具在原来的基础上进行了重新开发。需要注意到的是，Firewalk里面的大多数功能也能由Hping2的traceroute选项来实现。<br/><br/>工具：Cain & Abel（穷人的L0phtcrack）<br/>网址：http://www.oxid.it/cain.html<br/>类别：免费<br/>平台：Windows<br/>简介：Cain & Abel是一个针对Microsoft操作系统的免费口令恢复工具。它通过如下多种方式轻松地实现口令恢复：网络嗅探、破解加密口令（使用字典或强行攻击）、解码被打乱的口令、显示口令框、显示缓存口令和分析路由协议等。源代码不公开。<br/><br/>工具：XProbe2（主动操作系统指纹识别工具）<br/>网址：http://www.sys-security.com/html/projects/X.html<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：XProbe是一款测定远程主机操作系统类型的工具。它依靠与一个签名数据库的模糊匹配以及合理的推测来确定远程操作系统的类型，利用ICMP协议进行操作系统指纹识别是它的独到之处。 <br/><br/> <br/><br/>工具：SolarWinds Toolsets（大量的网络发现、监视、攻击工具）<br/>网址：http://www.solarwinds.net/<br/>类别：商业<br/>平台：Windows<br/>简介：SolarWinds包含大量适合系统管理员做特殊用途的工具，与安全相关的工具包括许多的网络发现扫描器（network discovery scanner）和一个SNMP强力破解器。<br/><br/>工具：NGrep（方便的包匹配和显示工具）<br/>网址：http://www.packetfactory.net/projects/ngrep/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：NGrep在网络层实现了GNU grep的大多数功能，基于pcap，可以使你通过指定扩展的正则表达式或十六进制表达式去匹配网络上的数据流量。它当前能够识别流经以太网、PPP、SLIP、FDDI、令牌网和回环设备上的TCP、UDP和ICMP数据包，并且和其他常见的嗅探工具（如tcpdump和snoop）一样，理解bpf过滤机制。<br/><br/>工具：Perl/Python（脚本语言）<br/>网址：http://www.perl.org，http://www.python.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：当我们使用那些已经开发好的安全工具来处理任务时，别忘了能自己写出（或修改）安全程序也是一件非常重要的事情。利用Perl和Python能非常容易地写出用于系统测试、exploit和修补的脚本程序，使用包含Net::RawIP和协议实现等模块的CPAN（Comprehensive Perl Archive Network：http://www.cpan.org/）或类似的档案能帮助我们比较容易地进行相关的开发。<br/><br/>工具：THC-Amap（应用程序指纹识别扫描器）<br/>网址：http://www.thc.org/releases.php<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：由THC开发的Amap是一个功能强大的扫描器，它通过探测端口响应的应用程序指纹数据来识别应用程序和服务，远甚于通过缺省端口号来判断应用程序和服务的方法。<br/><br/>工具：OpenSSL（最为重要的SSL/TLS加密库）<br/>网址：http://www.openssl.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：OpenSSL项目是共同努力开发出来的一个健全的、商业级的、全开放的和开放源代码的工具包，用于实现安全套接层协议(SSL v2/v3)和传输层安全协议(TLS v1)以及形成一个功效完整的通用加密库。该项目由全世界范围内志愿者组成的团体一起管理，他们使用Internet去交流、设计和开发这个OpenSSL工具和相关的文档。<br/><br/>工具：NTop（网络使用状况监测软件）<br/>网址：http://www.ntop.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Ntop是一款显示网络使用状况的流量监测软件，类似于UNIX平台上监视系统进程的top命令。在交互模式下，ntop会将网络的使用状况显示在用户的终端上；在Web模式下，ntop会做为一个web服务器，创建包含网络状况的HTML网页返回给用户。<br/><br/>工具：Nemesis（命令行式的UNIX网络信息包插入套件）<br/>网址：http://www.packetfactory.net/projects/nemesis/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：Nemesis项目是为了开发一个UNIX/Linux系统上基于命令行的、方便人们使用的IP栈，它可以自定义数据包、插入数据包、进行协议攻击等，是一个很好的测试_blank">防火墙、入侵检测系统、路由器和其他网络设备的工具。如果你对Nemesis感兴趣，那么你也可能需要看看hping2，这两者补相互之不足。<br/><br/>工具：LSOF（列出打开的文件）<br/>网址：ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：LSOF是针对Unix的诊断和分析工具，它能显示出由系统里正在运行的进程所打开的文件，也能显示出每一个进程的通讯socket。<br/><br/>工具：Hunt（Linux平台上高级的包嗅探和会话劫持工具）<br/>网址：http://lin.fsid.cvut.cz/~kra/index.html#HUNT<br/>类别：开放源码<br/>平台：Linux<br/>简介：Hunt能监视、劫持、重设网络上的TCP连接，在以太网上使用才有作用，并且含有监视交换连接的主动机制，以及包括可选的ARP转播和劫持成功后的连接同步等高级特征。<br/><br/>工具：Honeyd（你个人的honeynet，http://www.honeynet.org/）<br/>网址：http://www.citi.umich.edu/u/provos/honeyd/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Honeyd是一个能在网络上创建虚拟主机的小小后台程序，虚拟主机能被配置成运行任意的服务，并且洽当的服务TCP特性以致他们看起来就像是运行在某个特定版本的操作系统上。Honeyd能在一个模拟的局域网环境里让一台主机配有多个地址，并且可以对虚似主机进行 ping、traceroute。虚拟主机上任何类型的服务都可以依照一个简单的配置文件进行模拟。Honeyd也可以对一台主机做代理服务，而不是模拟它。<br/><br/>工具：Achilles（可以修改http会话包的代理程序）<br/>网址：http://packetstormsecurity.nl/filedesc/achilles-0-27.zip.html<br/>类别：开放源码<br/>平台：Windows<br/>简介：Achilles是一个设计用来测试web应用程序安全性的工具。它是一个代理服务器，在一个HTTP会话中扮演着“中间人”（man-in-the-middle）的角色。一个典型的HTTP代理服务器将在客户浏览器和web服务器间转发数据包，但Achilles却载取发向任一方的HTTP会话数据，并且在转发数据前可以让用户修改这些数据。<br/><br/>工具：Brutus（网络认证的强行破解工具）<br/>网址：http://www.hoobie.net/brutus/<br/>类别：免费<br/>平台：Windows<br/>简介：Brutus是一款对远程服务器的网络服务进行口令猜解的工具，支持字典攻击和组合攻击，支持的网络应用包括HTTP、POP3、FTP、SMB、TELNET、IMAP、NTP等。源代码不公开。UNIX系统上的THC-Hydra有类似的功能。<br/><br/>工具：Stunnel（一个多种用途的SSL加密外壳）<br/>网址：http://www.stunnel.org/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Stunnel程序被设计用来做为本地客户端和远程服务器间的SSL加密外壳。它能在POP2、POP3、IMAP等使用inetd后台进程的服务器上增加SSL功能，并且不会影响到程序源代码。它使用OpenSSL或SSLeay库建立SSL会话连接。<br/><br/>工具：Paketto Keiretsu（极端的TCP/IP）<br/>网址：http://www.doxpara.com/paketto<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：Paketto Keiretsu是一组使用新式的不常见的策略去操作TCP/IP网络的工具集合，开发的最初本意是为了在现有TCP/IP架构里去实现一些功能，但现在已经远远超出了最初的本意。包含的工具有：Scanrand，一个罕见的快速的网络服务和拓朴发现系统；Minewt，一个NAT/MAT路由器；linkcat，把以太网链路做为标准的输入输出；Paratrace，不产生新的连接就能追踪网络路径；Phentropy，使用OpenQVIS在三维拓朴空间里能绘制出任意总量的数据源图形。<br/><br/>工具：Fragroute（破坏入侵检测系统最强大的工具）<br/>网址：http://www.monkey.org/~dugsong/fragroute/<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Fragroute能够截取、修改和重写向外发送的报文，实现了大部分的IDS攻击功能。Fragroute起重要作用的是一个简单的规则设置语言，以它去实现延迟、复制、丢弃、碎片、重叠、打印、重排、分割、源路由或其他一些向目标主机发送数据包的攻击。这个工具开发的本意是去测试入侵检测系统、 _blank">防火墙、基本的TCP/IP栈的行为。像Dsniff、Libdnet一样，这个优秀的工具也是由Dug Song开发的。<br/><br/>工具：SPIKE Proxy<br/>网址：http://www.immunitysec.com/spikeproxy.html<br/>类别：开放源码<br/>平台：Linux/BSD/Unix/Windows<br/>简介：Spike Proxy是一个开放源代码的HTTP代理程序，用于发现web站点的安全缺陷。它是Spike应用程序测试套件（http://www.immunitysec.com/spike.html）的一部份，支持SQL插入检测、web站点检测、登录表单暴力破解、溢出检测和字典穷举攻击检测等。<br/><br/> <br/><br/>工具：THC-Hydra（网络认证的破解工具）<br/>网址：http://www.thc.org/releases.php<br/>类别：开放源码<br/>平台：Linux/BSD/Unix<br/>简介：这个工具能对需要网络登录的系统进行快速的字典攻击，包括FTP、POP3、IMAP、Netbios、Telnet、HTTP Auth、LDAP NNTP、VNC、ICQ、Socks5、PCNFS等，支持SSL，并且现在是Nessus风险评估工具的一部份。<br/><br/><br/><br/>【其他的25个最佳安全工具】<br/><br/>OpenBSD ( http://www.openbsd.org/ )：安全可靠的操作系统。<br/><br/>TCP Wrappers ( ftp://ftp.porcupine.org/pub/security/index.html )：一流的IP访问控制和日志的实现机制。<br/><br/>pwdump3 ( http://www.polivec.com/pwdump3.html )：获取本地或远程Windows主机的口令哈希，而不管是否安装了syskey。<br/><br/>LibNet ( http://www.packetfactory.net/libnet/ )：允许程序员去构造和插入网络数据包的高水平开发函数库.<br/><br/>IpTraf ( http://cebu.mozcom.com/riker/iptraf/ )： IP网络监控软件。<br/><br/>Fping ( http://www.fping.com/ )：一次可以ping多个IP地址的扫描程序。<br/><br/>Bastille ( http://www.bastille-linux.org/ )：增强系统安全性的脚本程序，支持Linux, Mac OS X和HP-UX操作系统。<br/><br/>Winfingerprint ( http://winfingerprint.sourceforge.net/ )：一款基于Win32的高级远程系统扫描器。<br/><br/>TCPTraceroute ( http://michael.toren.net/code/tcptraceroute/ )：使用TCP SYN包实现traceroute的工具。<br/><br/>Shadow Security Scanner ( http://www.safety-lab.com/en2/products/1.htm )：一款商业化的风险评估工具。<br/><br/>pf ( http://www.benzedrine.cx/pf.html )：OpenBSD系统内很有特色的包过滤防火墙。<br/><br/>LIDS ( http://www.lids.org/ )：Linux内核上的入侵检测和入侵防御系统。<br/><br/>hfnetchk ( http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/tools/tools/hfnetchk.asp )：微软发布的用于检查网络上Windows主机补丁安装情况的工具。<br/><br/>etherape ( http://etherape.sourceforge.net/ )：继流量监测软件etherman之后又一个支持unix的图形化网络状况监测软件。<br/><br/>dig ( http://www.isc.org/products/BIND/ )：Bind附带的DNS查询工具。<br/><br/>Crack/Cracklib ( http://www.users.dircon.co.uk/~crypto/ )：一流的本地口令破解器。<br/><br/>cheops/cheops-ng ( http://www.marko.net/cheops/，http://cheops-ng.sourceforge.net/ )：绘制本地或远程网络的网络图，并且也能识别主机的操作系统类型。<br/><br/>zone alarm ( http://www.zonelabs.com/ )：Windows平台上的个人_blank">防火墙软件。<br/><br/>Visual Route ( http://www.visualware.com/visualroute/index.html )：获取traceroute/whois数据，并且绘制出数据包经过的网络路线在世界地图上的位置。<br/><br/>The Coroner"s Toolkit (TCT) ( http://www.fish.com/tct/ )：运行于Unix系统上的文件系统检查及紧急修复工具集。<br/><br/>tcpreplay ( http://tcpreplay.sourceforge.net/ )：能把tcpdump或snoop保存下来的流量监测文件在任意点进行回放的工具。<br/><br/>snoop ( http://www.spitzner.net/snoop.html )：Solaris系统附带的网络嗅探工具。<br/><br/>putty ( http://www.chiark.greenend.org.uk/~sgtatham/putty/ )：Windows平台上优秀的SSH客户端。<br/><br/>pstools ( http://www.sysinternals.com/ntw2k/freeware/pstools.shtml )：一套用于管理Windows系统的免费命令行工具。<br/><br/>arpwatch ( http://www-nrg.ee.lbl.gov/ )：主要用来检测mac地址和ip地址对应关系的工具.<br/>Tags - <a href="http://www.zhanghaijun.com/tags/%25E5%25AE%2589%25E5%2585%25A8%25E5%25B7%25A5%25E5%2585%25B7/" rel="tag">安全工具</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/479/</link>
<title><![CDATA[IIS配置及安全访问控制策略详解-下]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[安全相关]]></category>
<pubDate>Wed, 05 Nov 2008 05:44:48 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/479/</guid> 
<description>
<![CDATA[ 
	《IIS服务配置及安全访问控制策略详解-上》介绍了相关的实验网络环境配置、IIS的安装、Web站点和FTP站点的配置，并通过基于不同OS的客户机（分别是Windows 2000和Red Hat Linux 9）对IIS服务(Web、Ftp服务)进行了测试。下篇将介绍“IIS的高级服务配置及测试、访问控制配置、远程管理Web站点以及在路由上做访问控制”等内容。 <br/><P><STRONG>四、IIS的高级服务配置</STRONG></P><br/><P><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;</STRONG>为了使当前IIS Server提供的IIS服务更加安全可靠，应当进行高级服务配置，从某种意义上，IIS服务器代表着本企业或者校园网的形象，甚至作为网络办公的平台，其中往往涉及一些非常重要的数据资料，事实上，黑客们攻击的对象也大都是Web站点和FTP站点，因此IIS Server服务器的安全越来越显得重要，所以IIS服务器需要配置包括对Web站点的访问帐号验证及访问的IP地址授权以及对FTP站点的访问帐号验证，上传文件权限配置以及对FTP站点提供的IP地址授权等等。</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;此外，还可以在路由器Router2中做IP地址的访问控制ACL，通过ACL访问控制列表来拒绝或者接受来自各客户机的访问。</P><br/><P><STRONG>1．在IISserver中配置安全访问帐号</STRONG></P><br/><P>步骤○1为了在提供Web服务时进行身份验证，实例中，在IIS Server上建立一个用以提供Web访问的帐号webuser，并设置相应的密码为123456，如图19</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134550252.jpg"></P><br/><P align=center>图19</P><br/><P>步骤○2为了在提供FTP服务时进行身份验证，实例中，在IIS Server上建立一个用以提供FTP访问的帐号ftpuser，并设置相应的密码为123456，如图20</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134552986.jpg"></P><br/><P align=center>图20</P><br/><P>步骤○3添加IIS server的本地组webgroup，并将webuser添加至该组中，如图21</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134552449.jpg"></P><br/><P align=center>图21</P><br/><P>步骤○4添加IIS server的本地组ftpgroup，并将ftpuser添加至该组中，如图22</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134553201.jpg"></P><br/><P align=center>图22</P><br/><P>步骤○5打开在IIS server中为Web提供服务的主目录wwwroot的属性对话框，在安全选项卡中添加webuser用户，并为其设置相应的访问权限，如图23</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134553194.jpg"></P><br/><P align=center>图23</P><br/><P>步骤○6打开IIS信息服务控制台，在默认的Web站点属性对话框中的目录安全性选项卡，将匿名访问前的复选框去掉，对WEB访问用户进行身份验证设置，如图24</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134553881.jpg"></P><br/><P align=center>图24</P><br/><P>步骤○7打开IIS信息服务控制台，在默认的FTP站点属性对话框中的安全帐号选项卡，将允许匿名连接前的复选框去掉，并通过添加将ftpuser帐号加入其中，对FTP访问用户进行身份验证设置，如图25</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134554347.jpg"></P><br/><P align=center>图25</P><br/><P><STRONG>五、IIS高级服务测试</STRONG></P><br/><P><STRONG>1．在PC1和PC2上做Web站点的访问测试</STRONG></P><br/><P>步骤○1在PC1和PC2中打开Internet Explorer浏览器，输入WEB站点的IP地址<A href="http://172.16.1.2/"><FONT color=#0000ff>http://172.16.1.2</FONT></A>，访问后如图26</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134554747.jpg"></P><br/><P align=center>图26</P><br/><P>步骤○2此时如不输入正确的webuser帐号及密码或者使用取消，访问将被拒绝。如图27</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134554954.jpg"></P><br/><P align=center>图27</P><br/><P>步骤○3访问时提供正确的webuser帐号及密码后，如图28</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134554107.jpg"></P><br/><P align=center>图28</P><br/><P>步骤○4正确的帐号Webuser验证通过以后，Web站点访问成功，如图29</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134555687.jpg"></P><br/><P align=center>图29</P><br/><P><STRONG>2．在PC1和PC2上做FTP站点的访问测试</STRONG></P><br/><P>步骤○1在PC1和PC2中打开Internet Explorer浏览器，输入FTP站点的IP地址<A href="ftp://172.16.1.2/"><FONT color=#0000ff>ftp://172.16.1.2</FONT></A>，访问后如图30</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134556797.jpg"></P><br/><P align=center>图30</P><br/><P>步骤○2此时如果不能提供正确的ftpuser帐户和密码，访问被拒绝，如果提供的帐号和密码正确，则如图31-图32</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134557881.jpg"></P><br/><P align=center>图31</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134557595.jpg"></P><br/><P align=center>图32</P><br/><P>(3) 在PC4(Red Hat Linux 9)上做WEB站点及FTP站点测试，同样也需要提供正确的帐号和密码，在访问Web站点时提供webuser帐号，在访问FTP站点时提供ftpuser帐号。</P><br/><P>(4) 比如使用RED HAT LINUX 9的终端登陆FTP站点，正常访问如图33，如果FTP站点配置了写入权限，还可以在PC4上上传文件至FTP站点，如图33中所示</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134558881.jpg"></P><br/><P align=center>图33</P><br/><P>(5) 如果不能提供正确的ftpuser帐号和密码，访问将被拒绝。如图34</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134558288.jpg"></P><br/><P align=center>图34</P><br/><P><STRONG>六、在IIS server服务器</A>上做访问控制配置</STRONG></P><br/><P>1．在IIS Server上做Web服务的IP地址及域名限制，打开默认web站点属性对话框，并在目录安全</A>性选项卡中通过编辑IP地址及域名限制，配置如图35</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134558635.jpg"></P><br/><P align=center>图35</P><br/><P>2．在IIS Server上做FTP服务的IP地址及域名限制，打开默认FTP站点属性对话框，并在目录安全性选项卡中通过编辑IP地址及域名限制，配置如图36</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134558827.jpg"></P><br/><P align=center>图36</P><br/><P>3． 此时，在PC4(IPAddress:172.16.1.3)和PC2(IPAddress:192.168.1.2)上访问可通过，能正常使用IISServer所提供的Web站点或者FTP站点服务，而在PC1(IPAddress:192.168.2.2)上访问被拒绝，如图37，图38</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134559484.jpg"></P><br/><P align=center>图37</P><br/><P align=center><IMG border=0 src="/attachment/2008-11/20081105134559557.jpg"></P><br/><P align=center>图38</P><br/><P><STRONG>七、远程管理Web站点</STRONG></P><br/><P><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;</STRONG>由于某些时候在IIS Server服务器上操作不是很方便，我们还需要对IIS服务器进行远程管理，这样，只要能够通过局域网或者在企业网内部，事实上在INTERNET上也可以与IIS server服务器相连，就可以使用IE浏览器来实现对WEB站点的远程管理。</P><br/><P>步骤1．在控制台中选择管理Web站点，打开管理web站点属性对话框，此时应注意端口的配置，在实例中选择默认的3914端口。如图39</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134559717.jpg"></P><br/><P align=center>图39</P><br/><P>步骤2：打开操作员选项卡，将Webuser帐号添加进来，今后通过webuser帐号可对IIS进行远程管理。如图40</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134559570.jpg"></P><br/><P align=center>图40</P><br/><P>步骤3：出于IIS管理的安全性，不允许任何机器登陆IIS服务器进行配置，我们将IP地址及域名限制到管理员经常使用的PC2机上。如图41</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134600370.jpg"></P><br/><P align=center>图41</P><br/><P>步骤4：此时在PC1和PC4的浏览器中输入<A href="http://172.16.1.2:3914/"><FONT color=#0000ff>http://172.16.1.2:3914</FONT></A>,访问被拒绝，而在PC2上输入管理WEB站点的地址<A href="http://172.16.1.2:3914/"><FONT color=#0000ff>http://172.16.1.2:3914</FONT></A>，访问正常，可对IIS做远程的WEB站点管理，如图42</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105134600211.jpg"></P><br/><P align=center>图42</P><br/><P><STRONG>八、在路由上做访问控制</STRONG></P><br/><P><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;</STRONG>为了在IIS Server上提供更加安全可靠的服务，如当前IIS Server服务器向PC2和PC4提供IIS服务，而拒绝给PC1提供服务，这时候可以在路由器上做ACL访问控制表。</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;实例中我们以Router2作为ACL控制路由器，登陆到Router2后，对Router2做标准的访问控制<BR>router2#config t</P><br/><P>Enter configuration commands, one per line.&nbsp;&nbsp;End with CNTL/Z.<BR>router2(config)#access-list 1 permit 192.168.1.0 0.0.0.255<BR>router2(config)#int serial 0<BR>router2(config-if)#ip access-group 1 in<BR>router2(config-if)#exit<BR>router2(config)#exit<BR>router2#</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;使用show running-config 后可看到</P><br/><P>ip classless<BR>access-list 1 permit 192.168.1.0 0.0.0.255<BR>snmp-server community public RO<BR>!</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;这时从PC2(IPAdress 192.168.1.2)上访问IIS Server，服务被接受，访问正常。如果从PC1(IPAdress 192.168.2.2)上访问IIS Server，服务被觉得，无法正常访问。</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;总之，IIS在Intranet中提供了很重要的信息共享服务，但是在提供IIS服务时如果只是对其进行基本设置，提供匿名访问的话可能会带来许多安全性的问题，所以需要IIS Server的访问安全性做合理的规划，如访问身份验证和IP地址及域名访问控制，其中访问控制可以在IIS Server<A style="COLOR: #000000" title=服务器 href="http://server.it168.com/" target=_blank>服务器</A>本身或者在路由器中做ACL的访问控制表进行安全访问控制。此外IIS还提供了虚拟网站和虚拟目录，虚拟网站可以将一个IIS服务器配置成多个WEB站点。<BR></P><br/>Tags - <a href="http://www.zhanghaijun.com/tags/iis/" rel="tag">iis</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/478/</link>
<title><![CDATA[IIS配置及安全访问控制策略详解-上]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[安全相关]]></category>
<pubDate>Wed, 05 Nov 2008 05:31:38 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/478/</guid> 
<description>
<![CDATA[ 
	IIS(Internet 信息服务)是在企业网或者校园网内部提供信息服务的重要工具，目前基于IIS的应用相当广泛，但大多数都在windows操作系统下局域网内部或同一子网内来实现IIS服务，而在不同操作系统之间，在广域网或者不同子网间的应用较少，而且介绍这方面应用的文章也很少，本文旨在介绍不同的操作系统间(Red Hat Linux 9和windows 2000 server)，不同的子网间通过IIS所提供的服务访问来实现资源共享和访问。 <br/><P><STRONG>一、 实验网络环境及配置</STRONG></P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133110994.jpg"></P><br/><P align=center>图1 拓扑结构</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;实验环境：锐捷R2624路由器(router2)一台 、锐捷R2624路由器(router1)一台、锐捷S1926 G+交换机一台及PC机3台，服务器1台。</P><br/><P><STRONG>1．在Router 2上配置各端口的IP地址及路由RIP协议后，配置信息如下：</STRONG></P><br/><P>router2#show ip int brief</P><br/><P>Interface&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP-Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK? Method Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Protocol<BR>FastEthernet0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;172.16.1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YES NVRAM&nbsp;&nbsp;up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up<BR>FastEthernet1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unassigned&nbsp;&nbsp;&nbsp;&nbsp; YES unset&nbsp;&nbsp;administratively down down<BR>FastEthernet2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unassigned&nbsp;&nbsp;&nbsp;&nbsp; YES unset&nbsp;&nbsp;administratively down down<BR>FastEthernet3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unassigned&nbsp;&nbsp;&nbsp;&nbsp; YES unset&nbsp;&nbsp;administratively down down<BR>Serial0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.1.1.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YES NVRAM&nbsp;&nbsp;up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up<BR>Serial1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unassigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YES unset&nbsp;&nbsp;down&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; down</P><br/><P>router2#show ip route</P><br/><P>Codes: C - connected, S - static,&nbsp;&nbsp;R - RIP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; O - OSPF, IA - OSPF inter area<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E1 - OSPF external type 1, E2 - OSPF external type 2</P><br/><P>Gateway of last resort is not set</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp; 10.0.0.0/24 is subnetted, 1 subnets<BR>C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.1.1.0 is directly connected, Serial0<BR>R&nbsp;&nbsp;&nbsp;&nbsp;192.168.1.0/24 [120/1] via 10.1.1.1, 00:00:18, Serial0<BR>R&nbsp;&nbsp;&nbsp;&nbsp;192.168.2.0/24 [120/1] via 10.1.1.1, 00:00:18, Serial0<BR>&nbsp;&nbsp;&nbsp;&nbsp; 172.16.0.0/24 is subnetted, 1 subnets<BR>C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 172.16.1.0 is directly connected, FastEthernet0</P><br/><P><STRONG>2．在Router 1上配置各端口的IP地址及路由RIP协议后，配置信息如下：</STRONG></P><br/><P>router1#show ip int brief</P><br/><P>Interface&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP-Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK? Method Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Protocol<BR>FastEthernet0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;192.168.1.1&nbsp;&nbsp;&nbsp;&nbsp; YES NVRAM&nbsp;&nbsp;up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up<BR>FastEthernet1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;192.168.2.1&nbsp;&nbsp;&nbsp;&nbsp; YES NVRAM&nbsp;&nbsp;up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up<BR>FastEthernet2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unassigned&nbsp;&nbsp;&nbsp;&nbsp; YES unset&nbsp;&nbsp;administratively down down<BR>FastEthernet3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unassigned&nbsp;&nbsp;&nbsp;&nbsp; YES unset&nbsp;&nbsp;administratively down down<BR>Serial0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.1.1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YES NVRAM&nbsp;&nbsp;up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;up<BR>Serial1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unassigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YES unset&nbsp;&nbsp;down&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;down</P><br/><P>router1#show ip route</P><br/><P>Codes: C - connected, S - static,&nbsp;&nbsp;R - RIP<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; O - OSPF, IA - OSPF inter area<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E1 - OSPF external type 1, E2 - OSPF external type 2</P><br/><P>Gateway of last resort is not set</P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp; 10.0.0.0/24 is subnetted, 1 subnets<BR>C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.1.1.0 is directly connected, Serial0<BR>C&nbsp;&nbsp;&nbsp;&nbsp;192.168.1.0/24 is directly connected, FastEthernet0<BR>C&nbsp;&nbsp;&nbsp;&nbsp;192.168.2.0/24 is directly connected, FastEthernet1<BR>R&nbsp;&nbsp;&nbsp;&nbsp;172.16.0.0/16 [120/5] via 10.1.1.2, 00:00:16, Serial0</P><br/><P><STRONG>3．在锐捷S1926G+以太网交换机上配置</STRONG></P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP Address. . . . . . . . . . . . : 172.16.1.254<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subnet Mask . . . . . . . . . . . : 255.255.255.0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default Gateway . . . . . . . . . : 172.16.1.1</P><br/><P><STRONG>4．IIS SERVER服务器及各客户端PC机的配置如表1</STRONG></P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133111484.jpg"></P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;此时，各客户端PC机与IISserver间能相互Ping通，企业网络服务实验模型建立完毕。</P><br/><P><STRONG>二、IIS的安装与基本配置</STRONG></P><br/><P><STRONG>1． IIS的安装步骤</STRONG></P><br/><P>(1).开始——&gt;设置——&gt;控制面板——&gt;添加/删除程序——&gt;windows组件，打开“windows组件向导”，如图2</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133113526.jpg"></P><br/><P align=center>图2</P><br/><P>(2)选中图2中的internet 信息服务(IIS)，查看详细信息，将文件传输协议(FTP)服务器项的复选框选中，如图3</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133114836.jpg"></P><br/><P align=center>图3</P><br/><P>(3)单击确定，接下来，插入windows 2000 server安装光盘，IIS安装完毕。</P><br/><P>(4)通过开始——&gt;程序——&gt;管理工具——&gt;Internet信息服务，打开控制台，启动IIS服务，如图4</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133115685.jpg"></P><br/><P align=center>图4</P><br/><P><STRONG>2．IIS的基本配置</STRONG></P><br/><P><STRONG>(1) 配置Web站点:</STRONG></P><br/><P>步骤○1选中图4中的默认Web站点，在右键菜单中选中属性，打开默认Web站点属性对话框。配置IP地址为当前IISserver的主机地址172.16.1.2，如图5</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133115634.jpg"></P><br/><P align=center>图5</P><br/><P>步骤○2选择“主目录”选项卡，配置提供Web服务的目录，实验时，可使用其默认选项，即<BR>c:&#92;inetpub&#92;wwwroot，如图6</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133115760.jpg"></P><br/><P align=center>图6</P><br/><P>步骤○3打开“目录安全性”选项卡，对访问帐户进行设置，如图7</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133116789.jpg"></P><br/><P align=center>图7</P><br/><P>步骤○4打开图7中匿名访问和验证控制下的编辑，将“匿名访问”前的复选框选中，在没有特殊要求时，一般使用匿名访问，该项如不选中，今后在访问Web服务时将需要通过身份验证后才可访问。如图8</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133116766.jpg"></P><br/><P align=center>图8</P><br/><P>步骤○5打开“文档”选项卡，配置Web站点的默认主页文件，实例中通过添加文件Index.htm文档作为web站点的启动文档，如图9，至此，Web服务配置完毕。</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133118167.jpg"></P><br/><P align=center>图9</P><br/><P><STRONG>(2) 配置FTP站点:</STRONG></P><br/><P>步骤○1选中图4中的默认FTP站点，在右键菜单中选中属性，打开默认FTP站点属性对话框。配置IP地址为当前IISserver的主机地址172.16.1.2，如图10</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133118502.jpg"></P><br/><P align=center>图10</P><br/><P>步骤○2打开“安全帐号”选项卡，在没有特殊要求时将“允许匿名连接”前的复选框选中，如图11</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133119225.jpg"></P><br/><P align=center>图11</P><br/><P>步骤○3打开“消息”选项卡，输入FTP站点的登陆信息，此消息将在访问者登陆后可见，一般为欢迎信息或者为本FTP站点的功能及材料的简介。如图12</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133119188.jpg"></P><br/><P align=center>图12</P><br/><P>步骤○4打开“主目录”选项卡，设置FTP站点使用的主目录，在实例中使用默认路径即c:&#92;inetpub&#92;ftproot,如果此FTP站点还需要给访问者提供上传服务，则应在“写入”复选框前选中，否则使用默认设置。如图13</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133119572.jpg"></P><br/><P align=center>图13</P><br/><P>步骤○5打开“目录安全性”选项卡，为使得当前FTP站点为所有的客户端提供FTP服务，在本实例中使用默认配置，如图14，至此，FTP站点配置完毕。</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133120130.jpg"></P><br/><P align=center>图14</P><br/><P><STRONG>三、IISserver中的IIS服务(Web、Ftp服务)配置后进行测试</STRONG></P><br/><P><STRONG>1． 在客户机PC1和PC2进行测试，PC1和PC2上均使用Windows 2000操作系统。</STRONG></P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;PC1和PC2的配置如表1：</P><br/><P>步骤○1验证PC1和PC2的属性配置，可通过开始——&gt;运行——&gt;CMD，打开命令提示符MS-DOS，在MSDOS下输入IPCONFIG。</P><br/><P>PC1：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection-specific DNS Suffix&nbsp;&nbsp;. :<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP Address. . . . . . . . . . . . : 192.168.1.2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subnet Mask . . . . . . . . . . . : 255.255.255.0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default Gateway . . . . . . . . . : 192.168.1.1</P><br/><P>PC2：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection-specific DNS Suffix&nbsp;&nbsp;. :<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP Address. . . . . . . . . . . . : 192.168.2.2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subnet Mask . . . . . . . . . . . : 255.255.255.0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default Gateway . . . . . . . . . : 192.168.2.1</P><br/><P>步骤○2在PC1和PC2中打开Internet Explorer浏览器，输入WEB站点的IP地址<A href="http://172.16.1.2/"><FONT color=#0000ff>http://172.16.1.2</FONT></A>，测试通过，访问成功后如图15</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133120431.jpg"></P><br/><P align=center>图15</P><br/><P>步骤○3在PC1和PC2中打开Internet Explorer浏览器，输入FTP站点的IP地址<A href="ftp://172.16.1.2/"><FONT color=#0000ff>ftp://172.16.1.2</FONT></A>，注意在访问Web站点和访问FTP站点时，访问方式的不同(即Http和Ftp方式的不同)。测试通过，访问成功后如图16</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133120107.jpg"></P><br/><P align=center>图16</P><br/><P><STRONG>2． 在客户机PC4进行测试，PC4采用Red Hat Linux 9操作系统。</STRONG></P><br/><P>&nbsp;&nbsp;&nbsp;&nbsp;PC4的配置如表1：</P><br/><P>步骤○1验证PC4的属性配置，可通过开始——&gt;系统工具——&gt;终端，打开<A href="mailto:root@localhost"><FONT color=#0000ff>root@localhost</FONT></A>窗口，输入ifconfig eth0:</P><br/><P>[root@localhost root]# ifconfig eth0</P><br/><P>eth0&nbsp;&nbsp; Link encap:Ethernet&nbsp;&nbsp;HWaddr 00:0D:61:AA:FB:A5<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inet addr:172.16.1.3&nbsp;&nbsp;Bcast:172.16.1.255&nbsp;&nbsp;Mask:255.255.255.0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UP BROADCAST RUNNING MULTICAST&nbsp;&nbsp;MTU:1500&nbsp;&nbsp;Metric:1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RX packets:16139 errors:0 dropped:0 overruns:0 frame:0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TX packets:1909 errors:0 dropped:0 overruns:0 carrier:0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collisions:0 txqueuelen:100<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RX bytes:1201296 (1.1 Mb)&nbsp;&nbsp;TX bytes:1179219 (1.1 Mb)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interrupt:16 Base address:0xb000</P><br/><P>步骤○2打开Red Hat Linux 9的Mozilla浏览器，输入<A href="http://172.16.1.2/"><FONT color=#0000ff>http://172.16.1.2</FONT></A>，访问正常。</P><br/><P>步骤○3使用Red Hat Linux 9的gFtp来进行访问FTP服务，访问正常，如图17</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133121371.jpg"></P><br/><P align=center>图17</P><br/><P>步骤○4使用Red Hat Linux 9中的终端来对FTP服务器进行测试，访问正常，如图18</P><br/><P><IMG border=0 src="/attachment/2008-11/20081105133121968.jpg"></P><br/><P align=center>图18</P><br/><P align=left>&nbsp;&nbsp;&nbsp;&nbsp;限于篇幅，此文拆成上下文刊发，下篇将介绍“IIS的高级服务配置及测试、访问控制配置、远程管理Web站点以及在路由上做访问控制”等内容，请见：IIS服务配置及安全访问控制策略详解（下）。</P><br/>Tags - <a href="http://www.zhanghaijun.com/tags/iis/" rel="tag">iis</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post/169/</link>
<title><![CDATA[ASP.NET虚拟主机的重大安全隐患]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[安全相关]]></category>
<pubDate>Fri, 01 Jun 2007 12:42:13 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post/169/</guid> 
<description>
<![CDATA[ 
	说明：本文中所有程序均在Windows 2000 Server中文版 + SP2上编译运行无误<br/>开发环境：.Net 框架1.0 Version 1.0.3705<br/><br/>　　一、ASP.NET虚拟主机存在的重大隐患<br/><br/>　　我曾经在WWW.BRINKSTER.COM申请了一个免费的ASP.NET空间，上传了两个程序，其中一个查看目录和文件的程序证明我的判断：ASP共享空间服务器存在的一个安全问题，在 ASP+ 共享空间服务器中依然存在并且变得更加难以防范！通过这个程序我可以浏览所有用户的ASP+程序，可以查看服务器的系统日志……，当然，如果我想删除什么的话也不会有什么问题。为了让大家更清楚地了解这一问题，我们有必要简单介绍一下ASP中就已经存在的这一问题。<br/><br/>　　ASP中常用的标准组件：FileSystemObject，这个组件为 ASP 提供了强大的文件系统访问能力，可以对服务器硬盘上的任何有权限的目录和文件进行读写、删除、改名等操作。FSO对象来自微软提供的脚本运行库scrrun.dll中。<br/><br/>　　使用下面的代码就可以在ASP中创建一个FSO对象：<br/><br/>　　Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)<br/><br/>　　我们使用fso对象包含的属性和方法，如Drive、Drives、Folder、Floders、File、Files等对服务器的磁盘、目录和文件进行读、写、删除等操作。这一强大的文件系统访问能力给ASP共享空间提供者带来了严重的安全问题，很多ASP空间的管理员都删除此组件或将这个组件改名以避免用户使用这一标准组件。删除组件或组件改名确实是一个简单的方法并且也很有效，但是却使广大用户无法使用它的强大的功能。网络上还有一种看起来很美的方案，它允许用户使用 FileSystemObject 组件又不影响服务器的安全，即对每一个用户都设置一个独立的服务器用户和单个目录的操作权限。但是这种方法是有问题的。因为ASP和ASP.NET中在这方面的问题十分类似，所以我们将在ASP.NET的相应解决办法部分详加说明。<br/><br/>　　在ASP.NET中我们发现这一问题仍然存在，并且变得更加难以解决。这是因为.NET中关于系统IO操作的功能变得更加强大，而使这一问题更严重的是ASP.NET所具有的一项新功能，这就组件不需要象ASP那样必须要使用regsvr32来注册了，只需将Dll类库文件上传到bin目录下就可以直接使用了。这一功能确实给开发ASP.NET带来了很大的方便，但是却使我们在ASP中将此dll删除或者改名的解决方法失去效用了，防范此问题就变得更加复杂。在讨论解决方案之前，我们先来看一下怎么来实现上述的危险的功能。<br/><br/>二、文件系统操作示例<br/><br/>　　在我们编写代码之前，有必要了解一下我们需要用到的几个主要的类。这几个类都在System.IO名称空间下，System.IO 名称空间包含允许在数据流和文件上进行同步和异步读写的类。<br/><br/>　　在整个应用程序的开始部分我们需要了解一下服务器的系统信息，这就需要用到System.Environment类，该类提供有关当前环境和平台的信息以及操作它们的方法。我们通过System.Environment类可以得到系统的当前目录和系统目录，这可以使我们更快的发现几个关键的目录；我们还可以通过获取运行当前进程的用户名来帮助我们了解ASP.NET程序运行所使用的用户，进一步设置用户权限以避免这一安全问题。<br/><br/>　　我们还要使用System.IO名称空间的其他几个类是：<br/><br/>　　System.IO.Directory：提供用于创建、移动和枚举通过目录和子目录的静态方法的类<br/><br/>　　System.IO.File：提供用于创建、复制、删除、移动和打开文件的静态方法的类<br/><br/>　　System.IO.FileInfo：提供创建、复制、删除、移动和打开文件的实例方法的类<br/><br/>　　System.IO.StreamReader：实现一个 TextReader，使其以一种特定的编码从字节流中读取字符。<br/><br/>　　每个我们所使用的类的属性和方法的具体用法我们将以代码注释的方式在程序中加以说明。<br/><br/>　　System.IO名称空间在 .NET FRAMEWORK提供的mscorlib.dll中，在使用VS.Net编程之前需要将此Dll引用到此项目中。<br/><br/>　　我们所编写的程序都使用了Codebehind方式，即每一个aspx程序都有一个对应的aspx.cs程序，aspx程序中只是写与页面显示相关的代码，所有逻辑实现的代码都放在相应的aspx.cs文件中，这样就可以更好得做到显示与逻辑的分离。由于我们的目的不是讨论Codebehind技术，所以就不在对此多加讨论了。<br/><br/>　　在这篇文章里，我们只介绍几个主要的类及其关键方法的用法，详细程序请查看附带的源代码。<br/><br/>　　程序一：显示服务器的当前信息和全部逻辑驱动器的名称的程序listdrivers.aspx<br/><br/>　　主要方法1：我们使用 GetSysInf() 方法来得到服务器的当前环境和平台的信息<br/><br/>//获取系统信息的方法，此方法在listdrivers.aspx.cs文件中public void GetSysInf () &#123;//获取操作系统类型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;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//计算得到系统启动后经过的分钟数qTick /= 60000;//获取机器名qMachine = Environment.MachineName;//获取运行当前进程的用户名qUser = Environment.UserName;/*检索此计算机上格式为&quot;＜驱动器号＞:&quot;的逻辑驱动器的名称，返回字符串数组，这是下一步操作的关键所在*/achDrives = Directory.GetLogicalDrives();//获取此字符串数组的维数，确定有多少个逻辑驱动器nNumOfDrives = achDrives.Length;&#125;<br/> <br/><br/><br/><br/>　　系统信息不需要进行操作，我们简单的用asp:Label将他们显示出来就行了。逻辑驱动器的个数在不同的服务器上是不定的，所以用不定长数组保存逻辑驱动器的名称，而且逻辑驱动器的名称也是我们下一步浏览目录和文件的基础，故我们采用了数据网格DataGrid来显示和处理它。<br/><br/>　　显示和处理逻辑驱动器名称的DataGrid的代码（代码在listdrivers.aspx文件）：<br/><br/><br/>＜asp:DataGrid id=&quot;DriversGrid&quot; runat=&quot;server&quot; AutoGenerateColumns=&quot;false&quot;＞＜Columns＞＜asp:BoundColumn HeaderText=&quot;ID&quot; DataField=&quot;ID&quot; /＞＜asp:BoundColumn HeaderText=&quot;磁盘名&quot; DataField=&quot;Drivers&quot; /＞＜asp:HyperLinkColumnHeaderText=&quot;详细信息&quot; DataNavigateUrlField=&quot;Drivers&quot; DataNavigateUrlFormatString=&quot;listdir.aspx?dir=&#123;0&#125;&quot; DataTextField=&quot;Detail&quot; Target=&quot;_new&quot; /＞＜/Columns＞＜/asp:DataGrid＞<br/> <br/><br/>　　前两个BoundColumn列都是显示序号和实际逻辑驱动器名称的，需要说明的是第三列，我们在进入各个逻辑驱动器显示目录和文件之前需要将所选择的逻辑驱动器的名称传递到显示目录的文件去，所以需要一个特殊的超级链接行HyperLinkColumn,我们将DataNavigateUrlField设置为数据源中要绑定到 HyperLinkColumn 中的超级链接的 URL 的字段，在此即逻辑驱动器名称。然后将DataNavigateUrlFormatString设置为当 URL 数据绑定到数据源中的字段时，此HyperLinkColumn中的超级链接的 URL 的显示格式，即要链接到的下一级处理页面，在此为listdir.aspx?dir=&#123;用户点击行的逻辑驱动器名称&#125;<br/>创建数据源的代码(代码在listdrivers.aspx.cs文件中)：<br/><br/>//通过此方法返回一个集合形式的数据视图DataViewICollection CreateDataSource() &#123;//定义内存中的数据表DataTableDataTable dt = new DataTable();//定义DataTable中的一行数据DataRowDataRow dr;/*向DataTable中增加一个列，格式：DataColumn(&quot;Column&quot;, type)Column为数据列的名字，type为数据列的数据类型*/dt.Columns.Add(new DataColumn(&quot;ID&quot;, typeof(Int32)));dt.Columns.Add(new DataColumn(&quot;drivers&quot;, typeof(string)));dt.Columns.Add(new DataColumn(&quot;detail&quot;, typeof(string)));//使用for循环将逻辑驱动器的名称以行的形式添加到数据表DataTable中for (int i = 0; i ＜ nNumOfDrives; i++) &#123;//定义新行dr = dt.NewRow();//对行中每列进行赋值，注意要与上边定义的DataTable的行相对应dr[0] = i; //循环生成的序号dr[1] = achDrives.ToString(); //逻辑驱动器的名称dr[2] = &quot;查看详情&quot;;//向DataTable中添加行dt.Rows.Add(dr);&#125;//根据得到的DataTable生成自定义视图DataViewDataView dv = new DataView(dt);//返回得到的视图DataViewreturn dv;&#125;<br/> <br/><br/>　　我们通过这个方法得到了一个包含所有我们需要的数据的数据视图DataView，我们只需要在此aspx页的Page_Load方法中将此数据视图绑定到DataGrid上就可以了。<br/><br/>　　数据绑定代码（代码在listdrivers.aspx.cs文件中）：<br/><br/>/* 设置DataGrid的数据源DataSource为我们从CreateDataSource()方法得到的数据视图DataView */DriversGrid.DataSource = CreateDataSource();//将此DataGrid进行数据绑定DriversGrid.DataBind();<br/> <br/><br/>　　通过上边介绍的几种主要方法我们就实现了获取系统信息和显示所有逻辑驱动器名称的功能，并且可以通过相应的链接进入下一个显示目录和文件名的程序listdir.aspx显示该逻辑驱动器下的所有目录和文件。<br/><br/><br/><br/>程序二：显示目录中所有子目录和文件的程序listdir.aspx<br/><br/>　　目录下有子目录和文件两种形式，必须分别对待。我们调用此程序本身对子目录进行列表显示，而文件我们需要调用showfile.aspx程序对文件的属性和内容进行显示。并且两者还有不同的删除方法，所以我们在这里设置了两个DataGrid，两个DataTable，两个DataView，分别处理和显示目录和文件。<br/><br/>　　显示和处理目录和文件的DataGrid的代码（代码在listdir.aspx文件）：<br/><br/>　　显示目录或文件的序号和名称的数据列类似于listdrivers.aspx程序中的相应代码,这里就不再重复了。对于子目录和文件分别有各自的处理页面，所以需要导航到两个不同的页面，对于子目录，我们继续使用listdir.aspx程序对其下的子目录和文件进行列表显示：<br/><br/>＜asp:HyperLinkColumn DataNavigateUrlField=&quot;DirName&quot;DataNavigateUrlFormatString=&quot;listdir.aspx?dir=&#123;0&#125;&quot;DataTextField=&quot;DirDetail&quot; HeaderText=&quot;详细信息&quot;Target=&quot;_new&quot;/＞<br/><br/>对于文件，我们使用showfile.aspx程序显示其属性和内容：<br/><br/>＜asp:HyperLinkColumn DataNavigateUrlField=&quot;FileName&quot;DataNavigateUrlFormatString=&quot;showfile.aspx?file=&#123;0&#125;&quot; DataTextField=&quot;FileDetail&quot; HeaderText=&quot;详细信息&quot; Target=&quot;_new&quot; /＞<br/> <br/><br/>　　在两个DataGrid（DirGrid，FileGrid）中我们分别设置了两个HyperLinkColumn列来导航到不同的处理页面。<br/><br/>　　在两个DataGrid中我们都使用了一个删除的按钮列：<br/><br/>＜asp:ButtonColumn HeaderText=&quot;删除&quot; Text=&quot;删除&quot; CommandName=&quot;Delete&quot;/＞<br/> <br/><br/>　　由于添加、更新、删除功能列都是DataGrid的默认模板列，所以可以在Vs.net中通过DataGrid的属性生成器自动添加此列。<br/><br/>　　获取上一页面所传递来的参数的代码：<br/><br/>　　因为在下面产生数据源的方法中需要使用由上一个页面传递过来的参数来确定目录和文件的名称，所以在页面的Page_Load方法里使用了下列代码：<br/><br/>strDir2List = Request.QueryString[&quot;dir&quot;];<br/> <br/><br/>　　字符串strDir2List即传过来的目录名或文件名。<br/><br/>　　因为我们使用了两个DateGrid，就需要进行两次数据绑定,就有两个不同的生成数据源的方法。<br/><br/>　　生成目录数据网格（DirGrid）数据源的方法：<br/><br/>//通过此方法返回一个集合形式的数据视图DataView，用来初始化子目录的DataGridICollection CreateDataSourceDir() &#123;dtDir = new DataTable();DataRow dr;//向DataTable中添加新的数据列，共四列dtDir.Columns.Add(new DataColumn(&quot;DirID&quot;, typeof(Int32)));dtDir.Columns.Add(new DataColumn(&quot;DirName&quot;, typeof(string)));dtDir.Columns.Add(new DataColumn(&quot;DelDir&quot;, typeof(string)));dtDir.Columns.Add(new DataColumn(&quot;DirDetail&quot;, typeof(string))); //根据传入的参数（目录名）得到此目录下所有子目录名的字符串数组string [] DirEntries = Directory.GetDirectories(strDir2List);//使用foreach循环可以对未知长度的数组进行遍历循环foreach(string DirName in DirEntries)&#123;dr = dtDir.NewRow();dr[0] = i;//序号dr[1] = DirName;//文件夹名称 dr[3] = &quot;删除&quot;;dr[3] = &quot;查看详情&quot;;dtDir.Rows.Add(dr);i++; &#125;DataView dvDir = new DataView(dtDir);//返回得到的数据视图return dvDir;&#125;生成文件数据网格（FileGrid）数据源的方法：//通过此方法返回一个集合形式的数据视图DataView，用来初始化文件的DataGridICollection CreateDataSourceFile() &#123;dtFile = new DataTable();DataRow dr;dtFile.Columns.Add(new DataColumn(&quot;FileID&quot;, typeof(Int32)));dtFile.Columns.Add(new DataColumn(&quot;FileName&quot;, typeof(string)));dtFile.Columns.Add(new DataColumn(&quot;DelFile&quot;, typeof(string)));dtFile.Columns.Add(new DataColumn(&quot;FileDetail&quot;, typeof(string))); //根据传入的参数（目录名）得到此目录下所有文件名的字符串数组string [] FileEntries = Directory.GetFiles(strDir2List);foreach(string FileName in FileEntries)&#123;dr = dtFile.NewRow();dr[0] = i;dr[1] = FileName; dr[2] = &quot;删除&quot;;dr[3] = &quot;查看详情&quot;;dtFile.Rows.Add(dr);i++;&#125;dvFile = new DataView(dtFile);return dvFile;&#125;<br/> <br/><br/>　　我们编程实现了两个DataSource只需在页面的Page_Load方法里对两个DataGrid进行数据绑定即可将得到的DataTable中的数据显示在aspx页面的DataGrid上。<br/><br/>　　数据绑定代码：<br/><br/>//对子目录数据列表DirGrid进行数据源定义和数据绑定DirGrid.DataSource = CreateDataSourceDir();DirGrid.DataBind(); //对文件数据列表FileGrid进行数据源定义和数据绑定FileGrid.DataSource = CreateDataSourceFile();FileGrid.DataBind(); <br/> <br/><br/>　　通过我们上边介绍的主要方法，我们实现了对某个逻辑驱动器或目录中的所有子目录和文件进行了列表显示，并且可以根据显示结果更进一步的浏览子目录或者查看文件的属性和内容提要。浏览子目录仍然是通过listdir.aspx这个程序，没有任何子目录级别要求，没有目录深度限制。<br/>删除子目录和文件的主要方法和代码：<br/><br/>　　在删除子目录时，我们需要用到Directory.Delete (string,bool)方法，此方法有两种：<br/><br/>　　1．public static void Delete(string);<br/><br/>　　从指定路径删除空目录。<br/><br/>　　2．public static void Delete(string, boolean);<br/><br/>　　删除指定的目录并（如果指示）删除该目录中的任何子目录，将boolean设置为true的话，则删除此目录下的所有子目录和文件，否则将boolean设置为false。<br/><br/>　　在这里我们使用了第二种方法，如果选择删除的话，将删除此目录下的所有子目录和文件。<br/><br/>　　注意：Directory 类的所有方法都是静态的，因而无需具有目录Directory的实例就可被调用。<br/><br/>/*实现删除子目录的方法，此方法为VS.NET自动添加，注意DataGridCommandEventArgs e为DirGrid中 CommandName=&quot;Delete&quot; 的ButtonColumn的事件，通过此事件，我们可以得到是那一行的ButtonColumn按钮列被点击，进而确定我们需要删除的子目录的名称*/private void DirGrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)&#123;/*定义一个单元格，e.Item为此事件所发生行的所有项目，e.Item.Cells[1]为整个行的第二个单元格的内容,在此DataGrid中为子目录的名称*/TableCell ItemCell = e.Item.Cells[1];//得到此子目录的名称的字符串string item = ItemCell.Text;//删除此子目录Directory.Delete(item,true);//删除后进行数据绑定以更新数据列表DirGrid.DataBind();&#125;<br/> <br/><br/>　　在删除文件时，我们需要用到File.Delete(string path);<br/><br/>　　注意：File 类的所有方法都是静态的，因而无需具有目录的实例就可被调用。<br/><br/>private void FileGrid_DeleteCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e) &#123;TableCell ItemCell = e.Item.Cells[1];//得到此文件名称的字符串string item = ItemCell.Text;//删除此文件File.Delete(item);//删除后进行数据绑定以更新数据列表DirGrid.DataBind();&#125;<br/> <br/><br/>　　通过上边的主要方法我们在页面上实现了一个删除某一个子目录或者文件的功能，此功能在测试时需要慎重使用，一旦删除无法通过常规方法恢复。其他如目录或文件改名、修改内容等方法都可以在此程序基础上添加相应的功能，实现方法也很简单。各位爱好者可以通过添加相应功能，使之扩充为一个基于Web的服务器文件管理系统。我们也可以由此看到这个程序的危害性，一个没有对此安全隐患采取防范措施的服务器的文件系统就都暴露在了使用此程序的用户面前。<br/>程序三：显示文件属性和内容的程序showfile.aspx<br/><br/>　　在显示属性和内容时需要用到的两个主要的类：<br/><br/>　　System.IO.FileInfo：提供创建、复制、删除、移动和打开文件的实例方法，并且帮助创建 FileStream 对象。<br/><br/>　　System.IO.StreamReader：实现一个 TextReader，使其以一种特定的编码从字节流中读取字符。除非另外指定，StreamReader的默认编码为 UTF-8，而不是当前系统的 ANSI 代码页。UTF-8 可以正确处理 Unicode 字符并在操作系统的本地化版本上提供一致的结果。<br/><br/>　　Showfile.aspx页面主要代码：<br/><br/>＜asp:Label id=&quot;FileDetail&quot; runat=&quot;server&quot;/＞<br/> <br/><br/>　　我们只是将文件的属性信息和部分内容显示在此Label上。所以没有其他复杂的代码。<br/><br/>　　获取文件信息和内容的主要代码都在Page_Load方法中（代码在showfile.aspx.cs文件中）：<br/><br/>//接收传入的参数，确定需要操作的文件名称strFile2Show = Request.QueryString[&quot;file&quot;];//根据文件名实例化一个FileInfo对象FileInfo fi = new FileInfo(strFile2Show);FileDetail.Text = &quot;文件名：&quot;;FileDetail.Text += strFile2Show+&quot;＜br＞&quot;;FileDetail.Text += &quot;文件大小&quot;;//获得文件的大小，然后变换单位为KBFileDetail.Text += (fi.Length/1024).ToString()+&quot;K＜br＞&quot;;FileDetail.Text += &quot;创建文件时间：&quot;;//获得文件的创建日期FileDetail.Text += fi.CreationTime.ToString();FileDetail.Text += &quot;上次访问时间：&quot;;//获得文件的上次访问日期FileDetail.Text += fi.LastAccessTime.ToString()+&quot;＜br＞&quot;;FileDetail.Text += &quot;上次写入时间：&quot;;//获得文件的上次写入日期FileDetail.Text += fi.LastWriteTime.ToString()+&quot;＜br＞&quot;;//实例化一个StreamReader对象，用于读取此FileInfo的内容StreamReader FileReader = fi.OpenText();//定义一个长度为1000的字符数组作为缓冲区char[] theBuffer = new char[1000];/*ReadBlock方法：从当前流中读取最大数量的字符并从索引开始将该数据写入缓冲区。参数：char[] buffer：方法返回时，包含指定的字符数组int index：buffer 中开始写入的位置int count：最多读取的字符数*/int nRead = FileReader.ReadBlock(theBuffer,0,1000);FileDetail.Text += new String(theBuffer,0,nRead);//关闭此 StreamReader 并释放与之关联的所有系统资源FileReader.Close();<br/> <br/><br/>　　到目前为止，我们实现了一个简单的web页面的服务器磁盘管理应用程序，可以查看、删除目录和文件。如果需要修改文件、新建文件和文件夹等功能，只需稍作修改，添加上相应的代码就可以。由于我们只是通过这个程序说明服务器中存在的安全隐患，所以在这里就不再实现这些功能了。<br/><br/>　　通过这三个简单的程序，我想大家已经能够清楚的认识到这一漏洞的危害性了，如果我们不加防范的话，其他用户的程序就能被恶意使用此功能的用户查看、删除，服务器的系统日志、系统文件也没有任何安全可言了。<br/><br/><br/><br/> <br/><br/>解决方案<br/><br/>　　将FSO组件和删除或改名的方式我们不再过多的加以说明了，这一类的解决方法网络上已经有很多文章介绍了。<br/><br/>　　另外还有一种关于ASP的FSO组件漏洞的相应解决方案，即根据用户设置权限。在IIS里，可以设置每个站点的匿名访问所使用的帐号，默认为IUSR_ HostName，这一方法的原理就是针对每一个共享主机用户分别设置一个Windows帐号，如IUSR_HostName1，IUSR_ HostName 2等，然后将每一个用户限制在各自的Web目录下。<br/><br/><br/>　　我们仔细的研究一下这种方案，可以发现这个方案无法真正实现安全。因为系统运行ASP时并不是使用的IUSR_ HostName帐号，而是IWAM_ HostName帐号,就象在ASP.NET中使用的用户ASPNET一样。也就是说每个ASP程序所拥有的权限并不是IUSR_ HostName的权限，而是IWAM_HostName用户的权限。这样的方法无法真正的将每个共享主机用户的文件系统访问权限限制在各自的虚拟站点中，每个用户仍然可以访问别人的代码。所以这种方法在ASP.NET中无法真正实现用户之间的安全性。<br/><br/>　　在ASP.NET中相应的运行ASP.NET程序的帐号为ASPNET，和上面所说的ASP中的解决方案类似，我们只能限制此用户不能访问系统目录等其他目录，但是无法防止用户访问其他共享主机用户的程序代码，无法从根本上杜绝这种问题。<br/><br/>　　那么，有没有真正的解决方案了呢？<br/><br/>　　有！这就是.NET Framework 的新特性――代码访问安全性<br/><br/>　　为了更好的理解这一问题的解决方法,我们需要先介绍一下.NET Framework的安全机制。然后再结合我们的实际问题来讨论解决方案。<br/><br/>　　为了解决安全问题，.NET Framework提供了一种称为代码访问安全性的安全机制。代码访问安全性允许根据代码的来源和代码的标识等属性将代码设置为不同级别的信任代码,同时还详细定义了不同级别的对代码的信任，从而可以详细的对代码设置各自的权限而不是将最大权限赋给所有的代码。使用代码访问安全性，可以减小恶意代码或各种错误的代码带来的严重的系统安全性问题的可能性。您可以设置允许代码执行的一组操作，同样可以设置永远不允许代码执行的一组操作。<br/><br/>　　实现代码访问安全性的基础就是JIT（运行时编译）和IL（中间代码）。所以所有以公共语言运行库为目标的托管代码都会受益于代码访问安全性。非托管代码则无法完全使用代码访问安全性。<br/><br/><br/>下面我们将介绍一下代码访问安全性实现的各种功能：<br/><br/>　　代码访问安全性是控制代码对受保护资源和操作的访问权限的一种机制。在 .NET Framework中，代码访问安全性执行下列功能： <br/><br/>　　· 定义权限和权限集，它们表示访问各种系统资源的权限。 <br/><br/>　　· 使管理员能够通过将权限集与代码组关联来配置安全策略。 <br/><br/>　　· 使代码能够请求运行所需权限以及其他一些有用的权限，以及指定代码绝对不能拥有哪些权限。 <br/><br/>　　· 根据代码请求的权限和安全策略允许的操作，向加载的每个程序集授予权限。 <br/><br/>　　· 使代码能够要求其调用方拥有特定的权限。 <br/><br/>　　· 使代码能够要求其调用方拥有数字签名，从而只允许特定组织或特定站点的调用方来调用受保护的代码。<br/><br/>　　· 通过将调用堆栈上每个调用方所授予的权限与调用方必须拥有的权限相比较，加强运行时对代码的限制。<br/><br/>　　为了确定是否已授予代码相应的权限，.NET运行库的安全系统将遍历整个调用堆栈，将每个调用方所授予的权限与目前要求的权限相比较。如果调用堆栈中的任何调用方没有要求的权限，则会引发安全性异常，并会拒绝访问和相应的操作。堆栈步旨在防止引诱攻击；在这种攻击中，受信程度较低的代码调用高度信任的代码，并使用高度信任的代码执行未经授权的操作。在运行时要求所有调用方都拥有权限将影响性能，但对防止代码遭受攻击至关重要。若要优化性能，可以使代码执行较少的堆栈步；但是，任何时候这样做时均必须确保不会暴露安全缺陷。<br/><br/>　　还存在另外一种代码访问安全性的常见用途，即应用程序将控件从网络 Web 站点直接下载到客户端，这种方式的代码安全性也是可以在客户端进行设置的，根据签名等数据权限证书来确定是不是可以允许下载的控件运行。这种方法类似于ActiveX的安全性设置，但是比之在设置权限更加详细和强大。同JAVA APPLET的沙箱安全机制相比，.NET 的客户端控件可以在本地简单设置后访问客户端的各种资源。由于这一方面的用途不是我们的重点，所以我们在这里就不再更详细的讨论其用途及其实现原理了。<br/><br/>　　下面我们就谈谈如何应用这一安全特性来解决ASP.NET中存在的系统安全漏洞。由于我们介绍的系统是共享主机，所以有其特殊性，即系统管理员无法事先给所有的代码赋予相应的权限，因为每个用户都可能有各种权限要求，并且这些要求特殊权力的代码在使用中都可能出现的，所以在权限管理上随时都有各种要求。<br/>因此在权限设置方面，不仅仅是管理员设置，也包括了各个共享主机用户的权限请求，这也正是安全代码机制的一个重要部分。<br/><br/>　　请求权限是您让运行库知道代码执行有哪些操作权限的方法。通过将属性（声明式语法）放到代码的程序级范围来为程序集请求权限。 <br/><br/>　　请求内置权限的代码示例：<br/><br/><br/><br/>//The attribute is placed on the assembly level.using System.Security.Permissions;[assembly:PermissionSetAttribute(SecurityAction.RequestMinimum, Name = &quot;FullTrust&quot;)]<br/> <br/><br/><br/>　　将此段代码放在程序的开始部分（namespace声明之前），在编译时就会将请求的权限存储在程序集清单中。加载时，运行库检查权限请求，并应用安全策略规则来确定授予程序集哪些权限。<br/><br/>　　虽然我们编写的大部分代码都没有请求权限，其实不管是共享主机形式还是独立服务器形式都应该请求权限，这是因为请求权限有助于确保只将代码需要的权限授予代码。如果没有授予代码额外权限，即使某些恶意代码想利用您的代码来进行安全性破坏，它也无法操作没有赋给您自己代码相应权限的额外系统资源。您只应该请求代码需要的那些权限，而不应请求更多权限。 <br/><br/>　　代码请求权限之后，系统管理员可以使用&quot;权限查看&quot;工具 (Permview.exe，位于您的.NET Framework的目录的bin目录下) 来检查您的程序集并根据其他条件来设置安全策略以决定是否给您的代码所请求的相应权限。如果您不显式地在代码中请求应用程序需要的权限，那么管理员将很难管理您的应用程序。在权限管理严格的主机上，将无法实现您的代码所要求的功能。 <br/><br/>　　请求权限会通知运行库应用程序正常运行需要哪些权限，或具体不需要哪些权限。在.NET Framework安装后的默认状态下，所有代码都是FullTrust（完全信任）的。这时是不需要申请任何权限的，但是管理员一旦修改了代码安全，我们使用的磁盘访问就要受到限制了，这是就需要申请相应的权限了。我们上边介绍的文件管理代码就需要具有本地硬盘读写操作的能力，则应用程序必须拥有 FileIOPermission。如果代码不请求 FileIOPermission，在本地安全设置不允许应用程序拥有此权限的主机上，在应用程序尝试磁盘操作时就会引发安全性异常。即使应用程序能够处理此异常，也不会允许它操作磁盘。当然，如果您的代码不访问受保护的资源或执行受保护的操作，则不必请求任何权限。例如，如果代码只根据向它传递的输入来计算结果而不使用任何资源，则不必请求权限。如果您的代码访问受保护的资源但未请求必要的权限，则仍可能允许它执行，但如果它尝试访问某种资源而它又没有必要的权限，则可能在执行过程中失败。<br/><br/><br/><br/><br/>系统管理员在得到了用户的权限申请后，可以根据情况考虑是否赋予用户相应的权限，在这里我们来看一下相应代码权限设置的具体方法。<br/><br/>　　在我们安装成功.NET Framework之后，在Windows 2000 Server的管理工具里多了两项管理工具： Microsoft .NET Framework Configration和Microsoft .NET Framework Wizards。这两种管理工具要实现的功能差不多，只不过Microsoft .NET Framework Wizards是通过向导方式设置，如果您对于.NET Framewrk的安全性操作不是很熟悉的话，可以使用向导根据系统提示一步步的来设置相关的权限。<br/><br/><a href="http://www.zhanghaijun.com/attachment/month_0706/k20076120394.jpg" target="_blank"><img src="http://www.zhanghaijun.com/attachment/month_0706/k20076120394.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>Microsoft .NET Framework Wizards界面&nbsp;&nbsp;<br/><br/><a href="http://www.zhanghaijun.com/attachment/month_0706/e200761203938.jpg" target="_blank"><img src="http://www.zhanghaijun.com/attachment/month_0706/e200761203938.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>Microsoft .NET Framework Wizards界面&nbsp;&nbsp;<br/><br/><br/>　　使用Microsoft .NET Framework Wizards可以简单的设置.NET Framework的权限。但是我们为了更好的管理各个代码的权限，还是使用Microsoft .NET Framework Configuration来详细的设置我们所需的权限。<br/><br/><a href="http://www.zhanghaijun.com/attachment/month_0706/t200761203953.jpg" target="_blank"><img src="http://www.zhanghaijun.com/attachment/month_0706/t200761203953.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>（Microsoft .NET Framework Configuration主界面）&nbsp;&nbsp;<br/><br/><br/>　　在Microsoft .NET Framework Configuration中可以设置所有关于.NET Framework的属性。<br/>点击我的电脑，打开下拉菜单，我们可以看到程序集缓存、已配置程序集、远程处理服务、运行库安全策略、应用程序等五项。运行库安全策略设置是我们这篇文章的重点。<br/><br/>　　我们可以先查看一下程序集缓存，在这里我们可以看到所有的全局程序集缓存，全局程序集缓存中存储了专门指定给由计算机中若干应用程序共享的程序集。在这里我们可以发现我们可以使用的所有的程序集，同时也可以添加和删除某些程序集。详细操作请参见.NET Framework SDK文档。<br/><br/>　　我们在这里主要讨论的是运行库安全策略。在此策略中，按层次结构由高到低分为四个级别，即：企业、计算机、用户、应用程序。在计算权限授予时，运行库从该层次结构的顶部开始，然后向下进行计算。较低的策略级别不能对在较高级别上授予的权限进行增加，但是可以使权限减少。这就是说如果我们将计算机策略设置为较小的权限时，可以不必更改企业策略就可以使设置的权限生效，也就是说权限检查的顺序是从低级别到高级别，只有在低级别中不存在的设置才会检查上一级的设置。默认情况下，用户策略和应用程序域策略的限制性小于计算机策略和企业级策略。大部分默认策略存在于计算机级别。所以我们需要将默认安装的主机的权限在计算机级别上进行修改，修改的内容根据主机是不是共享主机，主机应用的其他不明代码的可能性来设置。如果是我们讨论的共享主机的话，在计算机级别上就尽量将权限设的小一些，为了避免我们讨论的文件系统安全问题，一定要注意权限中的本地磁盘访问权限。<br/><br/>　　我们打开计算机策略设置可以发现几个默认的代码组、权限集和策略程序集。<br/><br/>　　根据需要，我们可以添加代码组和自定义的权限集。<br/><br/>　　在添加代码组的时候可以选择几种条件，主要的条件类型：默认为All Code、应用程序目录、哈希、强名称、作者、站点等。<br/><br/>　　对于我们所要讨论的共享主机，我们需要将My_Computer_Zone下的All Code的权限更改为不能进行磁盘读写，在更改之前，我们需要先定义一个权限集。这一权限集的作用就是将我们需要点击权限集，右键快捷菜单中选择新建，会出现一个创建权限集的窗口，这里需要给我们新建的权限集命名。下一步就是将单个权限分配给权限集。如下图所示。<br/><br/><br/> <a href="http://www.zhanghaijun.com/attachment/month_0706/020076120408.jpg" target="_blank"><img src="http://www.zhanghaijun.com/attachment/month_0706/020076120408.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/><br/>　　在这里我们可以给这个新建的权限集赋予一个的系统权限，如上图所示，可用的权限包括：目录服务、DNS、事件日志、环境变量、文件IO、OLEDB数据库操作、注册表等等。我们主要要说明的是文件IO操作，其他的权限操作可以根据自己的需求来设置。这里我们就不再说明了。<br/><br/>　　在文件IO的权限设置中我们可以自定义针对每一个目录的权限，这里包括读、写、追加、路径盘等操作，在这里我们可以将我们需要的目录权限添加到列表中。因为我们是利用这一权限使所有没有配置权限的代码不可以进行文件IO操作，所以我们不强文件IO添加到分配的权限中。<br/><br/>　　新建了这一权限集后，我们更改一下默认设置，即将All Code的权限设置为此新建的权限集，也就是说所有没有在此定义代码都不能访问文件IO系统。<br/><br/>　　这里需要注意一件事情，因为Microsoft .NET Framework Configuration本身也需要文件IO权限，如果没有单独分配给Configuration一个文件IO操作权限的话，那么您就不能再次使用Configuration来设置权限了，只能重新安装.NET Framework了。所以我们需要将FullTrust权限分配给Configuration所使用的Dll，即mscorcfg.dll。在添加时，成员条件可以选择强名称，使用&quot;导入&quot;,到winnt/window .net/framework/versionnumber/下选择mscorcfg.dll。如果需要运行其他配置程序，还需要设置相应的权限，这些系统程序一般都在系统程序集缓存中。<br/><br/>　　这样我们就完成了一个简单的设置，可以防止任何未经验证的代码访问文件IO系统。这样就从根本上防止了磁盘恶意操作。<br/><br/>　　如果您今后需要利用这一功能或者有共享主机用户需要使用文件IO功能，那么您可以在Microsoft .NET Framework Configuration中将其加入代码，如果不能使其使用其他功能，可以仅仅设置一个只具有文件IO权限的权限集。如果是共享主机用户您还可以给他分配直接到其所使用的目录的全部读写权限，对于他的日志文档，您可以将读功能分配给用户。通过上边新建权限集时我们可以发现：权限集可以规定到每一个目录的读写权限，所以可以将用户锁定于其可以使用的目录中。当然对于共享主机提供商来说，最好的方法就是自己实现这些功能，然后配置权限系统使用户使用共享主机提供商的程序来实现他们的正常操作，而避免了恶意文件操作。<br/><br/>　　需要注意的是如果分配给每一个单独的程序相应的权限时，我们最好使用强名称这一方式或者其他的可验证方式，强名称由程序集的标识--其简单文本名称、版本号和区域性信息（如果提供）--加上公钥和数字签名组成。这就需要我们使用Sn.exe 来设置密钥、签名和签名验证。强名称保证了程序是开发人员开发的并且没有被改动。<br/><br/>　　在进行上面的设置之后，管理员可以根据用户的各种需求来设置不同的代码集和权限集。<br/><br/>　　我们已经简单的介绍了一下ASP.NET中关于文件IO系统的漏洞的防治方法，这一方法有些繁琐，但是却可以从根本上杜绝一些漏洞，由于.NET的JIT（运行时编译）和IL（中间语言），.NET可以在程序编译时检查程序的安全性设置，所以能从根本上防止一些非法访问。.NET的代码安全性的内容很全面，我们讨论的只是很少的一部分，更多的功能需要大家共同来探索、学习。
]]>
</description>
</item>
</channel>
</rss>