<?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>KnH的秘密基地</title>
	<atom:link href="http://kanoha.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://kanoha.org</link>
	<description>神のハッカーの秘密の開発基地　　（KnH.C运营）</description>
	<lastBuildDate>Mon, 07 May 2012 03:30:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>好诡异</title>
		<link>http://kanoha.org/2012/05/07/server-downtime-again/</link>
		<comments>http://kanoha.org/2012/05/07/server-downtime-again/#comments</comments>
		<pubDate>Mon, 07 May 2012 03:29:26 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[站点维护等 | Site]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=787</guid>
		<description><![CDATA[貌似服务器挂掉了一阵子？怎么被恢复备份了= =&#124;&#124;&#124; 丢了不少评论呢 &#62; &#60; 唉]]></description>
			<content:encoded><![CDATA[<p>貌似服务器挂掉了一阵子？怎么被恢复备份了= =||| 丢了不少评论呢 &gt; &lt; 唉</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/05/07/server-downtime-again/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CommentCoreLibrary的三重过滤器</title>
		<link>http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/</link>
		<comments>http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/#comments</comments>
		<pubDate>Tue, 01 May 2012 15:19:51 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[开源项目 | OSI Projects]]></category>
		<category><![CDATA[弹幕播放器]]></category>
		<category><![CDATA[CommentCoreLibrary]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=773</guid>
		<description><![CDATA[马上就要考试了，所以趁着考试前，先把CCL的最新改良介绍一下。CommentCoreLibrary的宗旨是采用HTML + JS来实现复杂的弹幕效果和比Flash版本灵活许多倍的过滤器和效果库，于是这次的技术更新更是加强了这一点的优势，让大家有机会见识到可能的下一代过滤器效果。 CommentCoreLibrary目前的过滤器共有三重，分别为“规则过滤器”，“函数预处理器”和“行进间修正器”。 第一重过滤器 规则过滤器 规则过滤器是一个基于简单语法规则的弹幕过滤器，设计宗旨是能让观看者简单定义过滤器规则又能发挥强大的智能过滤效果。与传统的正则表达式过滤器相区别的是，规则过滤器提供的可扩展性语法更加强悍匹配对象。 规则过滤器采用一套近似编程判断式的语法，但是规则及其简单：[对象.属性] [操作符] [内容] 对象是一个能简单表达过滤器过滤对象的特征字符，比如 $ 表示“滚动弹幕”，即弹幕类型 1,2 ，而 B表示底部弹幕，P表示定位弹幕等等。属性是弹幕对象的原始属性的内部表达，比如 text 是弹幕内容文字，color是弹幕颜色，size是弹幕大小等等。操作符是一种用于进行判断的符号，比如 == 表示相同于&#8230;时过滤， ~ 表示匹配正则表达式&#8230;则过滤，range 表示数字在某范围内则过滤等等。内容则是符合对象相应属性下的可被操作符操作的一个样本。 第二重过滤器 函数预处理器 函数预处理器，是在应用CCL时候通过页面写入的（或许也可动态载入），它是在JavaScript下定义的一个或一组函数，在弹幕被展示到荧幕之前，所有弹幕的原始数据都会经过预处理器。预处理器与过滤器不同之处在于，预处理器不但能阻挡弹幕，还可以通过改变弹幕的属性而对弹幕“预处理”后再放出。 比如下面的代码会让所有的弹幕变成白色，小号滚动弹幕： cm.filter.addModifier(function(cmt){ cmt.size = 16; cmt.color = '#ffffff'; cmt.mode = 1; return cmt; }); &#8230; <a href="http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>马上就要考试了，所以趁着考试前，先把CCL的最新改良介绍一下。CommentCoreLibrary的宗旨是采用HTML + JS来实现复杂的弹幕效果和<span style="text-decoration: underline;">比Flash版本灵活许多倍的过滤器和效果库</span>，于是这次的技术更新更是加强了这一点的优势，让大家有机会见识到可能的下一代过滤器效果。</p>
<p><strong>CommentCoreLibrary</strong>目前的过滤器共有三重，分别为“<span style="color: #ff6600;"><strong>规则过滤器</strong></span>”，“<span style="color: #0000ff;"><strong>函数预处理器</strong></span>”和“<span style="color: #008000;"><strong>行进间修正器</strong></span>”。</p>
<h2>第一重过滤器 规则过滤器</h2>
<p><span style="text-decoration: underline;"><span style="color: #000000;"><strong>规则过滤器</strong></span></span>是一个基于简单语法规则的弹幕过滤器，设计宗旨是能让观看者简单定义过滤器规则又能发挥强大的智能过滤效果。与传统的正则表达式过滤器相区别的是，规则过滤器提供的可扩展性语法更加强悍匹配对象。</p>
<p><a href="http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/%e6%97%a0%e6%a0%87%e9%a2%98-3/" rel="attachment wp-att-774"><img class="size-full wp-image-774 alignleft" title="过滤器实例" src="http://kanoha.org/wp-content/uploads/2012/05/无标题.png" alt="" width="223" height="67" /></a>规则过滤器采用一套近似编程判断式的语法，但是规则及其简单：<code>[对象.属性] [操作符] [内容]</code></p>
<p><span style="color: #800080;">对象</span>是一个能简单表达过滤器过滤对象的特征字符，比如 $ 表示“滚动弹幕”，即弹幕类型 1,2 ，而 B表示底部弹幕，P表示定位弹幕等等。<span style="color: #ff0000;">属性</span>是弹幕对象的原始属性的内部表达，比如 text 是弹幕内容文字，color是弹幕颜色，size是弹幕大小等等。<span style="color: #0000ff;">操作符</span>是一种用于进行判断的符号，比如 == 表示相同于&#8230;时过滤， ~ 表示匹配正则表达式&#8230;则过滤，range 表示数字在某范围内则过滤等等。<span style="color: #ff9900;">内容</span>则是符合对象相应属性下的可被操作符操作的一个样本。<span id="more-773"></span></p>
<h2>第二重过滤器 函数预处理器</h2>
<p><strong>函数预处理器</strong>，是在应用CCL时候通过页面写入的（或许也可动态载入），它是在JavaScript下定义的一个或一组函数，在弹幕被展示到荧幕之前，所有弹幕的原始数据都会经过预处理器。预处理器与过滤器不同之处在于，预处理器不但能阻挡弹幕，还可以通过改变弹幕的属性而对弹幕“预处理”后再放出。</p>
<p>比如下面的代码会让所有的弹幕变成白色，小号滚动弹幕：<br />
<code></code></p>
<pre>cm.filter.addModifier(function(cmt){
    cmt.size = 16;
    cmt.color = '#ffffff';
    cmt.mode = 1;
    return cmt;
});</pre>
<p>&nbsp;</p>
<p><code></code><br />
很酷吧，我们还能叠加一些弹幕的属性，呈现出更加奇特的效果。当然这都由你来发挥。</p>
<h2>第三重过滤器 行进间修正器</h2>
<p><strong>行进间修正器</strong>是最后一重过滤设计，它是一个单一函数，用于处理弹幕生命过程中的一切重新定位效果。它在每条弹幕的每次运动触发器触发，并且可以最大限度的进行弹幕的行进间设定，有了这个修正器，我们可以实现非常奇葩的弹幕修正效果。</p>
<p>举下自带fefx库里面的两个例子：</p>
<div id="attachment_775" class="wp-caption aligncenter" style="width: 596px"><a href="http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/%e6%97%a0%e6%a0%87%e9%a2%98-4/" rel="attachment wp-att-775"><img class=" wp-image-775 " title="弹幕中部隐藏" src="http://kanoha.org/wp-content/uploads/2012/05/无标题1.png" alt="" width="586" height="498" /></a><p class="wp-caption-text">可以看到，中间的滚动弹幕透明度很高，而两端的弹幕则相对清晰</p></div>
<p><strong>弹幕中央隐藏</strong>： 有些人可能不是很适应弹幕播放器的文字在视频上方划过而阻挡下面的视频内容，当然，你可以通过设定透明度来解决一部分问题，不过这里有一个更好的方式——载入弹幕中央隐藏修正器。</p>
<p>弹幕中央隐藏行进间修补的实现模式如下：检测弹幕类型 mode == 1 || mode == 2 ，计算一下位置 pos = ttl/dur（生存剩余时间/生命周期），计算透明度（pos &gt; 30% &amp;&amp; pos &lt; 70% : opacity = 0.2 else : opacity = 超出的比例 * 0.8 + 0.2）。</p>
<div id="attachment_776" class="wp-caption aligncenter" style="width: 598px"><a href="http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/%e6%97%a0%e6%a0%87%e9%a2%98-5/" rel="attachment wp-att-776"><img class="size-full wp-image-776" title="弹幕中央加速" src="http://kanoha.org/wp-content/uploads/2012/05/无标题2.png" alt="" width="588" height="492" /></a><p class="wp-caption-text">弹幕飘过中部的时候加速通过</p></div>
<p><strong>弹幕中央加速</strong>：同样也是为了降低弹幕的阻挡时间，弹幕中央加速用于在弹幕移动到中部位置的时候，加快其行进速度，从而降低阻挡画面的时间。和前面的实现相似，本过滤器采用缩短弹幕生命剩余时长的方式让弹幕快速通过。</p>
<h2>其他</h2>
<p>当然，除了这些改进之外，CCL还增加了一些稳定性和兼容性的改进，比如在Chrome和Firefox下可以统一弹幕中的“换行” 等。有兴趣可以继续关注  <a href="https://github.com/jabbany/CommentCoreLibrary">https://github.com/jabbany/CommentCoreLibrary</a>或者 到： <a href="http://tools.kanoha.org/experimental/CommentCore">http://tools.kanoha.org/experimental/CommentCore</a> 进行体验！</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/05/01/three-layers-of-filters-in-commentcorelibrary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最近装了下Dropbox</title>
		<link>http://kanoha.org/2012/04/27/dropbox-pic-funny/</link>
		<comments>http://kanoha.org/2012/04/27/dropbox-pic-funny/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 17:13:12 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[吐槽 | Tsukkomi]]></category>
		<category><![CDATA[ACG]]></category>
		<category><![CDATA[吐槽]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=758</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div style="background:#111;width:100%;"><div id="attachment_759" class="wp-caption aligncenter" style="width: 355px"><a href="http://kanoha.org/2012/04/27/dropbox-pic-funny/%e6%97%a0%e6%a0%87%e9%a2%982/" rel="attachment wp-att-759"><img class="size-full wp-image-759" title="最近装了下Dropbox" src="http://kanoha.org/wp-content/uploads/2012/04/无标题2.png" alt="" width="345" height="351" /></a><p class="wp-caption-text">...感觉中文系统下英文名字名字不太协调，就改了下</p></div></div>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/04/27/dropbox-pic-funny/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IOCCC大赛结果公布，阿卡林上榜</title>
		<link>http://kanoha.org/2012/04/25/ioccc-results-and-akarin/</link>
		<comments>http://kanoha.org/2012/04/25/ioccc-results-and-akarin/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 17:50:26 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[新闻新解读 | News Digest]]></category>
		<category><![CDATA[知识性 | Informative]]></category>
		<category><![CDATA[IOCCC]]></category>
		<category><![CDATA[阿卡林]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=753</guid>
		<description><![CDATA[断了好久的IOCCC大赛貌似今年终于又开始大放异彩了，C系程序员们真是一年比一年奇葩了啊（= =&#124;&#124;&#124;） IOCCC大赛（世界C语言混乱化大赛）的宗旨是让程序员写出最“难懂”，“诡异”或是让人捉摸不透的艺术性代码。单程序被限定在4KB以内，要以视觉上或理解上最坑的方式作出有功能的代码。 之前坑了几年，今年打开了获奖名单，发现第一位是一个叫做Akari的投稿，作者是Don Hsi-Yun Yang，然后看着这名字和作品名字，貌似有印象之前见过这位的另一个获奖神作，把校验码放到文件本身的。 好奇之下代开了源码和说明，然后，请见上图。当然，IOCCC的要求是，除了“艺术性（所谓‘混乱’的代码排版）”以外，程序还要有足够靠谱的功能性。这个程序获得了最佳展示奖——最能“收缩”。 程序的本体是一个图片压缩器，可以将 Pixmap和ASCII字符画的图片进行向下压缩大小（缩放），当然了，这仅仅是第一层。你会发现，程序本身就是一幅ASCII字符画，而把程序的源码通过编译版的程序之后，则会获得另一个缩小了的源码。令人吃惊的是，这个缩小了的源码，依然是有效可编译的。编译后又是一个文字过滤器，可以对文字进行rot13“加密”。当然作者说，这并不是终极，再把缩小后的ASCII程序再缩小一次，将获得第三个程序源码，继续缩小则会获得第四个程序源码。后两个程序源码编译运行后，会分别在屏幕上输出文字。 当然，这个颇有存在感的二次元向作品以外，还有很多神奇的优秀作品。比如：世界上最“无需说明文档”的科学计算器。 会让你吃惊它居然是拿C语言完成的，而且完全不会出现编译警告。 投稿作品从游戏到算法，从“绘图”到“计算”，涵盖了各种领域。而代码的样式更是多种多样（单行程序、反语法程序等）。如果你觉得你的C语言程度足够好，快去看看这些奇葩的程序吧。]]></description>
			<content:encoded><![CDATA[<p>断了好久的IOCCC大赛貌似<a href="http://www.ioccc.org/years.html#2011" target="_blank">今年终于又开始大放异彩了</a>，<strong>C系程序员们真是一年比一年奇葩了啊</strong>（= =|||）</p>
<p><a href="http://kanoha.org/2012/04/25/ioccc-results-and-akarin/%e6%97%a0%e6%a0%87%e9%a2%98/" rel="attachment wp-att-754"><img class="aligncenter size-full wp-image-754" title="阿卡林啊" src="http://kanoha.org/wp-content/uploads/2012/04/无标题.png" alt="" width="832" height="667" /></a></p>
<p><span id="more-753"></span></p>
<p><strong>IOCCC大赛（世界C语言混乱化大赛）</strong>的宗旨是让程序员写出最“难懂”，“诡异”或是让人捉摸不透的艺术性代码。单程序被限定在4KB以内，要以视觉上或理解上最坑的方式作出有功能的代码。</p>
<p>之前坑了几年，今年打开了获奖名单，发现第一位是一个叫做Akari的投稿，作者是Don Hsi-Yun Yang，然后看着这名字和作品名字，貌似有印象之前见过这位的另一个获奖神作，把校验码放到文件本身的。</p>
<p>好奇之下代开了源码和说明，然后，请见上图。当然，IOCCC的要求是，除了“艺术性（所谓‘混乱’的代码排版）”以外，程序还要有足够靠谱的功能性。这个程序获得了<strong>最佳展示奖——最能“收缩”</strong>。</p>
<p>程序的本体是一个图片压缩器，可以将 Pixmap和ASCII字符画的图片进行向下压缩大小（缩放），当然了，这仅仅是第一层。你会发现，程序本身就是一幅ASCII字符画，而把程序的源码通过编译版的程序之后，则会获得<span style="text-decoration: underline;">另一个缩小了的源码</span>。令人吃惊的是，这个缩小了的源码，依然是有效可编译的。编译后又是一个文字过滤器，可以对文字进行rot13“加密”。当然作者说，这并不是终极，再把缩小后的ASCII程序再缩小一次，将获得第三个程序源码，继续缩小则会获得第四个程序源码。后两个程序源码编译运行后，会分别在屏幕上输出文字。</p>
<p>当然，这个<del>颇有存在感</del>的二次元向作品以外，还有很多神奇的优秀作品。比如：<strong>世界上最“无需说明文档”的科学计算器</strong>。<a href="http://kanoha.org/2012/04/25/ioccc-results-and-akarin/%e6%97%a0%e6%a0%87%e9%a2%98-2/" rel="attachment wp-att-755"><img class="aligncenter size-full wp-image-755" title="不科学的科学计算器" src="http://kanoha.org/wp-content/uploads/2012/04/无标题1.png" alt="" width="784" height="709" /></a></p>
<p>会让你吃惊它居然是拿C语言完成的，而且完全不会出现编译警告。</p>
<p>投稿作品从游戏到算法，从“绘图”到“计算”，涵盖了各种领域。而代码的样式更是多种多样（单行程序、反语法程序等）。如果你觉得你的C语言程度足够好，快去看看这些奇葩的程序吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/04/25/ioccc-results-and-akarin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSRF与降权拒绝服务攻击</title>
		<link>http://kanoha.org/2012/04/17/csrf-and-privilege-dropping-denial-of-service/</link>
		<comments>http://kanoha.org/2012/04/17/csrf-and-privilege-dropping-denial-of-service/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 17:29:05 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[知识性 | Informative]]></category>
		<category><![CDATA[CSRF]]></category>
		<category><![CDATA[漏洞]]></category>
		<category><![CDATA[网络]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=747</guid>
		<description><![CDATA[闲暇之余，加上某一些正在内测的站点准备运行之际，稍微就动了心思又对网络应用的安全性问题自行探究了一下。这次发现的是一种可以说是边际于漏洞又不是漏洞的东西：基于CSRF的降权拒绝服务攻击。 一般来说现在网络上的诸多漏洞都是采用升权（借用用户权限）进行的攻击。最常见的就是插入脚本的XSS攻击。由于脚本运行在用户相同的安全性标准下，这种漏洞经常会引发负面的越权问题。同理，CSRF漏洞多数也是采用升权进行的攻击，于是不断被忽视的就是CSRF降权拒绝服务攻击（名字是原创的，你未必找得到）。 一、什么是CSRF漏洞 CSRF是Cross Site Request Forgery（跨站点请求伪造）的缩写。这种攻击不同于XSS脚本注入攻击的最大区别是，攻击利用了浏览器对资源的载入来诱导浏览器发出能改变状态的请求。我们举一个例子： 某一个虚拟社区对用户进行积分转账是靠如下的访问：http://foo.com/bar/?action=transfer&#38;to=205&#38;amount=33 其中在请求的GET参数中，to是积分转账的授予用户，而amount则是转账的数目。在已经登录的系统下，程序将会授权用户的这次操作。而作为攻击者，由于无法在对方帐号的权限下访问网址，理论上也是无法进行转账的。 但是事实并非那么简单。浏览器在访问网页时，会自主下载一些资源，比如：图片、音乐、样式表、脚本文件。这些文件的下载（准确些说，是这些请求的发出）经常并没有用户独特的许可，但是却带着用户的权限进行。很显然，我们不能询问用户每一个资源的下载是否许可，但是大部分情况下，浏览器也不会胡乱请求资源。CSRF攻击正是利用了站点对用户浏览器的这种信任而得以实现的。 假定刚才的社区里，有一位用户引用了一张图片：&#60;img src="http://foo.com/bar/?action=transfer&#38;to=205&#38;amount=100" /&#62; 浏览器在载入页面的同时，也将发出请求载入这张图片作为辅助资源。就这样，浏览器作为中间人代替了用户发出了这个请求，也就实现了浏览器的“升权”（自行代表了用户的权限）。凡是访问到包含这个图片的页面，已登录用户的浏览器将会带着一套已经认证的权限来执行操作。于是便在用户未主动参与的情况下发出了一个并不应该发出的请求，也就会导致100个积分被转到UID=205的账户。 二、CSRF的杜绝和被忽视的降权拒绝服务 虽然说刚才那一段听起来很危险，但是实际上不会出现这样的漏洞了，因为大部分的应用已经考虑到了并阻断了CSRF的功效发挥。其实阻断CSRF非常简单。CSRF的成功发动需要两个条件：1）你能诱导浏览器发出此类请求 2）请求不能因人而异。 这样一说，就发现有两个非常简单的解决方法。对于第一条，可以通过把请求由GET变为POST进行解决（浏览器不会自主发出POST请求的）。而对于第二条，很多站点则采用了NONCE（一次性校验数字）来进行的防御。此方法是，在生成连接时加入一个传递NONCE的字段。生成一个数字，保存在服务器上，同时也加到链接里面。当访问链接时，程序对比两个校验数字是否一致，然后再进行下一步操作。URL由 http://foo.com/bar/?action=transfer&#38;amount=100&#38;to=205 变为了http://foo.com/bar/?action=transfer&#38;amount=100&#38;to=205&#38;nonce=29374920 而这个数字也会被保存到服务器。下次生成链接，数字则会发生变化。这时由于无法找到固定的可用的链接，CSRF也就失效了。 这种防御虽说解决了很多问题，但是在很多地方也有着许多劣势。比如GET转POST会导致用户无法使用“返回”操作，也会导致用户必须亲自点击发出请求。这在一些反复使用的地方就会显著增加复杂度。而NONCE则会花服务器的处理开销和内部存储，甚至过期时还需定时清理。有时检查链接请求的REFERER头部信息也能有效的过滤CSRF，但是对于没有REFERER的请求，是抛弃（会导致大批量的用户无法使用）还是默许（于是就没作用了），也成为了困难的选择。 或许想着这些开销，很多站点、网络应用就在一个地方进行了简化：登出链接。不同于上面的操作，登出链接是用户主动放弃高权限（登录状态），进入低权限状态（未登陆），所以在登出环节内不设防范并不会造成用户出现不必要的损失。于是我们能见到各种形如 http://abc.com/logout 的单向“干净”链接，而这些无害的链接则也同时没有任何保护。 说到这里就要讲讲基于CSRF的降权拒绝服务攻击。由于现在很多服务都会载入信息流（即别人的信息和自己的进行流整合）而且很多时候，外链一些图片是不可避免的，所以则会发生降权拒绝服务攻击。攻击通过刻意分享登出链接，让加载信息流的用户“被迫”放弃了登陆状态，而终止了后面的需要认证的步骤。一旦重新登陆，再次载入了恶意信息流，再次被动发出登出请求，再次被登出。如此反复，虽然并没有开放任何的安全隐患，但是短时间内大量的导致用户被迫登出而实现了拒绝服务攻击。 &#60;img src="https://accounts.google.com/Logout?hl=en&#38;continue=https://www.google.com/" /&#62; 三、这个到底和WEB APP有什么关系？ 现在越来越多的网络应用正在冲入日常生活，然而这种不经意间的登出，或许会在短时间内造成困扰。由于降低权限并不构成很大的安全问题，所以CSRF的降权空间很大。大到Google的账号，小到人人网，一张图片足以瞬间登出。 看一看解释，是不是明白了这个似乎是BUG但是又不那么BUG的“漏洞”呢？]]></description>
			<content:encoded><![CDATA[<p>闲暇之余，加上某一些正在内测的站点准备运行之际，稍微就动了心思又对网络应用的安全性问题自行探究了一下。这次发现的是一种可以说是边际于漏洞又不是漏洞的东西：<strong>基于CSRF的降权拒绝服务攻击</strong>。</p>
<p><span id="more-747"></span></p>
<p>一般来说现在网络上的诸多漏洞都是采用<strong>升权</strong>（借用用户权限）进行的攻击。最常见的就是插入脚本的XSS攻击。由于脚本运行在用户相同的安全性标准下，这种漏洞经常会引发负面的越权问题。同理，CSRF漏洞多数也是采用升权进行的攻击，于是不断被忽视的就是<span style="text-decoration: underline;">CSRF降权拒绝服务攻击</span><span style="color: #ff6600;">（名字是原创的，你未必找得到）</span>。</p>
<h2>一、什么是CSRF漏洞</h2>
<p>CSRF是<strong>Cross Site Request Forgery</strong>（跨站点请求伪造）的缩写。这种攻击不同于XSS脚本注入攻击的最大区别是，攻击利用了浏览器对资源的载入来诱导浏览器发出能改变状态的请求。我们举一个例子：</p>
<p>某一个虚拟社区对用户进行积分转账是靠如下的访问：<code>http://foo.com/bar/?action=transfer<span style="color: #ff0000;">&amp;to=205&amp;amount=33</span></code></p>
<p>其中在请求的GET参数中，to是积分转账的授予用户，而amount则是转账的数目。在已经登录的系统下，程序将会授权用户的这次操作。而作为攻击者，由于无法在对方帐号的权限下访问网址，理论上也是无法进行转账的。</p>
<p>但是事实并非那么简单。浏览器在访问网页时，会自主下载一些资源，比如：图片、音乐、样式表、脚本文件。这些文件的下载（准确些说，是这些请求的发出<code></code><code></code><code></code>）经常并没有用户独特的许可，但是却带着用户的权限进行。很显然，我们不能询问用户每一个资源的下载是否许可，但是大部分情况下，浏览器也不会胡乱请求资源。CSRF攻击正是利用了站点对用户浏览器的这种信任而得以实现的。</p>
<p>假定刚才的社区里，有一位用户引用了一张图片：<code>&lt;img src="<span style="color: #ff0000;">http://foo.com/bar/?action=transfer&amp;to=205&amp;amount=100</span>" /&gt;</code></p>
<p>浏览器在载入页面的同时，<span style="text-decoration: underline;">也将发出请求载入这张图片作为辅助资源</span>。就这样，浏览器作为中间人<span style="text-decoration: underline;">代替了用户发出了这个请求</span>，也就实现了浏览器的“升权”（自行代表了用户的权限）。凡是访问到包含这个图片的页面，已登录用户的浏览器将会带着一套已经认证的权限来执行操作。于是便在用户未主动参与的情况下发出了一个并不应该发出的请求，也就会导致100个积分被转到UID=205的账户。</p>
<h2>二、CSRF的杜绝和被忽视的降权拒绝服务</h2>
<p>虽然说刚才那一段听起来很危险，但是实际上不会出现这样的漏洞了，因为大部分的应用已经考虑到了并阻断了CSRF的功效发挥。其实阻断CSRF非常简单。CSRF的成功发动需要两个条件：<strong>1）</strong><span style="text-decoration: underline;">你能诱导浏览器发出此类请求</span> <strong>2）</strong><span style="text-decoration: underline;">请求不能因人而异</span>。</p>
<p>这样一说，就发现有两个非常简单的解决方法。对于第一条，可以通过把请求由GET变为POST进行解决（浏览器不会自主发出POST请求的）。而对于第二条，很多站点则采用了NONCE（一次性校验数字）来进行的防御。此方法是，在生成连接时加入一个传递NONCE的字段。生成一个数字，保存在服务器上，同时也加到链接里面。当访问链接时，程序对比两个校验数字是否一致，然后再进行下一步操作。URL由 http://foo.com/bar/?action=transfer&amp;amount=100&amp;to=205 变为了http://foo.com/bar/?action=transfer&amp;amount=100&amp;to=205<span style="color: #ff0000;">&amp;nonce=29374920</span> 而这个数字也会被保存到服务器。下次生成链接，数字则会发生变化。这时由于无法找到固定的可用的链接，CSRF也就失效了。</p>
<p>这种防御虽说解决了很多问题，但是在很多地方也有着许多劣势。比如GET转POST会导致用户无法使用“返回”操作，也会导致用户必须亲自点击发出请求。这在一些反复使用的地方就会显著增加复杂度。而NONCE则会花服务器的处理开销和内部存储，甚至过期时还需定时清理。有时检查链接请求的REFERER头部信息也能有效的过滤CSRF，但是对于没有REFERER的请求，是抛弃（会导致大批量的用户无法使用）还是默许（于是就没作用了），也成为了困难的选择。</p>
<p>或许想着这些开销，很多站点、网络应用就在一个地方进行了简化：<strong>登出链接</strong>。不同于上面的操作，登出链接是用户主动放弃高权限（登录状态），进入低权限状态（未登陆），所以在登出环节内不设防范并不会造成用户出现不必要的损失。于是我们能见到各种形如 http://abc.com/logout 的单向“干净”链接，而这些无害的链接则也同时没有任何保护。</p>
<p>说到这里就要讲讲基于CSRF的降权拒绝服务攻击。由于现在很多服务都会载入信息流（即别人的信息和自己的进行流整合）而且很多时候，外链一些图片是不可避免的，所以则会发生降权拒绝服务攻击。攻击通过刻意分享登出链接，<span style="text-decoration: underline;">让加载信息流的用户“被迫”放弃了登陆状态</span>，而终止了后面的需要认证的步骤。一旦重新登陆，再次载入了恶意信息流，再次被动发出登出请求，再次被登出。如此反复，虽然并没有开放任何的安全隐患，但是短时间内大量的导致用户被迫登出而实现了拒绝服务攻击。</p>
<p><code>&lt;img src="<span style="color: #ff0000;">https://accounts.google.com/Logout?hl=en&amp;continue=https://www.google.com</span>/" /&gt;</code></p>
<h2>三、这个到底和WEB APP有什么关系？</h2>
<p>现在越来越多的网络应用正在冲入日常生活，然而这种不经意间的登出，或许会在短时间内造成困扰。由于降低权限并不构成很大的安全问题，所以CSRF的降权空间很大。大到Google的账号，小到人人网，一张图片足以瞬间登出。</p>
<p>看一看解释，是不是明白了这个似乎是BUG但是又不那么BUG的“漏洞”呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/04/17/csrf-and-privilege-dropping-denial-of-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>于是换回美国空间了</title>
		<link>http://kanoha.org/2012/04/09/returned-to-us-host/</link>
		<comments>http://kanoha.org/2012/04/09/returned-to-us-host/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 14:28:18 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[站点维护等 | Site]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=742</guid>
		<description><![CDATA[之前的空间各种不稳定，所以还是换回美国的空间了。貌似经历了一阵子的宕时间，现在基本上恢复了，不过各种工具目录和辅助的服务还在恢复中=w=。真是麻烦呢~]]></description>
			<content:encoded><![CDATA[<p>之前的空间各种不稳定，所以还是换回美国的空间了。貌似经历了一阵子的宕时间，现在基本上恢复了，不过各种工具目录和辅助的服务还在恢复中=w=。真是麻烦呢~</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/04/09/returned-to-us-host/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>KnProxy Theta 4.50</title>
		<link>http://kanoha.org/2012/04/04/knproxy-4-50/</link>
		<comments>http://kanoha.org/2012/04/04/knproxy-4-50/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 08:36:53 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[开源项目 | OSI Projects]]></category>
		<category><![CDATA[KnProxy]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=738</guid>
		<description><![CDATA[KnProxy 4.50 发布，本次更新变动如下： 重新写了HTML文档解析器，增强了JS文件解析。现在解析JavaScript脚本的机制更加柔和，避免因为代理误把 JS 脚本内的一些字符串破坏导致的全脚本失效现象。如果幸运的话，也许还会对 AJAX成功率有增强。 修正了引入WebSockets之后在该模式下的URL BUG。该模式仅在无cURL时才启用。 升级了加密组件的基钥匙，如果希望保留旧地址，请不要覆盖module_encoder.php 由于Sourceforge连续抽风，没法设置默认下载，所以更新将在 https://github.com/jabbany/knProxy 获得，同时也可以到 SourceForge上下载压缩后的程序包。]]></description>
			<content:encoded><![CDATA[<p><strong>KnProxy 4.50 发布，本次更新变动如下：</strong></p>
<ul>
<li>重新写了HTML文档解析器，增强了JS文件解析。现在解析JavaScript脚本的机制更加柔和，避免因为代理误把 JS 脚本内的一些字符串破坏导致的全脚本失效现象。如果幸运的话，也许还会对 AJAX成功率有增强。</li>
<li>修正了引入WebSockets之后在该模式下的URL BUG。该模式仅在无cURL时才启用。</li>
<li>升级了加密组件的基钥匙，如果希望保留旧地址，请不要覆盖module_encoder.php</li>
</ul>
<p>由于Sourceforge连续抽风，没法设置默认下载，所以更新将在 <a href="https://github.com/jabbany/knProxy" target="_blank">https://github.com/jabbany/knProxy</a> 获得，同时也可以到 SourceForge上下载压缩后的程序包。</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/04/04/knproxy-4-50/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>ABPlayerHTML5和CommentCoreLibrary</title>
		<link>http://kanoha.org/2012/03/22/abplayerhtml5-commentcorelibrary-and-more/</link>
		<comments>http://kanoha.org/2012/03/22/abplayerhtml5-commentcorelibrary-and-more/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 14:51:59 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[开源项目 | OSI Projects]]></category>
		<category><![CDATA[ABPlayerHTML5]]></category>
		<category><![CDATA[bilibili]]></category>
		<category><![CDATA[弹幕]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=730</guid>
		<description><![CDATA[随着B站最近加紧推出了各移动终端的软件后，现在似乎从 Android到 iOS都已经齐全了，于是HTML5版的弹幕播放器就继续开始酝酿了。由于再次温习了一下ABPlayer的源码和一些实现，加上JS又学到了新的知识（呃），于是改了一下ABPlayerHTML5的弹幕核心。为了改的方便和测试方便，于是就把专门处理弹幕的部分拿了出去，结果懒得合并回去了，才出现了所谓的CommentCoreLibrary。 CommentCoreLibrary是ABPlayerHTML5的弹幕核心元件，也是任何有希望了解弹幕播放器原理或是自己实现弹幕播放器的开发者们可以参考的一个JavaScript库。各种功能，如空间拆分器、弹幕过滤器等都被分开存放，让主文件更加易懂。而且稍微改变了几处的实现、修复了几个有关3D弹幕，3D运动弹幕的BUG之类的。目前可以比较正确的解析大部分的神弹幕，当然文字拼图的弹幕由于WEB字体过大所以依然有些问题。 运行性能测试：http://tools.kanoha.org/experimental/CommentCore 相比之下ABPlayerHTML5的下一步是完善播放器的操控界面，如：播放进度条，弹幕列表，发送器等。 还有，ABPlayerHTML5 改进了获取Sina片源的机制（从猜地址法换到利用接口），主要感谢B站的Android客户端里面提供的Sina地址接口。 现在获取Sina的HTML5对应视频VID可以通过： http://video.sina.com.cn/interface/video_ids/video_ids.php?v=vid返回的JSON对象获取。获得的地址可用在： http://v.iask.com/v_play_ipad.php?vid=ipad_vid来直接进行外链播放！]]></description>
			<content:encoded><![CDATA[<p>随着<strong>B站最近加紧推出了各移动终端的软件</strong>后，现在似乎从 Android到 iOS都已经齐全了，于是HTML5版的弹幕播放器就继续开始酝酿了。由于再次温习了一下ABPlayer的源码和一些实现，加上JS又学到了新的知识（呃），于是改了一下ABPlayerHTML5的弹幕核心。为了改的方便和测试方便，于是就把专门处理弹幕的部分拿了出去，结果懒得合并回去了，才出现了所谓的CommentCoreLibrary。</p>
<p><a href="https://github.com/jabbany/CommentCoreLibrary">CommentCoreLibrary</a>是ABPlayerHTML5的弹幕核心元件，也是任何有希望了解弹幕播放器原理或是自己实现弹幕播放器的开发者们可以参考的一个JavaScript库。各种功能，如空间拆分器、弹幕过滤器等都被分开存放，让主文件更加易懂。而且稍微改变了几处的实现、修复了几个有关3D弹幕，3D运动弹幕的BUG之类的。目前可以比较正确的解析大部分的神弹幕，当然文字拼图的弹幕由于WEB字体过大所以依然有些问题。</p>
<p>运行性能测试：<a href="http://tools.kanoha.org/experimental/CommentCore">http://tools.kanoha.org/experimental/CommentCore</a></p>
<p>相比之下ABPlayerHTML5的下一步是完善<strong>播放器的操控界面</strong>，如：播放进度条，弹幕列表，发送器等。</p>
<p>还有，ABPlayerHTML5 改进了获取Sina片源的机制（从猜地址法换到利用接口），主要<strong>感谢B站的Android客户端里面提供的Sina地址接口</strong>。</p>
<p>现在获取Sina的HTML5对应视频VID可以通过：<br />
<code>http://video.sina.com.cn/interface/video_ids/video_ids.php?v=<span style="color: #ff0000;">vid</span></code>返回的JSON对象获取。获得的地址可用在：<br />
<code>http://v.iask.com/v_play_ipad.php?vid=<span style="color: #ff0000;">ipad_vid</span></code>来直接进行外链播放！</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/03/22/abplayerhtml5-commentcorelibrary-and-more/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>[概念实现] MottoBilibili 纯HTML5弹幕播放器</title>
		<link>http://kanoha.org/2012/02/28/abplayerhtml5-mottobilibili/</link>
		<comments>http://kanoha.org/2012/02/28/abplayerhtml5-mottobilibili/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 13:54:27 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[ABPlayerHTML5]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[弹幕]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=723</guid>
		<description><![CDATA[目前纯粹基于HTML5的弹幕播放器已经实现并可以进行测试，虽然功能还有待完善，但是最基础的播放功能已经完成。欲测试请访问 http://tools.kanoha.org/experimental/mottobilibili/#av号数字部分。源码在Github的ABPlayerHTML5工程中，有意愿研究的可以随时Checkout到比较新的版本。]]></description>
			<content:encoded><![CDATA[<p>目前纯粹基于HTML5的弹幕播放器已经实现并可以进行测试，虽然功能还有待完善，但是最基础的播放功能已经完成。欲测试请访问 http://tools.kanoha.org/experimental/mottobilibili/#<span style="color: #ff0000;">av号数字部分</span>。源码在Github的ABPlayerHTML5工程中，有意愿研究的可以随时Checkout到比较新的版本。</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/02/28/abplayerhtml5-mottobilibili/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SkipGoogle更新发布</title>
		<link>http://kanoha.org/2012/02/27/skipgoogle-update/</link>
		<comments>http://kanoha.org/2012/02/27/skipgoogle-update/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 15:37:56 +0000</pubDate>
		<dc:creator>root</dc:creator>
				<category><![CDATA[Chrome插件 | Chrome Extensions]]></category>
		<category><![CDATA[Chrome扩展]]></category>
		<category><![CDATA[SkipGoogle]]></category>
		<category><![CDATA[跳过Google]]></category>

		<guid isPermaLink="false">http://kanoha.org/?p=718</guid>
		<description><![CDATA[最近有些反应SkipGoogle 这个插件有开始失灵了。经过比较深层次的检测和测试，发现在Google.com上比较差。究其原因是Google在很多国家版本采用了 JS发送Ajax请求获取到搜索结果，导致插件只在第一次本运行。所以新版本的插件将会绑定搜索框输入，一旦输入内容则开始循环去除搜索结果中的跳转事件。 比较好的是，这样漏掉的可能性大大的降低了。但是比较不好的是，搜索框输入很多内容时可能稍微浪费处理资源，特别是在静态版的Google 搜索结果。这一点还是忍一忍吧。 新版本的插件还引入了自动更新功能，以后会随着Google的变化自动更新。不过为此需要删除原插件，并更换最新版本插件。请注意，这次更新完本插件后，未来将可以利用插件本身的自动更新机制，不必再行下载。 下载最新版本：SkipGoogle.crx （下载次数：210）]]></description>
			<content:encoded><![CDATA[<p><strong>最近有些反应SkipGoogle 这个插件有开始失灵了。</strong>经过比较深层次的检测和测试，发现在Google.com上比较差。究其原因是Google在很多国家版本采用了 JS发送Ajax请求获取到搜索结果，导致插件只在第一次本运行。所以新版本的插件将会绑定搜索框输入，一旦输入内容则开始循环去除搜索结果中的跳转事件。</p>
<p>比较好的是，这样漏掉的可能性大大的降低了。但是比较不好的是，搜索框输入很多内容时可能稍微浪费处理资源，特别是在静态版的Google 搜索结果。这一点还是忍一忍吧。</p>
<p>新版本的插件还引入了<strong>自动更新功能</strong>，以后会随着Google的变化自动更新。<span style="color: #ff0000;">不过为此需要删除原插件，并更换最新版本插件</span>。请注意，这次更新完本插件后，未来将可以利用插件本身的自动更新机制，不必再行下载。</p>
<p>下载最新版本：<a href="http://kanoha.org/?fetchDownload=13">SkipGoogle.crx</a> （下载次数：210）</p>
]]></content:encoded>
			<wfw:commentRss>http://kanoha.org/2012/02/27/skipgoogle-update/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

