Tic Tac Toe with PHP-GTK2
PHP-GTK2 写的井字棋,很有意思:

来自 Chris Shiflett:
今天早些时候,Stephen de Vries 发了封邮件到 SecurityFocus 的 web application security mailing list,邮件里提到了 Google Code Search:
Google's code search provides an easy way to find obvious software flaws in open source and example applications.
为了证实他的观点,提供了几个查询实例:
相应地,Chris Shiflett 也列出了几个 PHP & MySQL 相关的查询实例:
Google Code Search 给了 Chris Shiflett 一个启发,那就是创建一个静态的搜索,对源代码进行索引,然后通过查询来检查代码中的漏洞。这个想法很有意思,我想还需要一个查询知识库,把一些常见的漏洞查询语句存入库中,然后创建一个自动检查机制,这样漏洞扫描检测可以更加方便快捷。(Update: 后来发现实际上已经有个叫 Bugle 的利用 Google Code Search 在做这个事情了。)
Martin Fowler 关于设计模式的书本、文章一直以来都深深地影响着众多开发者。这篇《Writing Software Patterns》可以作为设计模式的入门介绍了,希望更多的人能够认识到其重要性。
I've spent a lot of my writing energy writing patterns. From time to time I get asked questions about why I do that and what makes a good pattern. This is a brief article about how I look at patterns with my suggestions for people who are interested in writing patterns themselves. [....]
什么是 CSRF?
CSRF - Cross-site Request Forgery 字面意思是指跨站点请求伪造,通常用来指 WEB 网站的这一类漏洞,即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL(通常会用 POST 数据方式),从而达到改变服务器端数据的目的。这一类攻击依赖于你的网页中的表单,脆弱的表单很容易受到攻击。对于你网站中的访问者而言,可能会受到以下攻击:
CSRF 攻击的典型是那些使用 cookie 记录登录信息的网站,但对于一些允许某个 IP 地址访问的页面(如内部网),这一类攻击也会奏效。
CSRF 攻击通常会使用到 JavaScript(但不仅限于 JavaScript)实现跨站点自动提交表单--表单数据可以隐藏,提交按钮可以伪装成链接或滚动条。
如何防止 CSRF 漏洞
一个 PHP 的表单例子,表单代码:
<?php
$key = 'y8s4Z7m2'; //MD5 加密密钥
$time = time(); //当前时间
$hash = md5($time.$key); //hash 字符串
?>
<form method="post" action="comment.php">
<p>Your name: <input type="text" name="person_name" /></p>
<p>Comment:<br /><textarea name="comment" rows="10" cols="60"></textarea></p>
<input type="hidden" name="time" value="<?php echo $time; ?>" />
<input type="hidden" name="hash" value="<?php echo $hash; ?>" />
<p><input type="submit" name="comment" value="Submit Comment" /></p>
</form>
表单提交之后的 comment.php 后台处理程序代码:
<?php
$key = 'y8s4Z7m2'; //密钥,与上面的一致
$expire = 1800; //表单过期时间:半小时
$my_hash = md5($_POST['time'].$key); //正确的 hash 字符串
if ($my_hash != $_POST['hash']) //hash 字符串不正确
die('非法表单提交。');
if (time() - $_POST['time'] > $expire) {
//表单已经过期,生成新的时间戳和 hash 字符串,显示表单让用户重新提交。(此处省略)
//....
}
//表单验证通过,可以接受表单提交的数据,并进行其它操作。
//....
?>
不要以为可以通过 Referer 头信息来保护你的网站用户,使其不受 CSRF 攻击。
参考资料