<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[白河子工作室-在线抽签系统、成绩查询系统、在线报名系统 - 校园文化]]></title>
<link>http://www.2369.net/blog/</link>
<description><![CDATA[让生活和工作简单起来，是快乐的源泉！]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[12631176@qq.com(王永闯)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>白河子工作室-在线抽签系统、成绩查询系统、在线报名系统</title>
	<url>http://www.2369.net/blog/images/logos.gif</url>
	<link>http://www.2369.net/blog/</link>
	<description>白河子工作室-在线抽签系统、成绩查询系统、在线报名系统</description>
</image>

			<item>
			<link>http://www.2369.net/blog/article.asp?id=551</link>
			<title><![CDATA[华为：利用IP-Link技术实现静态路由冗余]]></title>
			<author>12631176@qq.com(admin)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Sat,05 Aug 2017 11:58:19 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=551</guid>
		<description><![CDATA[<p><img src="http://www.2369.net/blog/download.asp?id=5" alt="" /></p>
<p><font color="red">USG5320A Config:</font><br />
#配置接口IP<br />
interface GigabitEthernet0/0/0<br />
description TO_CoreSW_A<br />
ip address 192.168.63.2 255.255.255.0<br />
interface GigabitEthernet0/0/1<br />
description TO_FWB<br />
ip address 192.168.59.1 255.255.255.0<br />
interface GigabitEthernet0/0/3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />
description TO_LIANTONG<br />
ip address x.x.x.x 255.255.255.240<br />
#将接口加入zone<br />
firewall zone trust<br />
set priority 85<br />
add interface GigabitEthernet0/0/0<br />
add interface GigabitEthernet0/0/1<br />
firewall zone untrust<br />
set priority 5<br />
add interface GigabitEthernet0/0/3<br />
#配置域间策略<br />
policy interzone trust untrust outbound<br />
policy 1<br />
action permit<br />
policy source 10.0.0.0 0.0.255.255<br />
policy source 172.16.0.0 0.0.255.255<br />
#配置NAT策略<br />
nat address-group 0 LIANTONG x.x.x.x 255.255.255.240<br />
nat-policy interzone trust untrust outbound<br />
policy 1<br />
action source-nat<br />
policy source 172.16.0.0 0.0.255.255<br />
policy source 10.0.0.0 0.0.255.255<br />
address-group LIANTONG<br />
#配置链路可达性检查并与静态路由绑定<br />
ip-link check enable<br />
ip-link 1 destination x.x.x.z timer 5 mode icmp<br />
ip route-static 0.0.0.0 0.0.0.0 x.x.x.z preference 50 ip-link 1<br />
ip route-static 0.0.0.0 0.0.0.0 192.168.59.2<br />
ip route-static 10.0.0.0 255.255.0.0 192.168.63.1<br />
ip route-static 172.16.0.0 255.255.0.0 192.168.59.2<br />
<br />
<br />
<font color="red">USG5320B Config:</font><br />
#配置接口IP<br />
interface GigabitEthernet0/0/0<br />
description TO_CoreSW_B<br />
ip address 192.168.62.2 255.255.255.0<br />
interface GigabitEthernet0/0/1<br />
description TO_FWA<br />
ip address 192.168.59.2 255.255.255.0<br />
interface GigabitEthernet0/0/3&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />
description TO_DIANXIN<br />
ip address y.y.y.y 255.255.255.240<br />
#将接口加入zone<br />
firewall zone trust<br />
set priority 85<br />
add interface GigabitEthernet0/0/0<br />
add interface GigabitEthernet0/0/1<br />
firewall zone untrust<br />
set priority 5<br />
add interface GigabitEthernet0/0/3<br />
#配置域间策略<br />
policy interzone trust untrust outbound<br />
policy 1<br />
action permit<br />
policy source 10.0.0.0 0.0.255.255<br />
policy source 172.16.0.0 0.0.255.255<br />
#配置NAT策略<br />
nat address-group 0 DIANXIN y.y.y.y 255.255.255.240<br />
nat-policy interzone trust untrust outbound<br />
policy 1<br />
action source-nat<br />
policy source 172.16.0.0 0.0.255.255<br />
policy source 10.0.0.0 0.0.255.255<br />
address-group DIANXIN<br />
#配置链路可达性检查并与静态路由绑定<br />
ip-link check enable<br />
ip-link 1 destination y.y.y.z timer 5 mode icmp<br />
ip route-static 0.0.0.0 0.0.0.0 y.y.y.z preference 50 ip-link 1<br />
ip route-static 0.0.0.0 0.0.0.0 192.168.59.1<br />
ip route-static 172.16.0.0 255.255.0.0 192.168.62.1<br />
ip route-static 10.0.0.0 255.255.0.0 192.168.59.1<br />
<br />
注：<br />
1、&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;当IP-Link自动侦测发现链路故障时，USG5300会将<font color="red">下一跳IP地址是IP-Link链路探测的目的IP地址的静态路由</font>置为非激活状态，用display fib可以发现与IP-Link绑定的路由已经消失；同时防火墙会对自身的静态路由进行，选择次优静态路由，保持业务的持续。<br />
2、&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;USG5300版本号V100R003SPC300才可支持IP-Link与静态路由绑定；<br />
3、&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;IP-Link链路探测的目的IP地址必须与静态路由的下一跳IP地址相同；<br />
4、&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;上面的配置虽然实现了运营商链路的冗余，但是如果核心交换VRRP主备倒换，则会出现办公区1或者办公区2上不了internet的情况，VRRP此时只能保证3层及以下数据的互通（无语，想了半天还是没有想出什么好的解决方法），保证VRRP的稳定只能靠设备了（双主控+双电源）。<br />
还是希望有经验的朋友给出一个完整的解决方案，感觉这次配置还是有问题的，好多问题没有解决。</p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=550</link>
			<title><![CDATA[华为三层交换机与防火墙对接上网]]></title>
			<author>12631176@qq.com(admin)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Thu,03 Aug 2017 21:22:50 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=550</guid>
		<description><![CDATA[<p>交换机的三种模式:<br />
<br />
Access模式:<br />
<br />
一般用来连接计算机与交换机. 此模式下有一个PVID就是本端口所属的VLAN号,如果从链路上收到无标签的帧,则打上默认VLAN号,然后发给其他端口,如果从链路上收到有标签的帧,如果这个帧的VLAN等于PVID,则直接发给其他端口,如果不等于PVID,则直接丢弃.如果从其他端口收到一个有标签的帧,且VLAN等于PVID,则直接剥离掉标签从此端口发出,如果此标签不等于PVID,则直接丢弃.<br />
<br />
Trunk模式:<br />
<br />
一般用于各交换机之间连接.此模式下有一个PVID和允许通过的VLAN ID列表. 如果从链路上收到一个不带标签的帧,则直接打上PVID号,转发到其他端口, 如果从链路上收到一个带标签的帧,且此帧的VLAN号在允许通过的VLAN列表里,则直接转发给其他端口; 如果从其他端口收到一个有标签的帧,且此帧的VLAN等于PVID,则直接剥离掉标签,并从此端口发出,如果此标签不等于PVID,则查看此帧的VLAN号是否在允许通过的VLAN列表里,如果在,则直接从此端口发出,否则丢弃.<br />
<br />
Hybrid模式:<br />
<br />
此模式下,有一个默认的PVID号,一个untagged列表和一个tagged列表. 如果从链路上收到一个无标签的帧,则打上PVID号,转发到其他端口,如果从链路上收到一个带标签的帧,且此帧的VLAN号在untagged或者tagged列表中的其中任意一个列表里,则直接转发到其他端口,否则丢弃. 如果从其他端口收到一个有标签的帧,且帧的VLAN号在tagged列表里,则直接从此端口发出,如果VLAN号在untagged列表里,这剥离掉帧的VLAN标签,然后从此端口发出.<br />
华为交换机的三种视图: 用户视图, 系统视图, 接口视图<br />
<br />
用户视图: 刚开始登入交换机时的视图,一般看到的是尖括号&lt;&gt; .<br />
<br />
save&nbsp;&nbsp;&nbsp; // 配置完交换机后保存当前配置的命令<br />
system-view&nbsp;&nbsp;&nbsp; // 进入系统视图的命令<br />
clock&nbsp; timezone&nbsp; BJ&nbsp; add|minus 8&nbsp;&nbsp; // 设置时区<br />
clock&nbsp; datetime&nbsp; 16:36:00 2016-07-01&nbsp;&nbsp;&nbsp; //设置交换机的时间<br />
<br />
<br />
系统视图: 在用户视图下输入system-view后进入系统视图,一般为方括号[]<br />
<br />
display current-configuration&nbsp; // 显示当前配置<br />
user-interface maximum-vty 15&nbsp; //配置vty最大连接数<br />
user-interface vty 0 14&nbsp;&nbsp;&nbsp;&nbsp; //进入vty用户界面视图<br />
user privilege level 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置vty登入的用户等级为2(配置用户级别)<br />
authentication-mode aaa&nbsp; //设置vty登入时的验证模式为用户名和密码验证<br />
<br />
aaa&nbsp; //进入AAA视图<br />
local-user admin password cipher admin@123&nbsp; //设置aaa登入的用户名和密码<br />
local-user admin service-type telnet&nbsp; //设置admin用户远程登入时的协议<br />
<br />
user-interface console 0&nbsp;&nbsp;&nbsp;&nbsp; //进入第0个console口的用户界面<br />
authentication-mode passwd&nbsp;&nbsp; //配置从console口登入交换机的认证模式为密码认证<br />
set authentication password cipher admin@123&nbsp; //配置从console口登入交换机的密码<br />
<br />
<br />
vlan 10&nbsp; //创建一个VLAN<br />
<br />
<br />
interface meth 0/0/1&nbsp;&nbsp; //进入交换机的第一个管理网口<br />
ip address 192.168.1.110 24 //设置管理网口的ip地址和子网掩码<br />
<br />
interface gigabitethernet 0/0/1 //进入第一个业务网口<br />
port link-type access&nbsp; //设置第1个网口位access模式<br />
port default vlan 10&nbsp;&nbsp; //设置此网口的VLAN号为10<br />
<br />
interface gigabitethnet 0/0/2 //进入第2个业务网口<br />
port link-type trunk&nbsp;&nbsp; //设置第二个网口位trunk模式<br />
port trunk allow-pass vlan 10 20 30&nbsp; //设置此端口可以通过的VLAN号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // port trunk allow-pass vlan all&nbsp; 表示可以通过所有的带VLAN的帧<br />
<br />
Interface gigabitethnet 0/0/3&nbsp; //进入第3个业务网口<br />
Port link-type hybrid&nbsp;&nbsp;&nbsp;&nbsp; //设置此端口为hybrid模式,每个端口默认就是hybrid模式<br />
Port hybrid pvid vlan 10&nbsp;&nbsp; //设置pvid为10<br />
Port hybrid tagged vlan 20 30 40 //设置tagged列表为20,30,40<br />
Port hybrid untagged vlan 50 60 //设置untagged列表为50,60<br />
<br />
Display port vlan&nbsp; //显示当前各端口的VLAN情况<br />
<br />
<br />
<br />
清除某个端口的配置<br />
Interface gigabitethernet 0/0/2<br />
Clear configuration this<br />
Undo shutdown<br />
<br />
Interface gigabitethernet 0/0/3<br />
Undo port default vlan&nbsp; //access 模式的端口<br />
Undo port link-type <br />
Undo port hybrid pvid vlan vlanid&nbsp; //hybrid 模式的端口<br />
Undo port hybrid untagged vlan vlanid <br />
Undo port hybrid tagged vlan vlanid <br />
Undo port trunk pvid vlan&nbsp; //trunk 模式的端口<br />
Undo port trunk allow-pass vlan vlanid <br />
Undo port link-type<br />
<br />
恢复出厂设置s5700SI<br />
在用户视图下(按Ctrl+z组合键回到用户视图)输入如下命令操作<br />
reset saved-configuration<br />
Y<br />
Reboot<br />
N<br />
Y<br />
<br />
<br />
设置交换机的mux-vlan模式<br />
假设主VLAN是10,从VLAN中group模式的有VLAN 20, separate模式的有VLAN 30,server连接1号端口,PC1和PC2连接2和3号端口,PC3和PC4连接4和5号端口<br />
Vlan batch 10 20 30<br />
Vlan 10<br />
Mux-vlan<br />
Subordinate group 20<br />
Subordinate separate 30<br />
把各连接的端口设为access模式,并且加入到各自的VLAN中,且同时开启mux-vlan功能,<br />
Interface gigabitethernet 0/0/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Port link-type access<br />
Port default vlan 10<br />
Port mux-vlan enable<br />
Interface gigabitethernet 0/0/2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //3号端口设置方法类似<br />
Port link-type access<br />
Port default vlan 20<br />
Port mux-vlan enable<br />
Interface gigabitethernet 0/0/4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //5号端口设置方法类似<br />
Port link-type access<br />
Port default vlan 30<br />
Port mux-vlan enable<br />
<br />
<br />
三层交换机接路由器LAN口<br />
Vlan 60 70<br />
Interface vlanif 60<br />
ip address 192.168.60.1 24<br />
interface vlanif 70<br />
ip address 192.168.1.238 24<br />
interface gigabitethernet 0/0/3<br />
port link-type access<br />
port default vlan 60<br />
interface gigabitethernet 0/0/4<br />
port link-type access<br />
port default vlan 70<br />
ip route-static 0.0.0.0 0.0.0.0 192.168.1.1<br />
在与交换机相连的路由器上设置一条静态ip地址,目的地址为交换机相关的各个网段地址,网关为交换机与路由器相连的vlanif的ip地址<br />
<br />
&nbsp;<br />
<br />
批量配置交换机端口<br />
vlan batch 10 20<br />
port-group 1<br />
group-member gigabitethernet 0/0/1 to gigabitethernet 0/0/10<br />
port link-type access<br />
port default vlan 10</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.2369.net/blog/download.asp?id=4"><img src="http://www.2369.net/blog/images/download.gif" alt="" style="margin:0px 2px -4px 0px" border="0" />点击下载此文件</a>&nbsp; 华为三层交换机与防火墙对接上网</p>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=549</link>
			<title><![CDATA[思科（锐捷）三层交换机配置VLAN+DHCP]]></title>
			<author>12631176@qq.com(admin)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Mon,31 Jul 2017 20:47:42 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=549</guid>
		<description><![CDATA[<pre id="best-content-1381786338" class="best-text mb-10" style="min-height: 55px;"><strong>命令如下：</strong>

假设是配置vlan 网关，那么就是配置SVI接口IP地址：

<strong>enable</strong>
<strong>configure terminal</strong>
<strong>int vlan 10</strong> （端口下命令）
<strong>ip address 192.168.10.1 255.255.255.0</strong>（确定vlan网段）
exit

<strong>DHCP配置：</strong>

<strong>ip dhcp pool vlan</strong>（设置名称）
<strong>network 192.168.10.0 255.255.255.0</strong>（设置网段）
<strong>default-rotuer 192.168.10.1</strong>(设置网关）
<strong>dns-server X.X.X.X</strong>   (设置DNS)
exit
<strong>ip dhcp e 192.168.10.1</strong>  (不分配IP)</pre>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=539</link>
			<title><![CDATA[asp乱码的有效解决办法]]></title>
			<author>12631176@qq.com(admin)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Sat,17 Jun 2017 19:34:45 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=539</guid>
		<description><![CDATA[今天在用utf-8编码用在新的网站上，不想问题还真多，所以找了些文章，帖子，看了看，等下有用的就贴下面了。<br/>今天，我开始把 CODEPAGE=&#34;936&#34; 改成 CODEPAGE=&#34;65001&#34;<br/>把charset=gb2312改成 charset=utf-8<br/>可是还是乱码，只要是脚本用的地方还是乱码，现在终于找到问题了，就是当脚本输出时候，要以utf-8编码输出。<br/>就是要加一句&lt;% Response.Charset = &#34;utf-8&#34; %&gt;<br/><br/>①首先当然是页面本身用utf-8编码，在DW新建页时默认编码定为“Unicode(UTF-8)”<br/>&lt;%@LANGUAGE=&#34;VBscri&#112;t&#34; CODEPAGE=&#34;65001&#34; %&gt;<br/>&#39; ②CODEPAGE=&#34;65001&#34; 告诉服务器页面使用UTF-8编码的<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34;&gt;<br/>&#39; ③charset=utf-8告诉浏览器页面使用UTF-8编码的<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;% Response.Charset = &#34;utf-8&#34; %&gt;<br/>&#39; ④服务器输出编码为utf-8<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/>晕，事情还没有结束<br/>刚开心，问题出来了，刷新后又变成乱码，或者浏览其他的gb2312的页面回来又乱码了。值得又去google了一下，呵呵，还是找到答案了<br/><br/>看看下面的文字，就知道了，所有在后来我加了这个，程序顶端<br/>&lt;%Session.CodePage=65001%&gt;<br/><br/>&lt;%@ codepage=936%&gt;简体中文<br/>&lt;%@ codepage=950%&gt;繁体中文<br/>&lt;%@ codepage=65001%&gt;UTF-8<br/><br/>codepage指定了IIS按什么编码读取传递过来的串串（表单提交，地址栏传递等）。<br/>出乱码的原因也就是网站要整合的时候模块编码不一样引起的。<br/>不要转换任何模块网页的编码该utf-8的还是utf-8，该Gb22312的还是Gb2312<br/><br/>将GB2312模块的conn.asp文件中加入了以下这段代码<br/>&lt;%@LANGUAGE=&#34;VBscri&#112;t&#34; CODEPAGE=&#34;936&#34;%&gt;<br/>&lt;%Session.CodePage=936%&gt;<br/>一切OK!<br/><br/>同样在在Utf-8模块的包文件（如conn.asp，但是要注意conn.asp必须是在第一行调用）最前面加上<br/>&lt;%@LANGUAGE=&#34;VBscri&#112;t&#34; CODEPAGE=&#34;65001&#34;%&gt;<br/>&lt;%Session.CodePage=65001%&gt;<br/><br/><br/><br/><br/><br/><br/><br/><br/>这几天写东西时总是遇到乱码，郁闷，以前从来没研究过编码，只是拿过语句直接用！下午经过研究后我得出以下结论！<br/><br/>首先，选择编码：你必须按照你页面的内容选择编码，不过建议前台后台都使用utf-8编码，方法是在conn.asp中加入：<br/><br/>引用&lt;%@ CODEPAGE=65001 %&gt;<br/>&lt;% Response.CodePage=65001%&gt;<br/>&lt;% Response.Charset=&#34;UTF-8&#34; %&gt;<br/>就可以解决乱码隐患，或者在每个页面一开始加入：<br/>&lt;META HTTP-EQUIV=&#34;Content-Type&#34; CONTENT=&#34;text/html; charset=utf-8&#34; /&gt;<br/>如果有小的页面，直接ASP服务端声明&lt;%Response.Charset=&#34;utf-8&#34;%&gt;，这样基本可以解决乱码问题！<br/><br/>其次，如果某个页面不用utf-8编码，直接加上：&lt;%Response.Charset=&#34;GB2312&#34;%&gt;<br/><br/>还有个问题，就是某个页面是utf-8编码，而另外一个页面是GB2312编码，如何实现跳转而没有乱码。方法是：<br/>给GB2312页面设置：Session.CodePage=936；或者直接用response.redirect实现跳转.<br/><br/>另外，基本常识：<br/>&lt;%@ codepage=936%&gt;简体中文<br/>&lt;%@ codepage=950%&gt;繁体中文<br/>&lt;%@ codepage=65001%&gt;UTF-8<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=519</link>
			<title><![CDATA[多个图标集于一张背景图片在网页上显示指定区域 ]]></title>
			<author>12631176@qq.com(wang)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Mon,28 Nov 2011 19:19:58 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=519</guid>
		<description><![CDATA[多个图标集于一张背景图片在网页上显示指定区域<br/><br/>&nbsp;&nbsp;<br/><br/><br/>早就发现了。。很多大一点的门户里面用的一些背景图都是一个页面只有一张背景图。。所有要用的图标全都放到一张图里面。开始想应该是用位置来控制的，但自己在做网页的时候位置太难调了一直没去实现。。今天在网上找了下，总算找到了篇写这个的文章<br/><br/> <br/><br/>文章一：<br/><br/>CSS Sprites技术不新鲜，早在2005年 CSS Zengarden 的园主 Dave Shea就在ALA发表对该技术的详细阐述。原先只在CSS玩家之间作为一种制作方法流传，后来出来个14 Rules for Faster-Loading Web Sites, 技术人员之间竞相传阅，其中第一条规则Make Fewer HTTP Requests就提到CSS Sprites。于是这个小妖精就火了起来，甚至出现了在线生成工具，势不可挡也。近来国内很多blog都提到CSS Sprites，最著名的例子莫过于 <a href="http://www.google.co.kr/" target="_blank" rel="external">http://www.google.co.kr/</a> 下方的那几个动画。最新发布的YUI中，也是使用到CSS Sprites，几乎都有的CSS装饰图都被一个40×2000的图包办。社交大站Facebook最近也使用了一个22×1150的图片承担了所有icon. 一时间，CSS Sprites无处不在。<br/><br/>原理<br/><br/>我们知道，自CSS革命以降，HTML倾向于语义化，在一般情况下不再在标记里写装饰性的内容而是把呈现的任务交给了CSS。GUI是缤纷多彩的，少不了各种漂亮的图来装点。新时代的生产方式是，在HTML布满各种各样的钩子（hook），然后交由CSS来处理。在需要用到图片的时候，现阶段是通过CSS属性<br/><br/>background-image<br/><br/>组合<br/><br/>background-repeat<br/><br/>, <br/><br/>background-position<br/><br/>等来实现（题外话：为何我提现阶段，因为未来浏览器若支持<br/><br/>content<br/><br/>则又新增另外的实现方法）。我们的主角是，你一定猜到了，就是<br/><br/>background-position<br/><br/>。通过调整<br/><br/>background-position<br/><br/>的数值，背景图片就能以不同的面貌出现在你眼前。其实图片整体面貌没有变，由于图片位置的改变，你看到只该看到的而已。就好比手表上的日期，你今天看到是21，明天看到是22，是因为它的position往上跳了一格。所以你也大概了解到，CSS Sprites一般只能使用到固定大小的盒子（box）里，这样才能够遮挡住不应该看到的部分。<br/><br/>我们使用YUI的sprite.png举个例子，假如我们有这么一段代码，<br/><br/>max<br/><br/>代表最大化，<br/><br/>min<br/><br/>代表最小化，我们需要给它们配上相应的漂亮图片（这样我们的网站才能够吸引人，才可以卖钱，才可以到佛罗里达晒太阳:D）：<br/><br/>最大化<br/><br/>最小化<br/><br/>这两个<br/><br/>class<br/><br/>都使用同一个图片：<br/><br/>.min, .max { width:16px; height:16px; background-image:url(<a href="http://developer.yahoo.com/yui/build/assets/skins/sam/sprite.png" target="_blank" rel="external">http://developer.yahoo.com/yui/build/assets/skins/sam/sprite.png</a>); background-repeat: no-repeat; text-indent:-999em; }<br/><br/>效果如下：<br/><br/>最大化<br/><br/>最小化<br/><br/>我们看到一团灰，没错，因为我们还没有指定<br/><br/>background-position<br/><br/>，默认为 <br/><br/>0 0<br/><br/>，可以看下sprite.png, 处于这个位置正是灰块。好了，我们要找到代表最大化的加号和代表最小化的减号的位置找出来。经过测量，最大化按钮位于Y轴的350px处，最小化按钮位于Y轴400px处。想一想我们如何才能让它们能够显示出来呢，明显，要向上提升sprite.png，得到代码如下：<br/><br/>.max { background-position: 0 -350px; } .min { background-position: 0 -400px; }<br/><br/>耶，我们成功了：<br/><br/>最大化<br/><br/>最小化<br/><br/>（注意：为了举例的方便，本例子直接在HTML内置样式，切勿在实践中的非特殊情况使用这种方式）。<br/><br/>优点<br/><br/>我们从前面了解到，CSS Sprites为什么突然跑火，跟能够提升网站性能有关。显而易见，这是它的巨大优点之一。普通制作方式下的大量图片，现在合并成一个图片，大大减少了HTTP的连接数。HTTP连接数对网站的加载性能有重要影响。<br/><br/>缺点<br/><br/>至于可维护性，这是一般双刃剑。可能有人喜欢，有人不喜欢，因为每次的图片改动都得往这个图片删除或添加内容，显得稍微繁琐。而且算图片的位置（尤其是这种上千px的图）也是一件颇为不爽的事情。当然，在性能的口号下，这些都是可以克服的。<br/><br/>由于图片的位置需要固定为某个绝对数值，这就失去了诸如<br/><br/>center<br/><br/>之类的灵活性。<br/><br/>前面我们也提到了，必须限制盒子的大小才能使用CSS Sprites，否则可能会出现出现干扰图片的情况。这就是说，在一些需要非单向的平铺背景和需要网页缩放的情况下，CSS Sprites并不合适。YUI的解决方式是，加大图片之间的距离，这样可以保持有限度的缩放。<br/><br/>总结<br/><br/>性能压倒一切。CSS Sprites是值得推广的一种技术。尤其适宜用于FIR，比如固定大小的icon替换。为保持兼容性，图片中的各个部分保持一定的距离是一种不错的做法。<br/><br/> <br/><br/>文章二：<br/><br/>本文是我的一点研究心得，跟大家分享一下。不过我也是新人，所以，说得不对的地方，一定请大家谅解。<br/><br/>　　现在的网站，内容在采集工具的帮助下，实在是不成问题了，那么什么让看到网站的人留下那？或者很多人回答漂亮？其实我个人的感觉是速度。<br/><br/>　　很多人说，要速度，一定要div＋css，其实也不全都如此。个人感觉，速度跟很多因素都有关系，比如全站图片，代码优化、css太长，也会导致速度很慢。有点跑题了。<br/><br/>　　平时我写css代码，一般来说，一个大站点，我都会写几个css来调用。比如首页可能会调用2－3个css。其中有通用部分，也有不通用的部分，这样会让css读取效率提高。本地测试，css文件代码超过1000行，定义class或者id数量超过400个的一个css打开载入页面时间是2－3个css代码不超过500行的css文件速度的2倍左右。所以，通常我会用几个css来让网站调用。<br/><br/>　　又跑题了。<br/><br/>　　下面说下如何让一个背景图片全站通用。以yahoo.com为例子（注意，是英文的yahoo，不是中文的）。英文yahoo的编写代码不太规范，但是很多大胆的尝试都不错。<br/><br/>　　仔细分析他们的代码，全站背景图片其实就是2个，1个是1象素700长的，另外一个是4象素4300长度的。grd-4px.gif跟grd-1px.gif（因为高度太长，我就不在这里贴出来了）。全站通用一个背景图片，是提高速度的很大因素。这一个背景，可能是不同的位置不同的颜色样子，合成的一个但是可以在不同的位置调用。<br/><br/>　　以动易来说，如果要仿yahoo的页面非常容易。通用css可以这样分类：<br/><br/>　　1、标题背景<br/><br/>　　2、css表格通用背景<br/><br/>　　3、内容背景<br/><br/>　　4、站内外搜索背景<br/><br/>　　那么，如何定义呢？使用以下CSS定义即可：<br/><br/>&nbsp;&nbsp;background-image:url(/Lectures/UploadFiles_3793/200612/20061210101340854.gif); <br/><br/>&nbsp;&nbsp;background-repeat:repeat-x;<br/><br/>&nbsp;&nbsp;background-position:0 -530px;<br/> <br/><br/><br/>　　注意最后一个定义，这个是通用一个背景图片的关键，就是调用背景图片的不同位置作为背景……<br/><br/>　　比如：定义“background-position:0 -530px;”，调用这个背景图片530px高度部分作为背景，从最左边开始铺垫。<br/><br/>附：背景(Backgrounds)的属性： <br/><br/>background-color:#f00;<br/><br/>background-image:url(background.gif);<br/><br/>background-repeat:no-repeat;<br/><br/>background-attachment:fixed;<br/><br/>background-position:0 0;<br/><br/>可以缩写为一句：background:#f00 url(background.gif) no-repeat fixed 0 0;<br/><br/>语法是background:color image repeat attachment position;<br/><br/>您可以省略其中一个或多个属性值，如果省略，该属性值将用浏览器默认值，默认值为：<br/><br/>color: transparent<br/><br/>image: none<br/><br/>repeat: repeat<br/><br/>attachment: scroll<br/><br/>position: 0% 0%<br/> <br/><br/><br/>　　这就是yahoo页面上面最与众不同的地方，纵观国内门户网站、网易、qq新郎搜狐都没有如此大胆的尝试。yahoo的页面代码很负责，并且通用了一个css，还有部分css定义是放在页面上面的，不知道是为了防止 css 偷学还是其他含义。的确，全部分析下来很难，因为同一个.ht的定义，居然分了8个部分才定义完所有属性。css里面几部分，页面里面居然还有……<br/><br/>　　yahoo跟msn的英文页面是类似的，msn的英文页面还好一些，大家也可以分析一下看看。但是yahoo的英文页面，如果真的学会了，相信对大家理解css以及div的感觉以及水平，会有很大的提高。<br/><br/>　　我真的是个新手，接触divcss 时间才3个月。。接触动易2个月而已。<br/><br/>－－－－－－－－－－－－－－－－－－－－－－－－－－<br/><br/>　　简约、洁净，似乎是目前门户站点开始流行的一种页面风格，不同的蓝色铺垫出来的，yahoo这个页面，是可以在动易仿制出来的。页面解析速度满快。图片我发到交流板块去了，有兴趣您可以去看看。<br/><br/>　　看了很多大家的帖子，常常不知道问题解决答案了就开始问，可是看看问的问题，实在很难让别人回答你，不是太难，而是实在太简单。这里很多高手相信不是喜欢作普及教师的，因此，很多时候不如常常自学一下，然后多多搜索一下吧……<br/><br/>　　每个人都不是笨笨的。分享给大家我学div css的一些心得，希望对大家有所帮助。<br/><br/>－－－－－－－－－－－－－－－－－－－－－－－－－－<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=518</link>
			<title><![CDATA[无组件上传漏洞的修补方法]]></title>
			<author>12631176@qq.com(wang)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Tue,08 Nov 2011 10:55:24 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=518</guid>
		<description><![CDATA[sub upload_0()set upload=new UpFile_Class ”建立上传对象<br/>upload.GetDate (int(Forum_Setting(56))*1024) ‘取得上传数据,不限大小<br/>iCount=0<br/><br/>if upload.err &gt; 0 then<br/>sel&#101;ct case upload.err<br/>case 1<br/>Response.Write “请先选择你要上传的文件　[ &lt;a href=# onclick=history.go(-1)&gt;重新上传&lt;/a&gt; ]”<br/>case 2<br/>Response.Write “图片大小超过了限制 “&amp;Forum_Setting(56)&amp;”K　[ &lt;a href=# onclick=history.go(-1)&gt;重新上传&lt;/a&gt; ]”<br/>end sel&#101;ct<br/>exit sub<br/>else<br/>formPath=upload.form(“filepath”)<br/>”在目录后加(/)<br/>if right(formPath,1)&lt;&gt;”/” then formPath=formPath&amp;”/”<br/><br/>for each formName in upload.file ”列出所有上传了的文件<br/>set file=upload.file(formName) ”生成一个文件对象<br/>if file.filesize&lt;100 then<br/>response.write “请先选择你要上传的图片　[ &lt;a href=# onclick=history.go(-1)&gt;重新上传&lt;/a&gt; ]”<br/>response.end<br/>end if<br/><br/>fileExt=lcase(file.FileExt)<br/>if CheckFileExt(fileEXT)=false then<br/>response.write “文件格式不正确　[ &lt;a href=# onclick=history.go(-1)&gt;重新上传&lt;/a&gt; ]”<br/>response.end<br/>end if<br/><br/>randomize<br/>ranNum=int(90000*rnd)+10000<br/>filename=formPath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;”.”&amp;fileExt<br/>‘测试文件字符是否非法<br/><br/>Dim R_Char,R_i<br/>for R_i=1 to Len(filename)<br/>R_Char=ASC(MID(filename,R_i,1))<br/>if R_Char=0 then<br/>response.write “做点有意义的事情好不好，黑客是研究技术的，不是破坏的”<br/>response.end<br/>end if<br/>Next<br/><br/>if file.FileSize&gt;0 then ”如果 FileSize &gt; 0 说明有文件数据<br/>file.SaveToFile Server.mappath(filename) ”保存文件<br/>‘ response.write file.FilePath&amp;file.FileName&amp;” (“&amp;file.FileSize&amp;”) =&gt; “&amp;formPath&amp;File.FileName&amp;” 成功!&lt;br&gt;”<br/>response.write “&lt;script&gt;parent.document.forms[0].myface.value=’”&amp;FileName&amp;”‘&lt;/script&gt;”<br/>iCount=iCount+1<br/>end if<br/>set file=nothing<br/>next<br/>set upload=nothing<br/>session(“upface”)=”done”<br/>Htmend iCount&amp;” 个文件上传结束!”<br/><br/>end ifend sub<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=517</link>
			<title><![CDATA[一个常见经典的上传程序漏洞的修补过程]]></title>
			<author>12631176@qq.com(wang)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Tue,08 Nov 2011 10:29:11 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=517</guid>
		<description><![CDATA[<br/>&nbsp;&nbsp;本来以为经过国内这些大牛的血洗，上传漏洞应该变成了传说，但是我还是能经常遇到好多人向我请教，找我帮忙修补上传漏洞，以前JESSICA发我一个上传程序，找我帮忙修补，后来又有N多人也拿着同样的程序来找我求助，而这些程序呢，几乎写法是一模一样的，可能是有些程序员对上传程序不太熟悉，直接把别人的程序拿过来用了吧，所以别人程序中的漏洞原样给照搬过来了。下面我们来看看这段经典的漏洞代码是怎么样写的，又是怎么样引起漏洞的。<br/><br/>upfile.asp<br/><br/>&lt;!--#include file=&#34;Inc/config.asp&#34;--&gt;<br/>&lt;!--#include file=&#34;Inc/upload.asp&#34;--&gt;<br/>&lt;%<br/>Server.ScriptTimeOut = 1800<br/>const upload_type=0&nbsp;&nbsp; &#39;上传方法：0=无惧无组件上传类，1=FSO上传 2=lyfupload，3=aspupload，4=chinaaspupload<br/><br/>dim upload,file,formName,SavePath,filename,fileExt<br/>dim upNum<br/>dim EnableUpload<br/>dim Forumupload<br/>dim ranNum<br/>dim uploadfiletype<br/>dim msg,founderr<br/>msg=&#34;&#34;<br/>founderr=false<br/>EnableUpload=false<br/>SavePath = SaveUpFilesPath&nbsp;&nbsp; &#39;存放上传文件的目录<br/>if right(SavePath,1)&lt;&gt;&#34;/&#34; then SavePath=SavePath&amp;&#34;/&#34; &#39;在目录后加(/)<br/>%&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;%<br/>if EnableUploadFile=&#34;No&#34; then<br/> response.write &#34;系统未开放文件上传功能&#34;<br/>else<br/> &#39;if session(&#34;name&#34;)=&#34;&#34; then<br/> &#39; response.Write(&#34;请登录后再使用本功能！&#34;)<br/> &#39;else<br/>&nbsp;&nbsp;sel&#101;ct case upload_type<br/>&nbsp;&nbsp; case 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;call upload_0()&nbsp;&nbsp;&#39;使用化境无组件上传类<br/>&nbsp;&nbsp; case else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;response.write &#34;本系统未开放插件功能&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;response.end<br/>&nbsp;&nbsp;end sel&#101;ct<br/> &#39;end if<br/>end if<br/>%&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/>&lt;%<br/>sub upload_0()&nbsp;&nbsp;&nbsp;&nbsp;&#39;使用化境无组件上传类<br/> set upload=new upload_file&nbsp;&nbsp;&nbsp;&nbsp;&#39;建立上传对象<br/> for each formName in upload.file &#39;列出所有上传了的文件<br/>&nbsp;&nbsp;set file=upload.file(formName)&nbsp;&nbsp;&#39;生成一个文件对象<br/>&nbsp;&nbsp;if file.filesize&lt;100 then<br/>&nbsp;&nbsp;&nbsp;&nbsp;msg=&#34;请先选择你要上传的文件！&#34;<br/>&nbsp;&nbsp; founderr=true<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;if file.filesize&gt;(MaxFileSize*1024) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;msg=&#34;文件大小超过了限制，最大只能上传&#34; &amp; CStr(MaxFileSize) &amp; &#34;K的文件！&#34;<br/>&nbsp;&nbsp; founderr=true<br/>&nbsp;&nbsp;end if<br/><br/>&nbsp;&nbsp;fileExt=lcase(file.FileExt)<br/>&nbsp;&nbsp;Forumupload=split(UpFileType,&#34;|&#34;)<br/>&nbsp;&nbsp;for i=0 to ubound(Forumupload)<br/>&nbsp;&nbsp; if fileEXT=trim(Forumupload(i)) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;EnableUpload=true<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit for<br/>&nbsp;&nbsp; end if<br/>&nbsp;&nbsp;next<br/>&nbsp;&nbsp;if fileEXT=&#34;asp&#34; o&#114; fileEXT=&#34;asa&#34; o&#114; fileEXT=&#34;aspx&#34; then<br/>&nbsp;&nbsp; EnableUpload=false<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;if EnableUpload=false then<br/>&nbsp;&nbsp; msg=&#34;这种文件类型不允许上传！\n\n只允许上传这几种文件类型：&#34; &amp; UpFileType<br/>&nbsp;&nbsp; founderr=true<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;strJS=&#34;&lt;SCRIPT language=javascript&gt;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;if founderr&lt;&gt;true then<br/>&nbsp;&nbsp; randomize<br/>&nbsp;&nbsp; ranNum=int(900*rnd)+100<br/>&nbsp;&nbsp; filename=SavePath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;&#34;.&#34;&amp;fileExt<br/>&nbsp;&nbsp; file.SaveToFile Server.mappath(FileName)&nbsp;&nbsp; &#39;保存文件<br/><br/>&nbsp;&nbsp; msg=&#34;上传文件成功！&#34;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.HtmlEdit.focus();&#34; &amp; vbcrlf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;var range = parent.HtmlEdit.document.sel&#101;ction.cr&#101;ateRange();&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; FileType=right(fileExt,3)<br/>&nbsp;&nbsp; sel&#101;ct case FileType<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case &#34;jpg&#34;,&#34;gif&#34;,&#34;png&#34;,&#34;bmp&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;range.pasteHTML(&#39;&lt;img src=&#34; &amp; filename &amp; &#34;&gt;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp;case &#34;swf&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;range.pasteHTML(&#39;&lt;object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;param name=movie value=&#34; &amp; FileName &amp; &#34;&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;param name=quality value=high&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;embed src=&#34; &amp; FileName &amp; &#34; quality=high pluginspage=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash type=application/x-shockwave-flash&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;/embed&gt;&lt;/object&gt;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp;case else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;range.text=&#39;[upload=&#34; &amp; FileType &amp; &#34;]&#34; &amp; FileName &amp; &#34;[/upload]&#39;;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp; end sel&#101;ct<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.DefaultPicUrl.value=&#39;&#34; &amp; FileName &amp; &#34;&#39;;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.DefaultPicList.options[parent.parent.form1.DefaultPicList.length] = new Option(&#39;&#34; &amp; filename &amp; &#34;&#39;,&#39;&#34; &amp; filename &amp; &#34;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.DefaultPicList.sel&#101;ctedIndex+=1;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;if(parent.parent.form1.UploadFiles.value==&#39;&#39;){&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.UploadFiles.value+=&#39;&#34; &amp; filename &amp; &#34;&#39;;}&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;else{&#34; &amp; vbcrlf &amp; &#34;parent.parent.form1.UploadFiles.value+=&#39;|&#39;+&#39;&#34; &amp; filename &amp; &#34;&#39;;}&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;strJS=strJS &amp; &#34;alert(&#39;&#34; &amp; msg &amp; &#34;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp;strJS=strJS &amp; &#34;history.go(-1);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;strJS=strJS &amp; &#34;parent.HtmlEdit.focus();&#34; &amp; vbcrlf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;strJS=strJS &amp; &#34;&lt;/script&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;response.write strJS<br/>&nbsp;&nbsp;set file=nothing<br/> next<br/> set upload=nothing<br/>end sub<br/>%&gt;<br/><br/> <br/><br/><br/>Inc/config.asp<br/><br/>以下是引用片段：<br/>&lt;%<br/>Const MaxPerPage_Default=10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;首页每页文章数<br/>Const MaxPerPage_Search=10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;文章搜索页每页文章数<br/>Const MaxBigClassNumPerLine=10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;每行显示文章大类数<br/>Const MaxSmallClassNumPerLine=10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;每行显示文章小类数<br/>Const ShowSmallClassType_Default=&#34;Menu&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;首页的子栏目显示样式<br/>Const ShowSmallClassType_Search=&#34;Tree&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;文章搜索页的子栏目显示样式<br/>Const ShowSmallClassType_Article=&#34;Top&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;文章内容页的子栏目显示样式<br/>Const ShowSmallClassType_Other=&#34;Menu&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;其他页面的子栏目显示样式<br/>Const ShowContentByPage=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;文章内容是否分页显示<br/>Const MaxPerPage_Content=200000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;每页显示大约字符数<br/>Const ShowRunTime=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;是否显示页面执行时间<br/>Const EnableArticleCheck=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;是否启用文章审核功能<br/>Const EnableUploadFile=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;是否开放文件上传<br/>Const EnableLinkReg=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;是否开放友情链接申请<br/>Const PopAnnounce=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;是否弹出公告窗口<br/>Const HitsOfHot=500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;热门文章点击数<br/>Const MailObject=&#34;Jmail&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;邮件发送组件<br/>Const MaxFileSize=3000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;上传文件大小限制<br/>Const SaveUpFilesPath=&#34;UploadFiles&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;存放上传文件的目录<br/>Const UpFileType=&#34;gif|jpg&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;允许的上传文件类型<br/>Const DelUpFiles=&#34;Yes&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;删除文章时是否同时删除文章中的上传文件<br/>%&gt; <br/><br/><br/>include file=&#34;Inc/upload.asp<br/><br/>以下是引用片段：<br/>&lt;%<br/>&#39;----------------------------------------------------------------------<br/>&#39;转发时请保留此声明信息,这段声明不并会影响你的速度!<br/>&#39;*******************&nbsp;&nbsp;&nbsp;&nbsp;无组件上传类&nbsp;&nbsp; ********************************<br/>&#39;修改者:梁无惧<br/>&#39;电子邮件:yjlrb@21cn.com<br/>&#39;网站:<a href="http://www.25cn.com" target="_blank" rel="external">http://www.25cn.com</a><br/>&#39;原作者:稻香老农<br/>&#39;原作者网站:<a href="http://www.5xsoft.com" target="_blank" rel="external">http://www.5xsoft.com</a><br/>&#39;声明:此上传类是在化境编程界发布的无组件上传类的基础上修改的.<br/>&#39;在与化境编程界无组件上传类相比,速度快了将近50倍,当上传4M大小的文件时<br/>&#39;服务器只需要10秒就可以处理完,是目前最快的无组件上传程序,当前版本为0.96<br/>&#39;源代码公开,免费使用,对于商业用途,请与作者联系<br/>&#39;文件属性：例如上传文件为c:\myfile\doc.txt<br/>&#39;FileName&nbsp;&nbsp;&nbsp;&nbsp;文件名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串&nbsp;&nbsp;&nbsp;&nbsp;&#34;doc.txt&#34;<br/>&#39;FileSize&nbsp;&nbsp;&nbsp;&nbsp;文件大小&nbsp;&nbsp;&nbsp;&nbsp; 数值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1210<br/>&#39;FileType&nbsp;&nbsp;&nbsp;&nbsp;文件类型&nbsp;&nbsp;&nbsp;&nbsp; 字符串&nbsp;&nbsp;&nbsp;&nbsp;&#34;text/plain&#34;<br/>&#39;FileExt&nbsp;&nbsp;&nbsp;&nbsp; 文件扩展名&nbsp;&nbsp; 字符串&nbsp;&nbsp;&nbsp;&nbsp;&#34;txt&#34;<br/>&#39;FilePath&nbsp;&nbsp;&nbsp;&nbsp;文件原路径&nbsp;&nbsp; 字符串&nbsp;&nbsp;&nbsp;&nbsp;&#34;c:\myfile&#34;<br/>&#39;使用时注意事项:<br/>&#39;由于Scripting.Dictionary区分大小写,所以在网页及ASP页的项目名都要相同的大小<br/>&#39;写,如果人习惯用大写或小写,为了防止出错的话,可以把<br/>&#39;sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)<br/>&#39;改为<br/>&#39;(小写者)sFormName = LCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))<br/>&#39;(大写者)sFormName = UCase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))<br/>&#39;**********************************************************************<br/>&#39;----------------------------------------------------------------------<br/>dim oUpFileStream<br/><br/>Class upload_file<br/>&nbsp;&nbsp;<br/>dim Form,File,Version<br/>&nbsp;&nbsp;<br/>Private Sub Class_Initialize <br/>&nbsp;&nbsp; &#39;定义变量<br/>&nbsp;&nbsp;dim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo<br/>&nbsp;&nbsp;dim iFileSize,sFilePath,sFileType,sFormvalue,sFileName<br/>&nbsp;&nbsp;dim iFindStart,iFindEnd<br/>&nbsp;&nbsp;dim iFormStart,iFormEnd,sFormName<br/>&nbsp;&nbsp; &#39;代码开始<br/>&nbsp;&nbsp;Version=&#34;无组件上传类 Version 0.96&#34;<br/>&nbsp;&nbsp;set Form = Server.Cr&#101;ateObject(&#34;Scripting.Dictionary&#34;)<br/>&nbsp;&nbsp;set File = Server.Cr&#101;ateObject(&#34;Scripting.Dictionary&#34;)<br/>&nbsp;&nbsp;if Request.TotalBytes &lt; 1 then Exit Sub<br/>&nbsp;&nbsp;set tStream = Server.Cr&#101;ateObject(&#34;adodb.stream&#34;)<br/>&nbsp;&nbsp;set oUpFileStream = Server.Cr&#101;ateObject(&#34;adodb.stream&#34;)<br/>&nbsp;&nbsp;oUpFileStream.Type = 1<br/>&nbsp;&nbsp;oUpFileStream.Mode = 3<br/>&nbsp;&nbsp;oUpFileStream.Open <br/>&nbsp;&nbsp;oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)<br/>&nbsp;&nbsp;oUpFileStream.Position=0<br/>&nbsp;&nbsp;RequestBinDate = oUpFileStream.Read <br/>&nbsp;&nbsp;iFormEnd = oUpFileStream.Size<br/>&nbsp;&nbsp;bCrLf = chrB(13) &amp; chrB(10)<br/>&nbsp;&nbsp;&#39;取得每个项目之间的分隔符<br/>&nbsp;&nbsp;sStart = MidB(RequestBinDate,1, InStrB(1,RequestBinDate,bCrLf)-1)<br/>&nbsp;&nbsp;iStart = LenB (sStart)<br/>&nbsp;&nbsp;iFormStart = iStart+2<br/>&nbsp;&nbsp;&#39;分解项目<br/>&nbsp;&nbsp;Do<br/>&nbsp;&nbsp;&nbsp;&nbsp;iInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf &amp; bCrLf)+3<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Type = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Mode = 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Open<br/>&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.Position = iFormStart<br/>&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Position = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Type = 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Charset =&#34;gb2312&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sInfo = tStream.ReadText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;取得表单项目名称<br/>&nbsp;&nbsp;&nbsp;&nbsp;iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;iFindStart = InStr(22,sInfo,&#34;name=&#34;&#34;&#34;,1)+6<br/>&nbsp;&nbsp;&nbsp;&nbsp;iFindEnd = InStr(iFindStart,sInfo,&#34;&#34;&#34;&#34;,1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;如果是文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;if InStr (45,sInfo,&#34;filename=&#34;&#34;&#34;,1) &gt; 0 then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set oFileInfo= new FileInfo<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;取得文件属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iFindStart = InStr(iFindEnd,sInfo,&#34;filename=&#34;&#34;&#34;,1)+10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iFindEnd = InStr(iFindStart,sInfo,&#34;&#34;&#34;&#34;,1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FileName = GetFileName(sFileName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FilePath = GetFilePath(sFileName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FileExt = GetFileExt(sFileName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iFindStart = InStr(iFindEnd,sInfo,&#34;Content-Type: &#34;,1)+14<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iFindEnd = InStr(iFindStart,sInfo,vbCr)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FileStart = iInfoEnd<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FileSize = iFormStart -iInfoEnd -2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFileInfo.FormName = sFormName<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.add sFormName,oFileInfo<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;如果是表单项目<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Close<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Type = 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Mode = 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Open<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.Position = iInfoEnd <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Position = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Type = 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tStream.Charset = &#34;gb2312&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sFormvalue = tStream.ReadText <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form.Add sFormName,sFormvalue<br/>&nbsp;&nbsp;&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;&nbsp;&nbsp;tStream.Close<br/>&nbsp;&nbsp;&nbsp;&nbsp;iFormStart = iFormStart+iStart+2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;如果到文件尾了就退出<br/>&nbsp;&nbsp;&nbsp;&nbsp;loop until (iFormStart+2) = iFormEnd <br/>&nbsp;&nbsp;RequestBinDate=&#34;&#34;<br/>&nbsp;&nbsp;set tStream = nothing<br/>End Sub<br/><br/>Private Sub Class_Terminate&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#39;清除变量及对像<br/>&nbsp;&nbsp;if not Request.TotalBytes&lt;1 then<br/>&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.Close<br/>&nbsp;&nbsp;&nbsp;&nbsp;set oUpFileStream =nothing<br/>&nbsp;&nbsp;&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;Form.RemoveAll<br/>&nbsp;&nbsp;File.RemoveAll<br/>&nbsp;&nbsp;set Form=nothing<br/>&nbsp;&nbsp;set File=nothing<br/>End Sub<br/>&nbsp;&nbsp; <br/> &#39;取得文件路径<br/>Private function GetFilePath(FullPath)<br/>&nbsp;&nbsp;If FullPath &lt;&gt; &#34;&#34; Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;GetFilePath = left(FullPath,InStrRev(FullPath, &#34;\&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;GetFilePath = &#34;&#34;<br/>&nbsp;&nbsp;End If<br/>End function<br/> <br/>&#39;取得文件名<br/>Private function GetFileName(FullPath)<br/>&nbsp;&nbsp;If FullPath &lt;&gt; &#34;&#34; Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;GetFileName = mid(FullPath,InStrRev(FullPath, &#34;\&#34;)+1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;GetFileName = &#34;&#34;<br/>&nbsp;&nbsp;End If<br/>End function<br/><br/>&#39;取得扩展名<br/>Private function GetFileExt(FullPath)<br/>&nbsp;&nbsp;If FullPath &lt;&gt; &#34;&#34; Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;GetFileExt = mid(FullPath,InStrRev(FullPath, &#34;.&#34;)+1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;GetFileExt = &#34;&#34;<br/>&nbsp;&nbsp;End If<br/>End function<br/><br/>End Class<br/><br/>&#39;文件属性类<br/>Class FileInfo<br/>&nbsp;&nbsp;dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt<br/>&nbsp;&nbsp;Private Sub Class_Initialize <br/>&nbsp;&nbsp;&nbsp;&nbsp;FileName = &#34;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FilePath = &#34;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FileSize = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;FileStart= 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;FormName = &#34;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FileType = &#34;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FileExt = &#34;&#34;<br/>&nbsp;&nbsp;End Sub<br/>&nbsp;&nbsp;<br/>&#39;保存文件方法<br/> Public function SaveToFile(FullPath)<br/>&nbsp;&nbsp;&nbsp;&nbsp;dim oFileStream,ErrorChar,i<br/>&nbsp;&nbsp;&nbsp;&nbsp;SaveToFile=1<br/>&nbsp;&nbsp;&nbsp;&nbsp;if trim(fullpath)=&#34;&#34; o&#114; right(fullpath,1)=&#34;/&#34; then exit function<br/>&nbsp;&nbsp;&nbsp;&nbsp;set oFileStream=Cr&#101;ateObject(&#34;Adodb.Stream&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;oFileStream.Type=1<br/>&nbsp;&nbsp;&nbsp;&nbsp;oFileStream.Mode=3<br/>&nbsp;&nbsp;&nbsp;&nbsp;oFileStream.Open<br/>&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.position=FileStart<br/>&nbsp;&nbsp;&nbsp;&nbsp;oUpFileStream.copyto oFileStream,FileSize<br/>&nbsp;&nbsp;&nbsp;&nbsp;oFileStream.SaveToFile FullPath,2<br/>&nbsp;&nbsp;&nbsp;&nbsp;oFileStream.Close<br/>&nbsp;&nbsp;&nbsp;&nbsp;set oFileStream=nothing <br/>&nbsp;&nbsp;&nbsp;&nbsp;SaveToFile=0<br/>&nbsp;&nbsp;end function<br/>End Class<br/>%&gt;<br/> <br/><br/><br/>漏洞利用方法<br/><br/>以下是引用片段：<br/>&lt;form action=http://www.qhwins.com/upfile.asp method=post name=form1 enctype=multipart/form-data&gt;<br/>&lt;form name=&#34;form&#34; method=&#34;post&#34; action=&#34;Adm_UpFile.asp&#34; enctype=&#34;multipart/form-data&#34;&gt;<br/>&nbsp;&nbsp;&lt;td valign=&#34;middle&#34;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&#34;file&#34; name=&#34;file1&#34; size=&#34;40&#34;&gt;&lt;br /&gt;&lt;br /&gt;<br/>&nbsp;&nbsp;&amp;nbsp;&lt;/a&gt; &lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td valign=&#34;middle&#34;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&#34;file&#34; name=&#34;file2&#34; size=&#34;40&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;&lt;input type=&#34;submit&#34; name=&#34;Submit&#34; value=&#34;上传&#34;&gt;&lt;/a&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br/> &lt;/form&gt;<br/>&lt;form&gt; <br/><br/><br/>本来要详解一下漏洞产生的原因，结果没有时间，我直接给出修补后的代码吧，有兴趣的人加我QQ，没有兴趣的人直接拿去用吧。<br/><br/>upfile.asp<br/><br/><br/>&lt;!--#include file=&#34;Inc/config.asp&#34;--&gt;<br/>&lt;!--#include file=&#34;Inc/upload.asp&#34;--&gt;<br/>&lt;%<br/>&#39;孤行一鬼修改上传漏洞 西宁威势电子信息服务有限公司提供技术支持 <a href="http://www.qhwins.com" target="_blank" rel="external">http://www.qhwins.com</a><br/>Server.ScriptTimeOut = 1800<br/>const upload_type=0&nbsp;&nbsp; &#39;上传方法：0=无惧无组件上传类，1=FSO上传 2=lyfupload，3=aspupload，4=chinaaspupload<br/><br/>dim upload,file,formName,SavePath,filename,fileExt<br/>dim upNum<br/>dim EnableUpload<br/>dim Forumupload<br/>dim ranNum<br/>dim uploadfiletype<br/>dim msg,founderr<br/>msg=&#34;&#34;<br/>founderr=false<br/>EnableUpload=false<br/>SavePath = SaveUpFilesPath&nbsp;&nbsp; &#39;存放上传文件的目录<br/>if right(SavePath,1)&lt;&gt;&#34;/&#34; then SavePath=SavePath&amp;&#34;/&#34; &#39;在目录后加(/)<br/>%&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;%<br/>if EnableUploadFile=&#34;No&#34; then<br/> response.write &#34;系统未开放文件上传功能&#34;<br/>else<br/> &#39;if session(&#34;name&#34;)=&#34;&#34; then<br/> &#39; response.Write(&#34;请登录后再使用本功能！&#34;)<br/> &#39;else<br/>&nbsp;&nbsp;sel&#101;ct case upload_type<br/>&nbsp;&nbsp; case 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;call upload_0()&nbsp;&nbsp;&#39;使用化境无组件上传类<br/>&nbsp;&nbsp; case else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;response.write &#34;本系统未开放插件功能&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;response.end<br/>&nbsp;&nbsp;end sel&#101;ct<br/> &#39;end if<br/>end if<br/>%&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/>&lt;%<br/>sub upload_0()&nbsp;&nbsp;&nbsp;&nbsp;&#39;使用化境无组件上传类<br/> set upload=new upload_file&nbsp;&nbsp;&nbsp;&nbsp;&#39;建立上传对象<br/> for each formName in upload.file &#39;列出所有上传了的文件<br/>&nbsp;&nbsp;set file=upload.file(formName)&nbsp;&nbsp;&#39;生成一个文件对象<br/>&nbsp;&nbsp;if file.filesize&lt;100 then<br/>&nbsp;&nbsp;&nbsp;&nbsp;msg=&#34;请先选择你要上传的文件！&#34;<br/>&nbsp;&nbsp; founderr=true<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;if file.filesize&gt;(MaxFileSize*1024) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;msg=&#34;文件大小超过了限制，最大只能上传&#34; &amp; CStr(MaxFileSize) &amp; &#34;K的文件！&#34;<br/>&nbsp;&nbsp; founderr=true<br/>&nbsp;&nbsp;end if<br/><br/>&nbsp;&nbsp;fileExt=lcase(file.FileExt)<br/>&nbsp;&nbsp;Forumupload=split(UpFileType,&#34;|&#34;)<br/><br/>&nbsp;&nbsp;for i=0 to ubound(Forumupload)<br/>&nbsp;&nbsp; if fileEXT=trim(Forumupload(i)) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;EnableUpload=true<br/>&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;EnableUpload=false<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#39;exit for<br/>&nbsp;&nbsp; end if<br/>&nbsp;&nbsp;next<br/><br/>&nbsp;&nbsp;if fileEXT=&#34;asp&#34; o&#114; fileEXT=&#34;asa&#34; o&#114; fileEXT=&#34;aspx&#34; then<br/>&nbsp;&nbsp; EnableUpload=false<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;if EnableUpload=false then<br/>&nbsp;&nbsp; msg=&#34;这种文件类型不允许上传！\n\n孤行一鬼修补此上传漏洞（<a href="http://www.qhwins.com" target="_blank" rel="external">http://www.qhwins.com</a>），只允许上传这几种文件类型：&#34; &amp; UpFileType<br/>&nbsp;&nbsp; founderr=true<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;strJS=&#34;&lt;SCRIPT language=javascript&gt;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;if founderr&lt;&gt;true then<br/>&nbsp;&nbsp; randomize<br/>&nbsp;&nbsp; ranNum=int(900*rnd)+100<br/>&nbsp;&nbsp; filename=SavePath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;&#34;.&#34;&amp;fileExt<br/>&nbsp;&nbsp; file.SaveToFile Server.mappath(FileName)&nbsp;&nbsp; &#39;保存文件<br/><br/>&nbsp;&nbsp; msg=&#34;上传文件成功！&#34;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.HtmlEdit.focus();&#34; &amp; vbcrlf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;var range = parent.HtmlEdit.document.sel&#101;ction.cr&#101;ateRange();&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; FileType=right(fileExt,3)<br/>&nbsp;&nbsp; sel&#101;ct case FileType<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case &#34;jpg&#34;,&#34;gif&#34;,&#34;png&#34;,&#34;bmp&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;range.pasteHTML(&#39;&lt;img src=&#34; &amp; filename &amp; &#34;&gt;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp;case &#34;swf&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;range.pasteHTML(&#39;&lt;object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;param name=movie value=&#34; &amp; FileName &amp; &#34;&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;param name=quality value=high&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;embed src=&#34; &amp; FileName &amp; &#34; quality=high pluginspage=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash type=application/x-shockwave-flash&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;&lt;/embed&gt;&lt;/object&gt;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp;case else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;range.text=&#39;[upload=&#34; &amp; FileType &amp; &#34;]&#34; &amp; FileName &amp; &#34;[/upload]&#39;;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp; end sel&#101;ct<br/>&nbsp;&nbsp;&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.DefaultPicUrl.value=&#39;&#34; &amp; FileName &amp; &#34;&#39;;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.DefaultPicList.options[parent.parent.form1.DefaultPicList.length] = new Option(&#39;&#34; &amp; filename &amp; &#34;&#39;,&#39;&#34; &amp; filename &amp; &#34;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.DefaultPicList.sel&#101;ctedIndex+=1;&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;if(parent.parent.form1.UploadFiles.value==&#39;&#39;){&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;parent.parent.form1.UploadFiles.value+=&#39;&#34; &amp; filename &amp; &#34;&#39;;}&#34; &amp; vbcrlf<br/>&nbsp;&nbsp; strJS=strJS &amp; &#34;else{&#34; &amp; vbcrlf &amp; &#34;parent.parent.form1.UploadFiles.value+=&#39;|&#39;+&#39;&#34; &amp; filename &amp; &#34;&#39;;}&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;end if<br/>&nbsp;&nbsp;strJS=strJS &amp; &#34;alert(&#39;&#34; &amp; msg &amp; &#34;&#39;);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;&nbsp;&nbsp;strJS=strJS &amp; &#34;history.go(-1);&#34; &amp; vbcrlf<br/>&nbsp;&nbsp;strJS=strJS &amp; &#34;parent.HtmlEdit.focus();&#34; &amp; vbcrlf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;strJS=strJS &amp; &#34;&lt;/script&gt;&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;response.write strJS<br/>&nbsp;&nbsp;set file=nothing<br/> next<br/> set upload=nothing<br/>end sub<br/>%&gt;<br/><br/><br/> <br/> <br/><br/><br/>后记：以下这段是我看到网友“痛斥装B”的评论后添加的，呵呵，由于本人忒懒 ，上面的文章中没有分析漏洞产生原因，直接给出了漏洞修补结果，结果让牛人们骂我，并“痛斥我装B”，本着向大牛们学习的态度，我再唠叨几句吧<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的这段代码是网友发给我的，好像是某网站管理系统中的上传程序的页面，用的人挺多的，回下面评论中的“痛斥装B”兄弟的话，我粗略看完此源代码，漏洞在于逻辑漏洞，只要第一轮FOR循环中条件为真就跳出循环，让后面的文件格式不做检查，所以才让黑客有机可乘，所以我们可以同时提交多个文件进行上传，让第一个文件合法，促使条件为真，而后面的文件换成我们的木马，我们再看看作者对上传文件后辍名的过滤，程序上传允许的后辍名都写在CONFIG。ASP中的这一行<br/><br/>Const UpFileType=&#34;gif|jpg&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;允许的上传文件类型<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;程序作者用白名单对文件后辍名进行过滤，这也是一种比较保险的方法，尽管作者这样判断了，但似乎还对自己的代码很不放心，所以在后面代码中又写了一堆代码判断用户提交的是不是ASP之类的后辍名文件，如果是的话就停止上传，其实这段代码完全是没用的垃圾代码，有了第一个白名单过滤就足够了，其实作者后面写的一大堆的后辍名过滤可以很EASY的躲过，比如上传个SHELL.ASP+空格的后辍，这样很容易躺过了后辍名的判断，轻易上传木马。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;程序最后，在保存文件的时候，文件名所有的变量都是系统自动生成的，filename=SavePath&amp;year(now)&amp;month(now)&amp;day(now)&amp;hour(now)&amp;minute(now)&amp;second(now)&amp;ranNum&amp;&#34;.&#34;&amp;fileExt<br/>其中SavePath为写在页面中的变量，不可能让用户提交来欺骗，其它也是取自系统函数和随机数，更不可能欺骗，你要再说大漏洞躺在那边的话，只能是 fileExt 来欺骗，这个是上传类自动获取的，具体上传类的取文件后辍名的代码我没有检查过，因为用的人很多，我相信另有牛人检查过吧，我也懒得去检查，难道你说的是这里有漏洞？如果“痛斥装B”兄弟再次路过，恳请加我QQ，指点一二，我感激不尽！<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=507</link>
			<title><![CDATA[父页面用window.open()打开子页面，子页面向父页面input域回传值]]></title>
			<author>12631176@qq.com(wang)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Thu,26 May 2011 10:34:10 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=507</guid>
		<description><![CDATA[test.htm<br/><br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;title&gt;无标题文档&lt;/title&gt;<br/>&lt;/head&gt;<br/><br/>&lt;body&gt;<br/>&lt;input name=uname&gt;<br/>&lt;input type=button onclick=window.open(&#34;a.htm&#34;) value=选择&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/> <br/><br/>------------------------------------------------------------------------------------------<br/><br/>a.html<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;title&gt;无标题文档&lt;/title&gt;<br/>&lt;/head&gt;<br/>&lt;script&gt;<br/>function setvalue(v){<br/>window.opener.document.all.uname.value=v//该值可改为由数据库获得<br/>//window.opener.document.getElementById(&#34;test&#34;).innerHTML=&#34;由数据库获得&#34;<br/>opener=null;<br/>self.close();<br/>}<br/><br/>&lt;/script&gt;<br/>&lt;body&gt;<br/>&lt;sel&#101;ct name=user&gt;<br/>&lt;option value=人员1&gt;人员1&lt;/option&gt;<br/>&lt;option value=人员2&gt;人员2&lt;/option&gt;<br/>&lt;option value=人员3&gt;人员3&lt;/option&gt;<br/>&lt;/sel&#101;ct&gt;<br/>&lt;input onclick=setvalue(user.value) type=button&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=506</link>
			<title><![CDATA[javascript：使sel&#101;ct下拉框也可以输入文本]]></title>
			<author>12631176@qq.com(wang)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Wed,25 May 2011 19:07:09 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=506</guid>
		<description><![CDATA[&lt;!--Part code come from :<a href="http://us.f901.mail.yahoo.com/ym/Compose?YY=123456--" target="_blank" rel="external">http://us.f901.mail.yahoo.com/ym/Compose?YY=123456--</a>&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;&gt;<br/>&lt;title&gt;Editable listbox&lt;/title&gt;<br/><br/>&lt;style&gt;<br/><br/>/* Common elements */<br/>body{font:small/1.2em arial,helvetica,clean,sans-serif;font:x-small;}<br/>table{font-size:inherit;font:x-small;}<br/><br/><br/>/* Options Templates */<br/>.ac_menu{border:1px solid #3162A6;background-color:#F6F6F6;cursor:default;overflow:hidden;-moz-box-sizing:border-box;<br/> height:e&#173;xpression((this.scrollHeight&gt;210)?&#34;210px&#34;:&#34;auto&#34;)}<br/>.ac_menuitem{width:100%;color:#141414;padding:2px;cursor:pointer;cursor:hand;}<br/>.ac_menuitem_sel&#101;cted{background-color:#D6DEEC;width:100%;color:#141414;padding:2px;cursor:pointer;cursor:hand;}<br/><br/>/* JK */<br/>.minHeightTextarea{<br/> height:e&#173;xpression((this.scrollHeight&gt;150)?&#34;150px&#34;:(this.scrollHeight+5)+&#34;px&#34;);<br/> overflow : auto;<br/>}<br/><br/>&lt;/style&gt;<br/><br/><br/>&lt;script language=javascript&gt;<br/>var tofieldListArray=[&#34;深圳&#34;,&#34;bbb&#34;,&#34;ccc&#34;,&#34;ddd&#34;];<br/>var ccfieldListArray=tofieldListArray;<br/>&lt;/script&gt; <br/> <br/>&lt;script language=javascript&gt;<br/><br/> var AC_TAB = 9;&nbsp;&nbsp; // make the sel&#101;ction<br/> var AC_ENTER = 13;&nbsp;&nbsp; // make the sel&#101;ction<br/> var AC_UP_ARROW = 38;&nbsp;&nbsp;&nbsp;&nbsp;// move the dro&#112; down list sel&#101;ction up by one<br/> var AC_DOWN_ARROW = 40;&nbsp;&nbsp;// move the dro&#112; down list sel&#101;ction down by one<br/><br/> var theListDiv;<br/> var theComboxObj;<br/><br/> onload=OnLoad<br/> function OnLoad()<br/> {<br/>&nbsp;&nbsp;&nbsp;&nbsp; setTimeout(&#34;Initialize()&#34;, 100);<br/> }<br/><br/> function Initialize()<br/> {<br/>&nbsp;&nbsp; AddListDivFun(document.all.tofield);<br/>&nbsp;&nbsp; AddListDivFun(document.all.ccfield);&nbsp;&nbsp;&nbsp;&nbsp;<br/> }<br/> <br/> function AddListDivFun(obj)<br/> {<br/>&nbsp;&nbsp;var theListArray=eval(obj.id+&#34;ListArray&#34;);<br/>&nbsp;&nbsp;var tempStr=&#39;&lt;DIV style=&#34;position:relative;visibility:hidden&#34;&gt;&#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;+&#39;&lt;DIV class=ac_menu id=&#34;&#39;+obj.id+&#39;ListDiv&#34; style=&#34;FONT-SIZE: 0.9em; Z-INDEX: 1; visibility:hidden; POSITION: absolute;OVERFLOW-Y:auto; WIDTH:&#39;+obj.offsetWidth+&#39;; &#34; &#39;<br/>&nbsp;&nbsp;&nbsp;&nbsp;+&#39;onmouseover=&#34;mouseOverListDivFun(event)&#34; onmouseout=&#34;mouseOutListDivFun(event);&#34; onmousedown=&#34;mouseDownListDivFun(event);&#34;&gt;&#39;;<br/>&nbsp;&nbsp;for(var i=0;i&lt;theListArray.length;i++)<br/>&nbsp;&nbsp; tempStr+=&#39;&lt;DIV class=ac_menuitem&nbsp;&nbsp;value=&#39;+i+&#39; textValue=&#34;&#39;+htmlEncode(theListArray[i])+&#39;&#34;&gt;&#39;+htmlEncode(theListArray[i])+&#39;&lt;/DIV&gt;&#39;;<br/>&nbsp;&nbsp;tempStr+=&#34;&lt;/DIV&gt;&lt;/DIV&gt;&#34;;<br/>&nbsp;&nbsp;obj.ins&#101;rtAdjacentHTML(&#34;afterEnd&#34;,tempStr);<br/>&nbsp;&nbsp;theListDiv=eval(obj.id+&#34;ListDiv&#34;);<br/>&nbsp;&nbsp;obj.onfocus=AC_OnFocus;<br/>&nbsp;&nbsp;obj.onblur=AC_OnBlur;<br/>&nbsp;&nbsp;obj.onpropertychange=AC_OnPropertyChange;<br/>&nbsp;&nbsp;obj.onkeydown=AC_OnKeyDown;<br/>&nbsp;&nbsp;obj.autoComplete=&#34;off&#34;;<br/> }<br/> <br/> function AC_OnFocus(obj)<br/> {<br/>&nbsp;&nbsp;if(obj==null) obj=event.srcElement;<br/>&nbsp;&nbsp;theListDiv=eval(obj.id+&#34;ListDiv&#34;);<br/>&nbsp;&nbsp;theComboxObj=obj;<br/>&nbsp;&nbsp;theListDiv.style.visibility=&#34;visible&#34;;<br/>&nbsp;&nbsp;adjustListDivScroll();<br/> }<br/> <br/> function AC_OnBlur(obj)<br/> {<br/>&nbsp;&nbsp;if(obj==null) obj=event.srcElement;<br/>&nbsp;&nbsp;if(theListDiv.contains(document.activeElement)) obj.focus();<br/>&nbsp;&nbsp;else theListDiv.style.visibility=&#34;hidden&#34;;<br/> }<br/> <br/> function AC_OnPropertyChange(obj)<br/> {<br/>&nbsp;&nbsp;if(theListDiv==null) return ;<br/>&nbsp;&nbsp;if(obj==null) obj=event.srcElement;<br/>&nbsp;&nbsp;theListDiv.sel&#101;ctedIndex=-1;<br/>&nbsp;&nbsp;var theFirstVisibleIndex=-1;<br/>&nbsp;&nbsp;var objValue=obj.value;<br/>&nbsp;&nbsp;for(var i=0;i&lt;theListDiv.children.length;i++)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; if(theListDiv.children[i].textValue.indexOf(objValue)==0)<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(theFirstVisibleIndex==-1) theFirstVisibleIndex=i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;theListDiv.children[i].className=&#34;ac_menuitem&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;theListDiv.children[i].style.display=&#34;&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;theListDiv.children[i].innerHTML=&#34;&lt;b&gt;&#34;+htmlEncode(objValue)+&#34;&lt;/b&gt;&#34;+htmlEncode(theListDiv.children[i].textValue.substr(objValue.length));<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp; else <br/>&nbsp;&nbsp;&nbsp;&nbsp;theListDiv.children[i].style.display=&#34;none&#34;;<br/>&nbsp;&nbsp; if(theListDiv.sel&#101;ctedIndex==-1 &amp;&amp; theListDiv.children[i].textValue==objValue) theListDiv.sel&#101;ctedIndex=i;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;if(theListDiv.sel&#101;ctedIndex==-1 &amp;&amp; theFirstVisibleIndex!=-1) <br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; theListDiv.sel&#101;ctedIndex=theFirstVisibleIndex;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;if(theListDiv.sel&#101;ctedIndex!=-1) theListDiv.children[theListDiv.sel&#101;ctedIndex].className=&#34;ac_menuitem_sel&#101;cted&#34;;<br/>&nbsp;&nbsp;adjustListDivScroll();<br/> }<br/> <br/> function AC_OnKeyDown(obj)<br/> {<br/>&nbsp;&nbsp;if(theListDiv==null) return ;<br/>&nbsp;&nbsp;if(obj==null) obj=event.srcElement;<br/>&nbsp;&nbsp;var keyCode=event.keyCode;<br/>&nbsp;&nbsp;if(keyCode==AC_ENTER) keyCode=event.keyCode=AC_TAB;<br/>&nbsp;&nbsp;if(keyCode==AC_TAB &amp;&amp; theListDiv.sel&#101;ctedIndex!=-1) <br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; obj.value=theListDiv.children[theListDiv.sel&#101;ctedIndex].textValue;<br/>&nbsp;&nbsp; return ;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;if(keyCode==AC_UP_ARROW &amp;&amp; theListDiv.sel&#101;ctedIndex!=-1)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; for(var i=theListDiv.sel&#101;ctedIndex-1;i&gt;-1;i--)<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(theListDiv.children[i].style.display!=&#34;none&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp; theListDiv.children[theListDiv.sel&#101;ctedIndex].className=&#34;ac_menuitem&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; theListDiv.sel&#101;ctedIndex=i;<br/>&nbsp;&nbsp;&nbsp;&nbsp; theListDiv.children[theListDiv.sel&#101;ctedIndex].className=&#34;ac_menuitem_sel&#101;cted&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; adjustListDivScroll();<br/>&nbsp;&nbsp;&nbsp;&nbsp; break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/> <br/>&nbsp;&nbsp;if(keyCode==AC_DOWN_ARROW &amp;&amp; theListDiv.sel&#101;ctedIndex!=-1)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; for(var i=theListDiv.sel&#101;ctedIndex*1+1;i&lt;theListDiv.children.length;i++)<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(theListDiv.children[i].style.display!=&#34;none&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp; theListDiv.children[theListDiv.sel&#101;ctedIndex].className=&#34;ac_menuitem&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; theListDiv.sel&#101;ctedIndex=i;<br/>&nbsp;&nbsp;&nbsp;&nbsp; theListDiv.children[theListDiv.sel&#101;ctedIndex].className=&#34;ac_menuitem_sel&#101;cted&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; adjustListDivScroll();<br/>&nbsp;&nbsp;&nbsp;&nbsp; break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp; return;<br/>&nbsp;&nbsp;}<br/> <br/> }<br/> <br/> function htmlEncode(str)<br/> {<br/>&nbsp;&nbsp;if(str==null) return &#34;&#34;;<br/>&nbsp;&nbsp;str=str.replace(/&lt;/ig,&#34;&amp;lt;&#34;)<br/>&nbsp;&nbsp;str=str.replace(/&gt;/ig,&#34;&amp;gt;&#34;);<br/>&nbsp;&nbsp;str=str.replace(/&#34;/ig,&#34;&amp;quot;&#34;);<br/>&nbsp;&nbsp;return str;<br/> }<br/> <br/> function mouseOverListDivFun(event)<br/> {<br/>&nbsp;&nbsp;if(event.toElement!=theListDiv) event.toElement.style.backgroundColor=&#34;#E6E6E6&#34;;<br/> }<br/> <br/> function mouseOutListDivFun(event)<br/> {<br/>&nbsp;&nbsp;if(event.fromElement!=theListDiv) event.fromElement.style.backgroundColor=&#34;&#34;;<br/> }<br/> <br/> function mouseDownListDivFun(event)<br/> {<br/>&nbsp;&nbsp;var sel&#101;ctedStr=&#34;&#34;;<br/>&nbsp;&nbsp;if(event.srcElement==theListDiv) return;<br/>&nbsp;&nbsp;else if(event.srcElement.tagName==&#34;B&#34;) sel&#101;ctedStr=event.srcElement.parentElement.textValue ;<br/>&nbsp;&nbsp;else sel&#101;ctedStr=event.srcElement.textValue;<br/>&nbsp;&nbsp;theComboxObj.value=sel&#101;ctedStr;<br/>&nbsp;&nbsp;theComboxObj.blur();<br/> }<br/> function adjustListDivScroll()<br/> {<br/>&nbsp;&nbsp;if ( theListDiv==null || theListDiv.sel&#101;ctedIndex==-1 ) return ;<br/>&nbsp;&nbsp;var i=theListDiv.sel&#101;ctedIndex;<br/>&nbsp;&nbsp;if((theListDiv.children[i].offsetTop&lt;theListDiv.scrollTop)||(theListDiv.children[i].offsetTop&gt;theListDiv.scrollTop+200))<br/>&nbsp;&nbsp; theListDiv.scrollTop=theListDiv.children[i].offsetTop-95;<br/> }<br/> <br/>&lt;/script&gt;<br/><br/> <br/>&lt;/head&gt; <br/>&lt;body &gt;<br/> <br/><br/>&nbsp;&nbsp;<br/>&lt;form name=&#34;Compose&#34; id=&#34;Compose&#34; method=post action=&#34;2.jsp&#34;&gt;<br/><br/>&nbsp;&nbsp;&lt;table cellpadding=4 cellspacing=0 border=0 width=&#34;100%&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td &gt;Mail To:&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td style=&#34;padding-top:0px;&#34; &gt; &lt;textarea name=&#34;To&#34; class=&#34;minHeightTextarea&#34; style=&#34;width:300&#34; tabindex=&#34;1&#34; id=&#34;tofield&#34; <br/>rows=&#34;1&#34;&nbsp;&nbsp;title=&#34;textarea&#34; cols=&#34;20&#34;&gt;&lt;/textarea&gt; &lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td &gt;Mail Cc:&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td style=&#34;padding-top:0px;&#34; &gt; &lt;input name=&#34;Cc&#34; style=&#34;width:300&#34; tabindex=&#34;1&#34; id=&#34;ccfield&#34; value=&#34;&#34; title=&#34;input&#34;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td colspan=&#34;2&#34; &gt;&lt;input type=&#34;submit&#34; name=&#34;Submit&#34; value=&#34;Submit&#34;&gt;&lt;/td&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br/>&nbsp;&nbsp;&lt;/table&gt;<br/>&lt;/form&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;&nbsp;&nbsp;<br/><br/><br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br/>对于从数据库调下拉列表内容的方法，只需替换<br/>var tofieldListArray=[&lt;%<br/>&nbsp;&nbsp; UserAuthInte uAInte = new UserAuthInte();<br/>&nbsp;&nbsp; List funcList = uAInte.getAllFuncModels();<br/>&nbsp;&nbsp; Iterator ite = funcList.iterator();<br/>&nbsp;&nbsp; while (ite.hasNext() ) {<br/>&nbsp;&nbsp; FuncModel funcM = (FuncModel) ite.next();<br/>&nbsp;&nbsp; out.println(&#34;\&#34;&#34;+funcM.getFunctionName()+&#34;\&#34;,&#34;);<br/>&nbsp;&nbsp;}%&gt;];<br/>var ccfieldListArray=tofieldListArray;<br/>&lt;/script&gt; <br/><br/><br/>对于接受该下拉列表值，可用<br/> String tofield = new String(request.getParameter(&#34;To&#34;).getBytes(&#34;ISO8859_1&#34;),&#34;GBK&#34;);<br/>用name而不是ID。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.2369.net/blog/article.asp?id=505</link>
			<title><![CDATA[javascript数组去除重复数据]]></title>
			<author>12631176@qq.com(wang)</author>
			<category><![CDATA[校园文化]]></category>
			<pubDate>Wed,25 May 2011 18:45:08 +0800</pubDate>
			<guid>http://www.2369.net/blog/default.asp?id=505</guid>
		<description><![CDATA[Array.prototype.uniq = function() {&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var temp = {}, len = this.length;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var i=0; i&lt;len; i++)&nbsp;&nbsp;{&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(typeof temp[this[i]] == &#34;undefined&#34;) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[this[i]] = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.length = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var i in temp) {&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this[len++] = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/><br/><br/>]]></description>
		</item>
		
</channel>
</rss>
