Shell's Home

Jan 13, 2012 - 1 minute read - Comments

昨天那个事情的后续——也谈网络安全

安全无小事阿,昨天批评到一半,发现遇到李鬼了。尴尬,赶紧修正文章,不知道影响多大。 我们事后推理,问题可能是这样的。有人故意在赶集网上用别人电话发布信息,然后等你的电话被打爆。赶集网本身只允许举报手机滥用,而不支持座机举报。所以你会找客服电话,但是他们客服电话又找不到。他们做一下SEO搜索,或者直接买关键词。你通过搜索,找到的就是他们。你要取消,他们就要你汇保证金。保证金进去了,然后你就被骗了。 当然,文章本身的批评也算是成立,常规发布电话信息应当是先确认再使用的,投诉的系统也应该支持座机等方式。由李鬼客服的存在,你可以想见到底有多少人试图投诉电话被错误使用,在系统中又无法删除。 但是我要说的是,这个诈骗差点成功的关键原因在于——赶集网没有公布自己的客服电话。由于没有官方公布,因此使用搜索引擎搜到的根本是李鬼。当然,如果打官司,赶集网肯定是无责任的。但是,被骚扰过的公司都知道,真的到了这个地步,你会很烦,非常烦。我相信对百度恨之入骨的不少公司应该都知道我的意思——明明不是我的事情,脏水泼头上,客户在骂娘。 我更进一步看了一下赶集网这个网站,安全么?也不安全。别的不说,登录系统还是使用http,而非https。两者差异非常大。使用http的,只要通过一个恶意的网关,就可以捕获到用户密码。作为玩玩而已的网站,我觉得使用http也就算了。作为一个商业公司,登录系统不使用https,实在是有点不专业。至于投诉电话也是一个例子。如果你打算联系新浪,打开网页,拉到最下方,直接就有400电话,根本不用担心这个问题。 各个网络教材反复告诉我们,安全不是一个技术问题。实际上,安全是一个从最高层到最下面的意识问题。作为安全的头一步,首先你要告诉你的用户——你应当信任什么。 如果你的公司是一家实体公司,以电话业务为主。那么你的宣传要点可能就是电话,而网站的具体网址可能就是通过短信方式进行分发(至少要有这个功能)。这方面的例子有携程。而如果是一家网络公司,以网络业务为主。那么你的宣传要点就是你的网址。为了安全,我建议稍微做大一点的时候,就干脆点,把常见的拼写错误全买下来,省的李鬼入侵。你的地址,联系电话,都通过网络分发,而且要让别人找的到。 上面一段简单点来说,就是,一个主要的宣传方式,上面发布所有的可信联系方式。为什么?如果你不发布,就可能有李鬼进来。到时候再处理,就非常困难。 盗梦空间里面说过,要确认你在真实的世界,而不是梦境中,并不容易。现实中,要确认和你说话的人的真实身份,也不容易。通常来说,如果你问我借钱,我要给你钱,你都能在对话里面发现我会问你一些有点奇怪的问题。frank应该心领神会,他问我借卡的时候,我可是在敲定事情后直接抄起手机给他打了个电话。通常来说,IM可以被偷,但是电话没有道理一起被偷。即使被偷了,还能伪装声音,那我也认栽了。我现在还欠着钱没还的小一,某位报社编辑,还有我帮忙充过卡的老燕子。如果你们看到这篇文章,应该也能回想起我给你们相关信息时问过一些奇怪的问题吧。 这些问题,叫做背景知识验证,我在前面的一篇文章中提到过。背景知识验证的基础是你们拥有相同的知识。而对于一个网站,你没办法使用这个办法的。所以,为了防止李鬼,你要反过来,使用无知假定。所谓无知假定,就是,在你面前的人充分证明自己之前,没人知道他是谁。也就是俗称的《互联网上没人知道你是一条狗》。所以作为客户来说,不要轻易相信搜到的联系方式,最好用114。当然,114上如果没有,那也没有什么太好的办法。 另外昨天和42区的同学谈了谈,他说会警告赶集的朋友。毕竟李鬼的存在对正品网站是一种伤害。但是从现在来看,只能采取防御策略。具体什么策略,就看赶集网的计划了。不过比较有意思的是,昨天我们谈到李鬼的时候,说到“互联网人士也无法分辨”,他给了我一个例子。在淘宝被诈骗5.46万始末。我看完吓了一跳。千鸟是小米的信息架构,算是IT圈子里面的人,不能算外行。在购物的时候,也是小心又谨慎。即使如此,还是被骗了!这只能说一点,即使是内行,也不要仗着自己专业就放松警惕。 我仔细看了一下流程,主要能找到的问题有以下几个。不过需要提前说明的是,这些都是马后炮。很多事情我们知道不应该,但是真的都有避免么?如同我某篇文章说的那样,就是彻底的神经质了。 1.在不可信环境中消费。这是一切问题的根源。本质上说,应当把环境分为“可信”和“不可信”,并且在几个信任等级间架防火墙。可信机器可以通过虚拟机产生一个不可信环境(沙盒),但是反之不可以。同密级机器可以弱密码或无密码互联。高密级机器可以无密钥连接低密级,反之不行。 2.没有在发生问题的第一瞬间进行止损。对于大额支付(对我而言,1000以上统统叫大额),网银一旦提示成功,而支付宝里面没看到钱。第一瞬间反应绝对不是再来一次,而是直接敲电话给网银,然后是支付宝。绝对不要试图在支付失败问题没搞明白的时候再试验一次,就算试,最多也只能试一毛钱。 但是归根结底,这件事情轮到谁头上基本都是中招的,因为要管理的问题太多了。 反思了一下自己,我打算在自己的环境中推进几个事情。 1.重新设定防火墙,关闭不需要的服务和开放设定。 2.重整U盾,假定他可复制,因此需要使用特殊的保密环境进行支付。 3.对环境中的几台不可信机器进行行为监控。 4.定期读日志,尤其是异常报告。 5.关掉“仅使用手机动态密码支付”的选项。 PS.这篇文章不代表我支持网络实名制,但是我觉得应当让自己想实名制的人实名制。

Jan 12, 2012 - 1 minute read - Comments

越想避开2B事,事情就越找上门——一个朋友的隐私泄漏问题

首先向赶集网道个歉,核实下来居然是李鬼,主题还真没写错。下文根据事实情况做了修正,看过原文的可以对比看看。 今天一个朋友中午给我打电话求助,问我能不能在网络上把一个信息给删了。我顿时一惊——你被陈老师了?还是有人曝光你们家怎么怎么,所以花钱删帖? 结果都不是的,她家里电话被登在了赶集网的某个页面上,还置顶了。一个中原地产的人发布房屋消息时,用的是她的座机。 我顺手查了查,赶集网有删除错误信息的选项阿。 ——你自己用用试试看? 我输入号码,我去阿,居然是js验证,要求号码必须是手机。仔细看看,是输入手机后发送验证码,输入验证码删除。 有点道理,可是我朋友家里是座机,咋办? 她找了找赶集的客服,但是没找到客服电话。搜索了一下网络上,有个人表示是赶集网的客服部,他说对方是付费用户,自己选择的置顶,她们无法删除。要么,交1000押金,立刻删除。对方三天内没提出意见,押金退还。 这个事情就很搞笑了,我自己的信息,要付费才能删除?传说中的百度产品经理去了赶集网么? 我说,你要么找发布者看看? 她说我找了,对方是中原地产的,说话很不客气。说这个事情我们检查一下,如果有问题,我们会处理的。她怀疑是对方在故意整她,不过这个事情目前没有任何证据的。 然后她只能等着,期间电话还是一个接一个的进。她家里也是开公司的,电话不能不接,也没法做垃圾过滤。 逼急了,她准备去报警,还不知道警察受理不受理。 42qu的某同学找我,说他认识一个赶集的人。他准备和对方沟通一下,看看能不能删除。先谢谢该同学。 过了中午,赶集的产品给了我一个消息。只要打给客服,客服会要求你提供电话。然后他们会回拨你一下,你接,就可以认证身份,然后对方就会删除信息。 我联系了朋友,她顿时觉得——怎么和上一个说的一点都不一样阿。 我和42qu的同学联系了一下,要了一下他们的客服电话(我们都找不到客服电话,他们的产品只有打过去要)。然后我朋友打过去,很快,问题解决了。 OK,大家现在应该猜到了,上午我们碰到了李鬼,也不知道我朋友是不是用百度搜索的。 如果真的打钱过去,就完蛋了。 先不说登录信息人的问题,我首先说赶集网的策略。 对于没有验证过的个人信息,采取“首先使用”的策略合理么?如果我找个虚假信息登记一下,成为用户,然后付费置顶,再录入某人或者某公司座机为火车票预定电话。那他们的电话不是瘫痪了? 其次,对于问题的反应,赶集网并不是很上心。网站的快速删除根本没有考虑座机如何操作,只考虑了手机。普通投诉在24个小时内也没有响应。而且没有明确的提供客服电话——至少两个程序员没有找到。如果赶集网本身提供了客服电话,或者快速响应了人工投诉,那么也没有后文的问题。问题是赶集网本身对客服并不是很热心。也许这是因为他们需要压缩客服成本。 最后,归结到根本上,赶集网对于有可能侵犯客户隐私的事情,有什么成本呢? 我怀疑没有成本。 我朋友如果去报警,最大可能是警方只提供记录,但是不处理。要解决,可以,自己起诉赶集网去。首先去公证处取证,一个页面3000(这还是07年的价格),然后去侵权所在地。赶集网的总部在北京,中关村软件园八号楼,所以要在北京市海淀区法院进行起诉。然而起诉前不能排除调解,因此可能还要过一遍调解过程。如果调解无效,那么开始起诉过程。如果对方不服,还有上诉。我不说隐私泄漏的结果如何计算,仅仅是这个时间和成本,就远远不是一般人能接受的。 因此赶集网实际上是没有风险的,因为很少有人会去执行。既然没有风险,那么自然也就没有动力考虑,如果被错误使用的不是手机如何,如果被错误使用的是地址如何,如何规避不慎泄漏了对方信息造成的风险——反正也没风险么。 在这里我批判的不是赶集网这个网站本身,作为一个公司,天大地大赚钱最大,你不能说这个是错的。那么和赚钱无关的事情不优先考虑,同样,也不能说是错的。我固然欣赏谷歌“不做恶”的信条,但是同样深知,你不能指望每个公司都信奉这点。 然而,难道说用户信息泄漏就是对的么?我们的电话被登录在网站上,被打爆,关键电话接不到,导致经济上的损失,或者其他一些事情,难道这就是对的么? 你必须让泄漏用户隐私变成公司的成本,而且是很大的成本,公司才会去关注这个问题。这点不仅对赶集如此,对百度如此,对人大代表如此,对你我也是如此。 你是否有把自己的手机写在人人和开心的页面上? 有写的话,就不要在接到垃圾短信的时候光抱怨各个公司泄漏你的个人消息。 你是否也有侵犯别人隐私的时候呢?例如你问,结婚了没?工资多少?在哪里上班?父母还在不在? 这些难道就不是隐私了么? 你见到没信用的公司的时候,是否还会用他们的产品呢?例如三鹿。虽然现在他被并购了,但是并购前,你还会喝他的牛奶么?如果不会,你看到侵犯隐私的公司,你会不会和他们提出意见呢?会不会用他们的产品呢?还是笑笑当作没事一样? 我知道这个社会一向不大把隐私当回事的。大到公司能大喇喇的把别人的家庭电话具体住址贴出来。小到我们每个人每天都在问别人的薪水。远到网络实名制的时候有人说,要么我们全填方老师的信息好了,并且把方老师的信息全公布出来。近到你看着看着这篇文章,突然手机响了,打开一看——又是垃圾短信。 我们每天都在被别人侵犯隐私,也在侵犯别人的隐私。我相信,即使在隐私保护比较好的国家,类似的问题也是层出不穷。问题是,我们多关注,多做一些事情,也许我们的情况就能好转点。虽然听起来没有联系,但是你少问别人工资,看到垃圾短信多举报(前提是这个机制要有用),看到网站对隐私保护不利要多投诉,也许在几千次的尝试后,你自己,或者你的后代,就能拥有更好的生活。 当然,如果你也不关心这个问题,那请当我没说。 最后,赶集网的客服电话是:010-59013666。特此公布以正视听。如果你发现有问题,可以在关于那里找到我的联系方式,我会尽快响应。

Jan 11, 2012 - 1 minute read - Comments

最牛电商

昨天聊天,聊到最牛电商的问题,大家都笑了。 frank订票45分钟花了45分钟,还没搞定。先是从chrome换到IE,因为前面的部分chrome能用,付款不行。然后从工商付款,上限500,不行,必须一次付款800,而且不能用支付宝。问我借卡,我的也不行。最后借到卡了,结果过45分钟了,重排,没票了。 淘宝买东西要是需要超过5分钟,喵喵就会少买好多东西。 还有个朋友说,他的卡能支付5000,买票,扣款后没票。人家说钱能拿回来的——钱能回来可是票回不来阿。好,再买,又扣钱没票。再买——没钱了。 我去阿,这TMD不是坑爹么? 这种网站,转化率还是100%,广告成本0,绝对最牛电商阿——没有之一。 关于顶不住这个问题呢,大家都懂的。我自己也做过类似的事情——甲方设法让自己的厂家中标,也不管人家有没有能力做。厂家领导是先中标再说,不中标自己就完蛋了。下面的人没能力,要么是不知道自己没能力,要么是知道也不敢说。做着做着问题一堆,也不敢和甲方沟通。不沟通问题就越来越多,交货的时候一看,甲方吐血。然后厂家领导就和甲方领导搞协调,厂家要去修一些问题的,甲方延一点时间,最终还是会让这个系统上去的——否则领导也麻烦阿。 最后只要这个烂摊子不被揭出来,大家皆大欢喜。中国政府领域的IT,大多都是这个样子。 比较大的烂摊子揭出来的,一个是绿坝。没办法,太烂了,还要所有机器供应商都来做支持。索尼干脆发了个文,这是中国政府让我们装的,出了问题不要找索尼,谢谢。结果这样还被告上美国法庭了。最后领导实在顶不住压力,撤了。另一个就是这个,最牛电商,估计回头也会撤的。因为后面订票压力越来越大,搞事情的人也越来越多,烂摊子搞到后来领导也会怕的。 其实昨天gary说了一句比较实在的话,这个系统不应该做成这个样子的。一切说中国买票的人太多,瞬间交易压力大,刷不出票的人持续刷的,都是借口。知道压力大,搞分时销售和抽签制分散压力。前端做负载均衡和CDN负担压力,后端真到订票的时候转换成MQ去操作。大型机再怎么做的差,每秒1000个transactions是出的来的。一小时就能完成360W的交易,一天八小时,3000W的票就出来了。中国有多少人需要订票的?3亿?就算做瞬时压力,铁道部车票成交比纽约股市买卖还快,要求还高?技术做不到根本是扯淡,最多是钱的问题——现在还是花钱没解决问题。 为了见证奇葩,我特地上去看了一下,结果第一眼就晕倒了——铁道部需要你自行下载根证书。我去阿,堂堂铁道部,一个多少万的项目,连TM买一张证书的钱都没有?! 其他细节就不多写了,相信用过的人比我都清楚的多。需要多次点击才能买到一张票,访问过程长导致压力大。定时开票,时间集中导致压力大。需要注册,导致注册过程冗长,也是增加压力。这些都不是技术问题。 整个过程中耗时最长的(抱歉我懒得注册,只去看了余票查询),一个是http://dynamic.12306.cn/TrainQuery/leftTicketByStation.jsp。这个的服务器响应表明是来自Apache-Coyote/1.1,由squid/3.1.18缓存,未命中。另一个是http://dynamic.12306.cn/TrainQuery/passCodeAction.do?rand=rrand。这个的服务器响应表明来自Apache-Coyote/1.1,是一张image(验证码),同样未命中。基本squid命中的都在ms级别返回了,出问题的都是dynamic.12306.cn这个域名没有命中的页面。这个表明前端的缓存还行,压力都压到了后端。至于造成这个现象的原因是前端缓存策略错误,还是后端性能相对不足,就不知道了。 我注意到,至少有一个页面https://dynamic.12306.cn/otsweb/css/contact.css。Server字符串是asfep/2.3.0 svn:3075。asfep是什么我不知道,google了一下也没出来。不过svn?这文件是从svn服务器上出来的么?!如果是,这就有点奇葩的味道了。 然后我点了一下查询,这下大奇葩出现了。一个query居然执行了30s以上。在验证码故意输错的情况下,返回速度在10s这个量级,而输入正确就天长地久了。由此可见系统是分成多个部分的,最外面是dynamic.12306.cn和12306.cn两个域名,上面用squid做了缓存。后面是一堆应用服务器。其中有一些Coyote服务器的响应特别慢,大概在1-10s这个量级。而这些服务器当访问数据库的时候,就彻底变成访问无望了。按照网络上说法,铁道部用的是Oracle数据库,估计已经半瘫痪了。 说是Coyote,其实如果没什么意外,这个就是Tomcat。那么铁道部的架构底子基本也就出来了,是J2EE的架构。估计是一帮ERP工程师照猫画虎做出来的。J2EE不是不能用来做电子商务,有些网站还做的很成功。但是不做任何优化,直接就敢拿J2EE做ERP的架构去做大规模电商的,这就是找死了。尤其是某些ERP严重依赖于Oracle,业务逻辑根本就是用Oralce写的,用J2EE封装了一个壳子。这种就更麻烦。 目前还不能确定铁道部订票网站到底是什么情况,不过可以确定的是,这个网站的状态在未来几天内还会继续恶化。搞不好到一定程度就直接没法用,或者被铁道部直接关闭网站一段时间了,需要订票的同学最好尽早想办法。

Jan 11, 2012 - 1 minute read - Comments

两天的生活

我刚刚看了酷壳上的一篇文,讲的是女程序员的故事。然后我准备说个无关的故事——数一数我两个典型的日子,2012年的1.3和1.4。这两天,一天是休假最后一天,一天是工作第一天,又刚刚过去,所以我还记得。听上去没什么关系,你听完就知道联系了。 1.3日 8:30 早上8点半就醒了,工作时间醒习惯了,睡不着了。起来洗脸刷牙开机煮饭——是的,老婆暂时回娘家,我要自己烧饭。(吐槽一下,程序猿婚后还是得学做饭)半个多小时后,大概吃喝完毕,开始处理邮件。 9:00 从九点到十一点,处理了所有的邮件,回了blog上的评论,顺便把整个广西游玩过程写成blog,大概4500-5000字。 11:00 从网络上买点东西,然后继续做饭——水饺。 12:00 吃完东西,开始研究hash冲突漏洞,大概研究到下午三点。收集了一下相关的问题,大致读了一下paper,包括squid上可能出现的情况什么的。把基本问题写了个blog。 15:00 给老婆发个消息,看看醒了没,给老妈发个消息报平安,收拾一下家里,大概花了半小时。给外婆打个电话说晚上去吃饭。然后开始健身。三组动作重复四次,总共半个小时。 16:00 去京东和淘宝上买点东西,看到有音箱,想起来家里的播音系统和视频系统还没有搞定。于是开始研究linux下的视频系统。 15:30 外婆打过来问什么时候去吃饭,出门去吃晚饭。 20:00 晚饭回来,装吃的,做家务。 20:30 看了一下,又是一堆邮件和评论,继续处理评论。 21:00 hash冲突需看一下python源码,然后写一个程序验证一下,发现maillist里面的过程有点问题。发个邮件过去确认一下,然后接着看了一下相关部分的python源码,三个版本。 23:00 看会动漫,然后洗澡。顺便说一下,最近在跟《便当》。 00:00 确定似乎要看一下论文,翻了一下论文,大概搞明白了什么意思。不过差不多一点了,该上床了。 1:00 在床上玩手机,安装一下各种程序,看点动漫,遂觉。 共计如下:写游玩过程的blog和整理相片两小时,研究技术和写程序六个半小时。 1.4日 8:10 开始起床 8:20 努力起床 8:30 起床(没老婆的日子里,闹钟要提早20分钟,不然会迟到),洗脸刷牙做早饭吃饭上班,路上听两首歌,处理一下私人邮件。 9:30 到公司,开始处理各种邮件,开始解决bug #600。 10:00 bug #600验证出了问题,等待测试验证,开始写cmdb项目的映射部分代码。 11:00 hash那里想到一点问题,写个代码验证一下。 11:30 吃饭了,hash那个问题可以走通,不继续写了。 13:30 午觉醒来,开始继续cmdb的代码。 14:00 测试验证出了bug #600的情况,开始修正问题,并出补丁。 14:30 开始写年终总结报告 15:00 继续cmdb的映射代码 16:00 健身一下,处理一下自己的邮件 16:30 从淘宝和京东上买了点东西 17:00继续cmdb的映射代码处理 18:00 本来应该去健身的,没带衣服,算了,吃了饭回家自己健身去 19:00 开始做家务 20:00 开始研究mp3文件格式 22:00 健身,WTF 23:00 洗澡看动漫咯

Jan 9, 2012 - 1 minute read - Comments

广西游记下

阳朔 我们前后两次路过桂林——先从南宁坐过夜火车到桂林,吃过一碗桂林米粉马上上船去阳朔。桂林米粉就是普通的煮米粉,然后自己加上各种配料。当地人是干拌,吃完加点汤。我们吃就是加汤吃,味道很鲜,但是没有老友粉那么特色。我怀疑外面卖的桂林米粉多是因为这东西比较容易操作。作为师傅,只要配料和汤料准备完,剩下的就是小碗煮米粉而已。人多的时候也可以很快操作。老友粉和螺蛳粉就没那么快的操作速度了。 从桂林到阳朔的船是旅行的重点。上船先买票,到了船上还可以包包厢。我建议——最好是多人去,直接包一间包厢,6人间600,送一套午餐。这样既不吵,而且中午吃的也会比较好一点。我们看过他们的普通午餐,根本就是白煮白菜加上米饭!上层的风景非常好,可惜我们去的不是时候,漓江正好处于枯水季。不是上游水库放行部分水流的话,我们今天的船根本一步都开不出去。而且当天略有阴雨,看漓江风光的时候朦朦胧胧。往好了说是别有风味,往糟糕了说就是白干一场。不过这次有几处,江面上开阔大气,两旁山水气势磅礴,船头上又没有什么人,感觉这几处还是值得的。 阳朔据说是最早的旅游酒吧聚集地,资本主义的桥头堡——比丽江早多了。我们看了看,不算大,只有三条街的大小。看看点评,里面最热门的是“谢大姐啤酒鱼”,出门发现谢三姐啤酒鱼,后面什么刘大姐张大姐全都站出来了,李鬼不但比李逵还多,而且多多了。我们找正宗店家找了半天,吃完还没法肯定自己吃的是正宗的。不过东西不错,啤酒鱼中午也有吃,是用啤酒来烧鱼,而不是清水。鱼的味道很赞,和中午效果完全不同——中午连鱼鳞都没有去干净。 我们吃东西的要点是——找一家,少点点,好吃再加,不好吃付钱去别处。因此啤酒鱼垫个肚子,我们又去了点评上的第二家——黄记玉米汁。讲到这里,感觉这趟游玩纯粹变成吃喝之旅了,没办法,两个吃货出门,还能指望点啥呢? 玉米汁不错,据说浦东也有分店,就在八佰伴旁边。好像是用煮过的玉米,用豆浆机打碎,滤过其中的植物纤维,只剩下植物蛋白的粘稠溶液。店里的特色是准备了很多便利贴,让客人自己写各种东西贴在墙壁上作为装饰。我们去的时候,墙壁上已经贴了一层又一层的便利贴了。 黄姚 黄姚不大不小也算是个旅游城市,不过名气上远没有阳朔和丽江那么响亮。猫咪不知道怎么把这个地方挖出来的,绝对赞,强烈推荐。我们去的时候还算是淡季,街道上的人不多不少。看着热闹,又不会拥挤。据说每到逢年过节,春秋风光明媚的时候,镇子上的民宿和镇口的旅馆全部爆满——镇口有一家四星级旅馆。由此可见这地方值得一去。 黄姚古镇是一个很小的镇子,离桂林大概3小时的车程。镇上水土很好,旅游业小有规模,又没有像阳朔和桂林那么夸张,感觉进去好像进了义乌一样。当地的小巷子还是很原生态的,大概有一半不到改成了商店和民宿,另一半还是普通民居。巷子四通八达,山水相连风光秀丽。据说有不少电视剧都是在此取景,因此墙上有很多民国年代的招贴画,像是回到那个年代一样。镇子上特产豆腐和豆豉(都是豆制品哈),尤其是其中一家的姜糖水豆腐花,超级赞。豆腐白花花,入口即化,姜糖味道很明显。一碗两元,一定要吃。 镇子白天进去是收门票的,晚上就不收钱了,随便进。住民居,吃农家饭,都随意。这里的农家饭真的是农家,我们在前厅吃饭,一墙之隔就传来小孩的哭声和笑声,门外还有只黄狗,每次有人经过,就汪汪的叫起来。我们吃的鸡是自己挑的,走地鸡——不走也不行啊,这里根本没有专门的养鸡器具,晚上都是关在一个小笼子里面。笼子顶上还有个洞,居然有一只鸡从里面跳了出来。行,公鸡中的战斗机,就是它了。 先上的是一道扣肉,用芋艿和五花肉烧的。热的时候很香,冷一点就不好吃了。然后是枸杞梗烧鸡杂鸡血什么的,用枸杞梗烧汤是这里的常态,我们两顿都吃到了这样的汤。鸡肉果然鲜美好吃,我们基本干光——剩下的骨头就喂了前面的阿黄。他倒是很挑剔,好吃的吃,不好吃的就不吃了。一点不像我们后来碰到的一只在路上的狗,给什么吃什么。 桂林 桂林基本就乏善可陈了,我们只在桂林停留了半天,而且还没吃到什么好东西。 中午的老字号米粉怀疑是李鬼店,汤头不鲜,而且免费的料太辣。辣不要紧,关键是一点都看不出,而且吃下去过一会才辣起来。我们一行人全都跑出来买水喝,喵舌头还吐个不停——我说这家原来是做辣酱出身的吧。下午去了象鼻山——既然来了,总不能不去吧。象鼻山现在在枯水季,所以不算很好看。然后我们到正阳路步行街逛了一下,回来吃了一碗螺蛳粉。螺蛳粉其实里面没有螺蛳,是用螺蛳肉煮汤,然后放酱料做的。感觉和老友粉非常类似,只是不放酸笋,略有差异。如果去柳州,记得吃上一碗,看看差异。 OK,广西之行基本就是这个样子,如果你也要去,不妨参考一下。另外补充两个值得去的地方,七星山和龙脊梯田。这次我们时间有限,未能成行,非常遗憾。

Jan 5, 2012 - 1 minute read - Comments

广西游记上

说是游记,大概会写成一笔流水帐吧。我写东西大多数情况下,信息多于修饰,一贯如此。 北海 头天飞的北海,天气不错,气候宜人,下了飞机我就脱掉了棉裤棉衣。北海位于广西最南端,几乎是中国大陆最南方的城市,规模并不大,冬暖夏凉气候宜人。我们住在侨湾那里,听当地人说,是当年东南亚排华的时候,从国外逃回的华侨,当地政府在这里安置,形成的村落。所以当地居民很多会说越南语,而且很多东西上标注的都是泰文或者越南文。这里离著名的北海银滩并不很远,打车15就到。 银滩其实没有想象中的好,主要是因为现在是冬季,海水虽然不刺骨,但却不能游泳,因此来的人几乎没有。据当地居民说,这里在旺季的时候,几乎全是人,完全无法游泳。银滩的海浪冬夏不尽相同,不便评价。但是她的沙滩非常好,沙子洁白细腻,踩上去一点都不痛,粘在脚上拂拭不去,干了还是薄薄一层。不仅远离海岸的地方如此,而且海岸边上的沙子也如此,明显是冲积形成的。厦门的白城更加商业化一些,一年四季都有人,卖小吃的,栈道上观景的,冲淡的,始终不断,但是沙子是个先天劣势。厦门远离海岸的沙子是细沙,但是岸边的就是粗砂,踩上去如同足底按摩一般,明显后面的沙子是运过来的。但是银滩在淡季的时候,冲淡的,卖东西的,基本都没有人经营,明显只做一个季度的生意。 我们去了南珠宫买了点珍珠,这里的珍珠非常好,属于当地特产。珍珠的常识是,海珠比淡水珠好。但是海珠更加圆滑透亮,不适合做胸针什么的,大部分都是项链手链。珍珠项链又不适合每个人,所以要不要买,见仁见智。我们买的是淡水珍珠胸针,也不算贵,就是买着玩玩而已。猫咪倒是对这里的甘蔗汁更加感兴趣,喝过一次后念念不忘,吵着要喝。这里的甘蔗是青皮甘蔗,现场压榨。汁液鲜甜,在上海可是很难喝到哦,来的不妨买一杯尝尝。 侨湾那里也有个海滩,和银滩差不多,只是名气没那么响。我们在旁边饭店吃的晚饭,贵死了!!!不过饭店外的风景甚好,我还抓了好几张不错的夕阳,算是心理平和点。 从北海坐火车到南宁只需要三个小时不到,不过一天只有两班火车。与此相对的,火车站修的广大气派,不知道是干什么用的。照我说不妨学学杭州的火车站,把上面的部分改建成商业建筑,还能充分利用。列车上一点让人不爽的地方就是,上去后一趟火车3个小时,推销东西的有四批。一个卖毛巾的,一个卖鞋油的,一个卖牙刷牙膏的,一个卖速算书的。从头卖到底,五分钟清静都没有,猫咪想睡觉都睡不着,铁道部最近穷疯了还是怎么? 火车上我们对面的一对老头老太是北京人,石油部的,退休了到处玩。老爷子心脏有问题,所以在气闷的火车上非常不舒服。问老太太为啥年纪这么大了还到处跑,老太太说,老爷子心脏不好,装了支架,闷在家里不痛快。出来和老朋友见个面,顺便在北海休养休养。北海气候宜人东西便宜,他们住了一个月了。说着呢,老爷子散步好久没回来,我跑去厕所敲了半天门,没开。刚说要不要找列车员开门,老爷子回来了。他去后面车厢上了个厕所,顺便透透气。没事我就准备回去和老太说一声,老爷子继续往前走。过一会,老爷子从前面绕回来了——他原本倒是想回座位,可是找不着座位在哪了。我们的火车上下两层,他光在上面找,是找不到。我碰到了他,以为想继续散步,也没拉他回来。 南宁 我们只在南宁呆了半天,但是对南宁的夜市印象非常深刻。除掉下午去了一趟广西博物馆,剩下的时间就是吃吃喝喝。先是打油茶,狗肉(都是好东西啊),后来还有一个艾粑粑。打油茶是当地特产,用糯米脂肪和茶打出来的一种饮料,具体可以自己百度。我喝喝感觉口味一般,味道不算好也不算糟。艾粑粑是用艾草汁做的一种糯米食品,大概就是没有馅的艾草青团拍扁。不过这年头还有哪里有正宗艾草青团? 夜市里面吃到的各种奇奇怪怪的东西就多了去了,我甚至在里面看到了整只的鳄鱼和鲨鱼。我们首先吃的烧烤,旁的不用细说,里面最特殊的就是猪鞭,平时烧烤这东西可没有当成鸡翅一样在卖吧。然后还有南宁特色,老友粉。广西这里偏爱米粉,而且各地做法不同。到桂林要吃桂林米粉,到柳州要吃螺蛳粉,到南宁就要吃老友粉了。这个是用酸笋和各种料来烧的米粉,味道酸酸馊馊,据说很多人吃不惯。我吃吃很好吃啊,和北京的豆汁完全不是一个概念。 后面有一碗牛杂汤,是用各种牛的下水熬的汤。猫咪不吃内脏,所以让我来吃。我貌似吃到的是牛肺,也好,润肺通气。然后,今日重点登场——王老吉。我们是在一个糖水铺里面看到王老吉的,当地朋友立刻就一脸暧昧的笑容。我们点上各种糖水,然后点了一杯王老吉来品尝。我第一个下手,一口下去——我去啊,这玩意苦的厉害。不过还好,当年我也是喝了好几年中药的,脸上神色不变,点点头,恩,这玩意有点苦。还记得那个笑话么?三个傻瓜摸烧红的秤砣是什么味道的——傻喵马上说,是么是么?多苦啊,我尝尝。恩,很好很好,马上看到某只喵像被掐住喉咙一样的扑腾——我趁机喝掉她的糖水,缓解一下嘴巴里的味道。 后面一帮不信的人,前仆后继的相继中招。这玩意的味道不但苦,而且从喉咙里面不断散发出来,根本不是喝口糖水就能压掉的。这是当地正宗凉茶,可不是外面卖的王老吉那种水货。当地朋友是感冒,当作药喝的。我们几个就傻傻(好吧,里面也许有一点点我的因素)的分别中招。 最后一个吃的是南宁的小馄饨,这个很赞。里面放的丸子是牛肉丸,打的很彻底,很Q很有弹性。馄饨包法很特殊,是用皮子卷出来的,馅料粉红色,煮开后有嚼劲。就是吃的时候有点苦——这个绝对是王老吉惹的祸。总体来说,南宁之旅还是留下了很深刻的印象的——东西好吃!!!

Jan 4, 2012 - 1 minute read - Comments

哈希冲突漏洞的原理和对策

cpug上面最近在讨论一个严重级漏洞,漏洞的相关资料如下: ERT-VN:VU#903934 CVE-2011-4815 CVE-2011-3414 CVE-2011-4838 CVE-2011-4885 上面主要讨论的是这么一个概念,当用户post一个数据,而且这个数据又是一个form的时候,应用需要先将form解析为dict,然后才能方便的使用。例如a=1&b=2,可以解析为{'a':'1', 'b':'2'}。之所以1和2是字符串,是因为只有用户自己才清楚这个数据的类型。 通常情况下,这个form的key都是随机的,生成的hash碰撞概率很低,因此dict的默认实现——hash table没什么问题。但是当攻击者恶意构造数据的时候,情况就完全不同。我们首先讨论一下hash table的实现——开链法和二次探测法。 所谓开链,就是指对所有同余hash,将他们挂到一个hash表项上,形成一个链表。而所谓二次探测,就是在第一次hash冲突后,再进行一次hash,作为第二地址。 开链法对碰撞冲突是有先天缺陷的,因为同余碰撞的构造远比hash碰撞的构造简单。假定hash table有11个表项,那么平均11次尝试就可以得到一个元素,和原始元素hash同余。如果选用这样的恶意key序列,在执行构造的时候,hash table就退化为了链表。链表的插入复杂度是O(n\^2)级的。而作为攻击者,为了获得n个hash同余对象,所需消耗的复杂度做如下估量。首先考虑hash table length和n同阶,因此以n作为hash table长度。这样每n次尝试就可以获得一个恶意元素,获得n个元素的复杂度为O(n\^2)级。 也就是说,即使是sha256这样强的hash算法,只要保证哈希函数特性,对同样的值得到同样的哈希,就无法保证开链法的安全。 而二次探测法对这个是有先天抵抗的,二次探测法的第一次碰撞并不难构造,但是第二次哈希后依然保持同余的构造难度就由n增加到了n\^2,多次碰撞的构造难度以此类推。虽然我没有完整的计算过这个值,但是猜测难度量级应当是O(n*n\^n)级别的。这个级别基本就不用玩了——前提是哈希算法必须是安全的。 由于为了节约计算过程,因此python和php的hash算法都没有采用md5之类的高散列算法,而是一个很简单的算法。我摘抄一下Python2.7.2中的这段代码。python_string_hash.c static long string_hash(PyStringObject *a) { register Py_ssize_t len; register unsigned char *p; register long x; if (a->ob_shash != -1) return a->ob_shash; len = Py_SIZE(a); p = (unsigned char *) a->ob_sval; x = *p << 7; while (--len >= 0) x = (1000003*x) ^ *p++; x ^= Py_SIZE(a); if (x == -1) x = -2; a->ob_shash = x; return x; } 按照<python.

Jan 2, 2012 - 1 minute read - Comments

理想的平板

7寸以下宽屏,原因,可以一手拿住。 300g以内,原因,可以一手拿住。 厚度1cm以内,原因,拿得舒服。 10小时续航,原因,一天可以只充电一次。 3g支持,原因,不支持3g的不叫理想的平板。 IPS/PLS屏幕,原因,普屏的视角的却有的时候很不爽。 usb可充电,原因,外部电源续航方便,充电方便。 支持TF卡,原因,方便。 USB OTG,原因,可以拖U盘和键盘。 GPS支持,原因,地图是很重要的。 好吧,我们合并要求起来看看。300g以内10小时续航,目前芯片和屏幕的功耗连电池重量都不够。所以这个无形就要求更加节能和强劲的芯片,还有更加节能的屏幕。同时,这个屏幕还不能比IPS视角差。 继续等吧。

Jan 1, 2012 - 1 minute read - Comments

语言的继承和历史包袱

出去玩,在阳朔过的新年,随便发点吧。 我们知道,C++继承了C语言的语法,并且号称完全兼容。实际玩下来,C标准自己也不怎么统一,说基本兼容大家是没异议的。这个给C++带来了无限的好处,从一开始,C++的用户数量和其他语言就不在一个数量级上。《C++语言的设计和演化》一书中说,作者设计出来后没多久,基本没有做宣传,就有无数人给他打电话,用户数量飙升。作为一个新出的语言,即使是Go也没有如此的待遇,这就是继承了C的好处。 有好处就有包袱,C++兼容C,出现的包袱也很大。想做GC?想使用智能指针?那就没法兼容C(具体不细说)。此外里面有无数的问题是因为“需要兼容C”而变成一个四不像的。再后来,为了在语言上更进一步,Java继承和吸收了C++的部分语法。这给Java带来好处,也带来问题。 继承一个东西的好处,就会带来一定的包袱。这个也同时体现在Zope社区和Python社区里面。Zope3把2直接推倒重来,导致了用户纷纷出走(当然还有别的原因)。从而出现目前Python Web框架满天飞,各自为战的局面。而Python3则是不完全兼容Python2,导致目前上面的可用库依然不足。在Python3.2的时候,几乎是被迫的做了一些前向兼容,来换取用户可接受的过渡。同样,前几天我在说Django的演进的时候,也说过。如果我要做一个jinja版本的Django出来,大家接受度如何?当然,这不代表你无法在Django中使用jinja,不过发行版中不会作为标配。 还有什么语言继承和革新的事情?大家不妨想想。自己做的时候,对照一下,谨慎取舍。

Dec 28, 2011 - 1 minute read - Comments

大家帮我验证一下证书

今天一个朋友和我聊天的时候,问我,是不是hosts不安全。我说,都不安全。翻墙的话,必须对翻墙服务器的拥有者相当信任才可以。不但要相信人品,而且要相信技术,相信服务器不会被入侵。使用gae的话,服务器要自己组建,否则你无法确定组建者是否会修改代码,加入监控代码再上传。hosts引入的问题是,你自己对自己进行了一遍dns毒化,如果目标本身是错的,你就傻乎乎的跳到了一个攻击者的机器上,而且你的行为使得域名核查不能阻止你犯错——他们也认为这个机器拥有你要去的domain。 不过有意思的是他给出的一个例子: https://199.59.149.208/ 这是用于访问twitter的一个hosts。 https://twitter.com/ 问题是,两者的授权是不一样的。我在《论不同系统和客户端的证书管理》里面说过,如果你访问google的时候发现证书是cnnic签署的,你是否觉得可怕。而这次,我发现hosts的证书是GeoTrust签署的,但是我访问twitter的证书是VeriSign签署的。 一家网络公司会找两个不同的供应商签名么?我不清楚。chrome的自动验证对这个无效(所以很危险),因为域名和ip对不上。我试过用openssl验证,但是debian的openssl有个bug,我用CApath无法验证任何证书,包括真实的twitter证书。所以我也无法解答这个问题。从IP上看,这个IP到确实是Twitter的。 NetRange: 199.59.148.0 - 199.59.151.255 CIDR: 199.59.148.0/22 OriginAS: AS13414 NetName: TWITTER-NETWORK 不过这不说明任何问题,完全有可能在路由器上把这一地址段定义到了其他设备上,从而实现man in middle。关键是证书——谁可以帮我验证一下这本证书是否有效?