博睿智
SearchRSS
bob: 初步完成了与新浪微博同步发送碎语。
关于技术。WEB,Google,网页,PHP...
bob 发布于 April 9, 2006 13:49
前一段时间刚看到keso与phpx.com事件,这几天就相继有北辰swearl 反应被人用Trackback骚扰了。我这里虽然大体平静,但也偶然会有几个spammer光顾。看起来,继评论、留言本之后,广大spammer又发现新的战场了。

最容易被Trackback Spam利用的一点是Trackback URL的连续性,phpx的老大就是利用了这一点。大多数blog程序在设计的时候,Trackback ID都是连贯的,举例如下所示:
http://127.0.0.1/test/tb.php?t=1
http://127.0.0.1/test/tb.php?t=2
http://127.0.0.1/test/tb.php?t=3
http://127.0.0.1/test/tb.php?t=4
显然这样的设计,对于自动发送spam的程序来说真是太爽了。

现在的问题就是怎么去改进。改动ID的规则,改连续为随机,这是个解决方法。但是这样的改动不算小。而且,连续性的ID之所以受到欢迎是有原因的,比如管理起来很方便,比如可以利用SQL现成的auto_increment生成等。所以,最好能在不变动ID的情况下防范自动spam。

那就只能给Trackback加上一个“验证码”。在原有的trackback地址之外添加一个参数,并在接受trackback时验证。

我现在的做法是:取日志的ID,再取日志发布时间的Unix时间戳记,两者连接后作md5计算,截取md5字串的开头一部分作为验证码。PHP程序大致如下:
<?php
function tbcertificate ($blogid$pubtime) {
    
$str=substr(md5($blogid.$pubtime), 05);
    return 
$str;
}
?>

trackback的地址变成:
http://127.0.0.1/test/tb.php?t=1&extra=400e6
http://127.0.0.1/test/tb.php?t=2&extra=fa933
http://127.0.0.1/test/tb.php?t=3&extra=349d2
……

如果是防范自动推导Trackback地址并发送spam的程序,那么至此已经可以解决问题了。我想大部分spam都是这样的程序发送的。

当然,有可能魔高一丈。比如说在知道了验证码的算法后,spam程序依然可以从rss等地方提取出时间和ID这两个值来,自动推算出验证码。不过我想暂时地,不会有那么无聊的人士做这样的事情的。而且对策也不是没有。我们可以自设一个密码字符,加入到被md5计算的字符串中去。不过(-_-)spammer实在没辙了还可以直接上你的网站“采集”trackback地址啊。这个怎么解决呢?好吧,如果真有那么一天,我只能用javascript来生成地址了……(至于么......)
 
bob 发布于 April 1, 2006 11:39
昨天和Angel聊到静态化的问题,今天发现他写了这篇日志,深表赞同。我这里加上我的一些看法。(这些观点的出发点是blog程序,而不是CMS、下载系统等。)

静态页面生成技术的核心就是把始终不变的或者很少改动的网页内容在第一次动态解析后保存成静态文件,避免每次打开页面都需要重新生成,省去动态的步骤,达到提速、降耗、节源的目的。另外,搜索引擎对于结构复杂的动态文件地址难以准确抓取,而静态页面的访问地址固定,形式干练,适合搜索引擎收录,方便永久保存。

很诱人。但是,静态适合的是极少变动的内容。网页的互动性越强,动态的必要性和可行性也越低。对于一个CMS来说,文章生成后即很少变动;但对于blog来说就不是这么回事了。blog天生就是一个以互动交流为特点的平台:用户评论和留言(同时考虑审核机制)、来自其它blogger的trackback、你针对留言和评论发布的管理员回复、根据反馈及时修改你的日志、不断添加和变动的串联(链接)等等。你的blog系统里真正一成不变的东西有多少?如果你的要求是建立一个保存资料的资料库,那么cms是你的选择,而不是blog,一开始你就走错方向了。如果说动态的blog在每个页面的输出上耗费服务器资源,那么静态的blog将在你不断地重写静态文件中消耗资源。静态真的能减少资源的消耗么?对于一个cms,是的;对于一套多用户、大流量的blog系统,或许;对于一个单用户的个人blog,未必。
 
bob 发布于 March 10, 2006 20:50
之前曾经说过,侧边栏项目支持PHP代码,而不仅仅是html。但是为了保险起见,程序要求所有出现在侧边栏项目中的PHP代码全部用base64编码。以侧边模板切换器的代码为例:
<php>Z2xvYmFsICRsYW5nZnJvbnQsICR0ZW1wbGF0ZTsNCiRsYW5nZm
(中间省略)
</php>

这一部分,也就是被 <php></php>包围起来的部分,就是base64_encode后的php代码。

不过这样一来,改写代码和编码就显得比较麻烦。以下是我自己写的一个小程序,非常简陋,用于快速base64_encode与base64_decode。贴出来给需要的插件开发者使用。(顺便测试代码高亮功能)

以下请另存为 decodephp.php,直接打开就能用了。
 
bob 发布于 March 9, 2006 21:43
感谢 大龙 的分享,本站今天也启用了“素雅三栏”作为默认的模板。不过,这个模板(可能我之前的TriBlue也是)都有一个小问题。在IE 6.0中,公告栏的文字如果稍长,将出现著名的 IE6 Peekaboo/Guillotine Bug。

关于IE6 Peekaboo/Guillotine Bug的情况,请看这篇文章。而 Nicky 也写了很精彩的两篇文章讲述这个BUG(链接一链接二)。引用一下最重点的地方:
引用自 Nicky's Blog
Guillotine Bug出现的条件:
1、一个container(容器)
2、一个漂浮在container(容器)里面的元素(无论左右)
3、紧跟后面有一个没有漂浮的内容,里面包含链接
4、链接的a:hover样式有变化时,改变链接颜色除外。
(尤其以background、padding、border、Text Style这些属性效果最为明显。)
5、漂浮的元素比没有漂浮的内容高,不然就不存在切断了。

另外,Nicky也给了我们一个演示。可以使用IE 6访问这个演示
 
bob 发布于 February 26, 2006 15:39
1. magic_quotes_gpc=on:
\ => \\
' => \'
" => \"

2. 当 \' 、\" 插入数据库时,字符并没有变化,仍然为 ' 和 " 。因此读出时无需再次stripslashes。
例外:magic_quotes_runtime=on时。

3. preg_replace的pattern中使用 /e 修正符,则replacement传递到callback函数中的情形为:
\ => \
' => '
" => \"

4. 从数据库中读取,当magic_quotes_runtime=off时,似乎 \ => 空 ?

总结:引号和反斜杠的问题很复杂,而且因各服务器的设置不同而千变万化。
现在我的解决方法是
\ => & #92;
引号则用 htmlspecialchars ,quote_style设置为 ENT_QUOTES。

希望SP1版本中贴代码的问题能够解决。
 
分页: 1/3 第一页 1 2 3 下页 最后页
分类
  • 程序相关 [73] RSS
  • 程序扩展 [42] RSS
  • 风格模板 [16] RSS
  • 插件扩展 [24] RSS
  • 风格下载站
  • 插件下载站
  • 技术随笔 [16] RSS
  • 生活感悟 [13] RSS
  • 杂七杂八 [71] RSS
日历
统计
访问次数 5596361
今日访问 110
日志数量 213
评论数量 3387
引用数量 82
注册用户 9
在线人数 13
其他
Powered by Bo-Blog 2.5.0 build 2011.07.03