<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Heero&#39;s Blog</title>
<link>heeroluo.net</link>
<description>希罗的个人博客——记录个人生活和技术笔记</description>
<item>
<title>验证码的几个常见漏洞</title>
<link>http://heeroluo.net/ShowArticle98.aspx</link>
<pubDate>Friday, Jan 20 2012 11:22:59 +08:00</pubDate>
<description><![CDATA[<h3>
	把验证码存储在Cookie中
</h3>
<p>
	一般来说，我们会把验证码的值用Session存储起来，通过对比用户提交的验证码和Session中的验证码，就可以知道输入是否正确。由于Session会占用服务器资源，我曾经想过是否可以把验证码的值加密后存储在Cookie中。不过事实证明，这只是异想天开罢了。
</p>
<p>
	假设验证码的值是a，通过sha1加密后得到的值为b = sha1(a)，并且把b存储在Cookie中。而用户提交的验证码值为c，通过判断sha1(c)是否与b相等，可以知道输入的验证码是否正确。然而，<strong>Cookie是受客户端控制的</strong>。如果用户事先通过肉眼看到验证码的值是a，又从Cookie中得知此时的加密值为b，那么，他只要在提交前把Cookie的值修改为b，提交的验证码值为a，就可以永远通过验证。
</p>
<h3>
	没有进行非空判断<br />
</h3>
<p>
	这种情况可以直接用代码来说明：
</p>
<pre class="prettyprint lang-cs">if (Request["captcha"] == Session["captcha"] as string)
{
    // 验证通过，继续操作
}</pre>
<p>
	假设用户绕过了系统提供的</p>]]></description>
</item>
<item>
<title>[译]原生全屏Javascript API</title>
<link>http://heeroluo.net/ShowArticle97.aspx</link>
<pubDate>Sunday, Nov 06 2011 18:10:01 +08:00</pubDate>
<description><![CDATA[<p>
	HTML 5的&lt;video&gt;是一个相当不错的标签，但是它刚发布的时间，最大的问题是它不能像Flash那样实现真正的全屏。幸好，几个月后，大部分浏览器已经原生地支持全屏。
</p>
<h3>
	全屏API简史
</h3>
<ol>
	<li>
		第一个原生的全屏接口是在Safari 5.0（和iOS）中添加的<strong> webkitEnterFullScreen()</strong> 函数。不过，它只能用于&lt;video&gt;标签。
	</li>
	<li>
		在Safari 5.1中，苹果修改了这个API使它更接近于Mozilla的全屏API草案（比苹果的实现更早）。现在，所有DOM元素都可以调用 <strong>webkitRequestFullScreen()</strong> 方法。
	</li>
	<li>
		Firefox和Chome表示它们将会添加原生全屏API支持，而且这个特性已经在<strong>Chome 15+以及<a target="_blank" href="http://nightly.mozilla.org/">Firefox Nightly</a></strong>中实现。
	</li>
	<li>
		在2011年10月15日，W3C发布了一份全屏API草案（由Opera团队的一名成员编写），它跟Mozilla的草案有两个主要的不同点：
		<ol>
			<li>
				Mozilla/Webkit使用大写字母'S'（FullScreen），但W3C则不是（Fullscreen）；
			</li>
			<li>
				Mozilla/Webkit使用<strong>cancelFullScreen</strong>，W3C使用<strong>ex</strong><strong>itFullscreen</strong>。
			</li>
</li></ol></ol>]]></description>
</item>
<item>
<title>TidyBlog重写初步完成</title>
<link>http://heeroluo.net/ShowArticle96.aspx</link>
<pubDate>Sunday, Sep 18 2011 11:09:26 +08:00</pubDate>
<description><![CDATA[<p>
	由于自己的粗心大意，TidyBlog的源码在几个月前完全丢失，所以这段时间一直在抽空重写TidyBlog，直到这周末，主要功能已经完成，于是就更新上来了。
</p>
<p>
	这次重写同时也是代码重构，最重要的修改要数引入了一个简单的ORM，省去了大量的SQL语句。另外，编辑器换成了KindEditor，兼容性更好，功能更强大。
</p>
<p>
	为避重蹈覆辙，Tidyblog源码已经传到SVN：<a target="_blank" href="http://code.google.com/p/tidyblog/">http://code.google.com/p/tidyblog/</a> ，有兴趣研究的朋友可自行Checkout。由于功能尚未完全做好，就暂时不提供单独下载了。
</p>]]></description>
</item>
<item>
<title>使用canvas绘制时钟</title>
<link>http://heeroluo.net/ShowArticle95.aspx</link>
<pubDate>Saturday, Sep 03 2011 23:10:30 +08:00</pubDate>
<description><![CDATA[<h3>准备工作</h3><p>在HTML中指定一个区域放置时钟：</p><p><code>&lt;div id="clock" style="position: relative;"&gt;&lt;/div&gt;</code></p><p>时钟的一些外观设定：</p><p><code>var width = 260; // 桌布宽度<br />var height= 260; // 桌布高度<br />var dot = {<br />　　x : width / 2,<br />　　y : height / 2,<br />　　radius : 6<br />}; // 圆点位置、半径<br />var radius = 120; // 圆半径<br />var borderWidth = 6; // 圆边框宽度</code></p><p>创建&lt;canvas&gt;元素：</p><p><code>var clock = document.getElementById('clock');<br />var clockBg = document.createElement('ca</code></p>]]></description>
</item>
<item>
<title>惠普4431s商用笔记本简单评测（下）</title>
<link>http://heeroluo.net/ShowArticle94.aspx</link>
<pubDate>Saturday, Aug 20 2011 11:10:58 +08:00</pubDate>
<description><![CDATA[<p>正如<a target="_blank" href="ShowPost93.aspx">上篇</a>末尾所说，下篇主要谈一下此机的缺点，其中星星符号代表其缺点的严重程度。</p><h3>电源适配器无指示灯（★）</h3><p>这个问题在上篇也谈到过，适配器上无通电指示灯，<strong>无法知道当前是通电还是断电状态</strong>（有可能插座坏了或者松了）。此外，其实指示灯也可以使适配器更加美观。</p><p style="text-align: center; text-indent: 0pt;"><img src="FileTransfer.ashx?fileName=2011082011105716487.jpg" alt="HP 4431s与Lenovo F41电源适配器对比" /></p><h3>光驱声（★）<br /></h3><p>每次开机以及从休眠唤醒时，光驱都会发出一些声响。虽然声音不大，但总感觉有点不爽。</p><h3>音频插孔没有用不同颜色区分（★）<br /></h3><p>无法直观看到哪个孔接耳机、哪个孔接麦克风，只有靠近去看插孔旁边的小图标才能知道</p>]]></description>
</item>
<item>
<title>惠普4431s商用笔记本简单评测（上）</title>
<link>http://heeroluo.net/ShowArticle93.aspx</link>
<pubDate>Monday, Aug 15 2011 22:02:38 +08:00</pubDate>
<description><![CDATA[<p>本来打算上一年入的笔记本，由于没有选到合适的机型而推到今年才出手。千挑万选之后，初步确定了两台机子，分别是<a target="_blank" href="http://appserver.lenovo.com.cn/Lenovo_Product_Detail.aspx?CategoryCode=A19B01C09&amp;gdsid=A1900014006">Thinkpad E420s</a>和<a target="_blank" href="http://h10010.www1.hp.com/wwpc/cn/zh/sm/WF06b/321957-321957-64295-3955552-3955552-5045471-5101508.html">HP 4431s</a>，均为i3版配置。最后选4431s的原因是，这款机带蓝牙、底板容易拆卸（方便清理灰尘、加内存），且在硬件配置差不多的情况下比E420s要便宜差不多2K。</p><p>机器在岗顶太平洋电脑城入手，价格不到￥4K5，加上开票以及8G内存，总价不到￥5K，赠品有单肩包、鼠标和鼠标垫。</p><h3>外观</h3><p>这机的A、C面都是金属拉丝，以银色为主。</p><p style="text-align: center; text-indent: 0pt;"><img src="FileTransfer.ashx?fileName=2011081522023727553.jpg" alt="HP 4431s" /></p><p>与之前用的联想F41相比，4431s的尺寸稍小，重量也轻一点。</p>]]></description>
</item>
<item>
<title>[译文]ECMAScript 5严格模式（Strict Mode）</title>
<link>http://heeroluo.net/ShowArticle92.aspx</link>
<pubDate>Monday, May 23 2011 17:46:12 +08:00</pubDate>
<description><![CDATA[<p>严格模式（Strict Mode）是ECMAScript 5的新特性，它允许你把整个程序，或者某个函数，放置在“严格”的操作语境中。这种严格的语境会防止某些特定的操作并抛出更多的异常。</p><p>虽然ECMAScript 5对ECMAScript 3是向下兼容的，但是在严格模式下，所有在ECMAScript 3中不赞成使用的特性都被禁用（或抛出错误）而不是兼容。</p><p>启用严格模式有以下好处：</p><ul>
<li>捕获一些编程错误，并抛出异常。</li>
<li>阻止进行一些相对“不安全”的操作（例如访问全局变量），抛出异常。</li>
<li>禁用一些让人迷惑的特性。</li>
</ul><p>关于严格模式的大多数信息都可以在<a target="_blank" href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf">《ES5规范》[PDF]</a>的第223页找到。</p><p>（注意：ECMAScript 5的严格模式跟Firefox的严格模式是不同</p>]]></description>
</item>
<item>
<title>分析MySQL的授权许可</title>
<link>http://heeroluo.net/ShowArticle91.aspx</link>
<pubDate>Wednesday, May 04 2011 12:45:54 +08:00</pubDate>
<description><![CDATA[<p>MySQL是开源软件，但<strong>开源不意味着免费</strong>，开源软件的使用应遵循该软件提供的使用授权许可。MySQL的授权许可是英文的，而且一直以来没有权威的中文译本，所以很多人都不清楚其中的细节。</p><p>最近我在做一些ASP.NET+MySQL的应用，特地对MySQL的授权许可进行了研究。</p><p>（以下说明，如有错误，欢迎指正）</p><h3>使用MySQL作为数据库的应用是否会“被GPL”<br /></h3><p>MySQL开源软件（包括MySQL社区版数据库服务器、驱动程序和链接库等）是在GPL许可下提供的。<a target="_blank" href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GPL（General Public License）</a>是一种开源许可，其大概的内容是：只要在一个软件中使用（“使用”指类库引用，修改后的代码或者衍生代码）GPL协议的产品，则该软件产品也必须采用GPL协议，即必须也开源。</p><p>应用程序是否也必须采用GPL进行开源，是由</p>]]></description>
</item>
<item>
<title>GO比分开发总结</title>
<link>http://heeroluo.net/ShowArticle90.aspx</link>
<pubDate>Monday, Apr 04 2011 17:47:12 +08:00</pubDate>
<description><![CDATA[<p>最近一直在忙公司的第一款类客户端产品——<strong>GO比分</strong>。</p><p style="text-align: center; text-indent: 0pt;"><img src="FileTransfer.ashx?fileName=2011040417471212541.jpg" alt="GO比分" /></p><p>网页具有强大的跨平台特性，HTML+CSS比任何其他界面制作方式都要强大和灵活。然而，网页无法实现Web范围外的一些功能（例如手机通知栏、铃声、震动等）。因此，还需要通过一个代理去调用，也就是客户端。所谓<strong>类客户端，就是穿了客户端这件“马甲”的网页</strong>。</p><p>经过一个多月的努力，GO 比分的Android版在上周正式登陆<a target="_blank" href="https://market.android.com/details?id=com.jiubang.app.score">安卓电子市场</a>，iPhone版也即将推出。趁着这几天清明假期，先来总结下这段时间的开发经验。另外，本人第</p>]]></description>
</item>
<item>
<title>5个AJAX Loading动画图标生成器</title>
<link>http://heeroluo.net/ShowArticle89.aspx</link>
<pubDate>Wednesday, Mar 09 2011 20:59:57 +08:00</pubDate>
<description><![CDATA[<p>在AJAX应用中经常需要根据用户的动作实时加载数据，加载速度与具体的网络情况有关。在加载过程中，如果你想告诉用户有信息正在加载，你可能需要一个“Loading”的动画图标。然而，并非所有人都有能力去设计和制作出这样的图标。在这里，我向大家推荐几个在线工具，它们可以根据设置生成“Loading”动画图标。</p><h3><a target="_blank" href="http://preloaders.net/">PreLoaders.Net</a></h3><p>PreLoaders.Net提供的动画样式非常全面，有2D的、也有3D的，还可以设置背景色、前景色、大小、动画速度等参数。</p><h3><a target="_blank" href="http://ajaxload.info/">AjaxLoad.Info</a></h3><p>AjaxLoad.Info目前还是beta版，仅能设置动画样式、前景色和背景色。</p><h3><a target="_blank" href="http://www.loadinfo.net/">LoadInfo.Net</a></h3>]]></description>
</item>

