庆祝十一月的过去

十一月三十号,十一月就要过去了。
昨天和芋头聊天的时候才意识到,持续了一个多月的坏情绪已经消失。就像来的时候毫无征兆一样,退去也完全没有给我任何准备的时间,让我都有点难以适应。不管怎么说,终归是件好事吧。
我一直努力让自己保持积极的状态,并且希望这能够给自己和周围朋友们的生活带来正面的影响。不过有的时候,我还是会陷入低潮,会觉得很难解开心中的沉重。这种感觉非常不好,让我什么事情都做不了,更严重的是让我觉得手上的活儿太没意思,不想做事。
和以前不同的,十一月这次坏情绪持续得太久了。我试图调整的努力都像金融海啸下政府的救市方略一样苍白无力,只能看着这些情绪像爬山虎一样无止境的蔓延。非常的无奈。我有打电话给朋友们,希望能得到一些开导;也有跟家里人抱怨,希望能发泄一下情绪;还有尝试过去读闲书,想转移注意力。可是这些都无济于事。
都在问我为什么不开心,为什么郁闷,哪不顺了。可是我真的好难回答,我完全不知道这是怎么开始的。仿佛有一天起床,突然一切都变坏了,上班的路总是那么拥堵,手头的工作总是不合乎起码的逻辑,每天吃的饭菜总是不变的几样,周末上街游玩也总看到那几样年年不变的商品,全国各地天天都有可笑的新政策,Blogger也一直登不上去——总之没有一样我看着顺眼的。任何一点都可以成为我不开心的理由,我又知道,任何一点都微不足道。
还好,不管怎么说,这一切过去了。
Celebrate for coming December
Continue Reading

二三事

这些日子比较无聊,所有的朋友们都在忙着自己的一份事情,只有我例外。其实我真不是无事可做,只是没有做事的激情,总觉得手上的事情索然无味,却又找不到什么有意思的事去做。业余时间也是如此。上星期把整个CD架子上的碟片全听了一遍,居然也没能从不良状态下解脱。
今天讨论了一下午如何拆站的问题。期间王哥有点犯晕,他说:“就好像脑子里缺了点什么,想不起来……”我想了好一会儿,突然明白:“你一定是缺咖啡因!”网站构架那点事已经没有什么新的挑战。功能没有大的变化,事情做起来也就是了解需求,建表,导出类,编写逻辑,合并模板。甚至连一条像样的SQL都不用写——这些已经在半年前就被封到类中自动完成了。
兴趣只能在业务上。可是我早已经知道,我对最终用户的评价不感兴趣。我只想设计出漂亮的中间接口,来求得自己心中的完美。就像一切抽像艺术作者那样,不在乎读的人是不是明白。漠视用户是不能容忍的,我知道。还好我的工作习惯决定了我的直接用户总是我的同伴——表现层程序员。
晚上和小庆聊天时,突然创意就来了。以前念中学的时候,语文老师解释:为什么流传千古的诗词多是凄楚悲凉的语境,多是郁郁不得志的哀鸣?是因为人在高兴的时候常常不会想写东西来抒发情感。那么,在Blog发达的今天,统计一个人一年来的发帖数量,就可以得知心情好坏的情况,甚至可以预告下一次心情变坏的时间。
Continue Reading

ZT我在南京成功地扶起了一位摔倒的老太太

 原文来自有意思吧
南京。住在便宜的旅店里,一大早就背起包来到了著名的玄武湖边游逛,我喜欢这样free地在一个陌生的城市里漫游,真切感受这城市的生活气息。
好多人在晨练,老年人、中年人,男男女女,一派祥和的样子。远处一个步履蹒跚的老太,大约60多岁,正走下几级台阶,颤颤悠悠,让人捏把汗。在下最后一个台阶的时候,老太脚底一拌摔倒在地。
四面晨练的人围了上来,我也快步跑过去。老太侧卧在地无法起身,嘴里“哎哟哎哟”声不断。围观的旁人你看我我看你,都没有上前相扶的意思。看见我这个背着行包的外地人从远处跑过来,大家自动给我让开道,众人眼睛都看着我,仿佛在说:“年青人力气大,你扶老太起来吧!”有没有搞错,大家都是每天一同晨练的老伙伴,摔倒了都没人扶,这是什么世道?老太的“哎哟哎哟”声不断传入耳,激起了我无限的同情心。谁叫我是一个古道热肠、乐于助人的大好青年呢?
老人有难,无人相助,我上!
赶紧从背包里掏出一张纸,上书《救助老人安全宝典》,快速扫描了几眼划了红线的要点。
对于一个像我这样富有爱心的人来说,助人是快乐的。但是,助人是需要有标准程序的,特别是扶助摔倒在地的老太,就像ISO9000,次序不能乱、手续不能缺,否则,助人的后果是很严重的。
下面,就请各位跟随我一起,重温我扶起老太的标准动作程序。

1、 通知家人、亲友前来处理:
我蹲下身:“老太,你好,你还记得家里的电话或子女亲友的手机号吗?我可以帮你打电话叫他们来。”
老太努力回想:“哎哟,摔的有点头晕,记不起什么电话号码了。”
▲《宝典》用醒目粗黑体大字写明:最佳救助方式,通知家人亲友!如无法联系,继续以下程序▲

2、 问老太姓名及子女职业:
我:“老太,请问你姓什么?”
老太:“我姓徐,哎哟!”
我惊得连退三步:“什么,你难道就是网络江湖传说中著名的徐老太!?”
▲《救助老人安全宝典》用醒目的粗黑体大字写明:徐老太,中止救助程序!报警处理。▲

老太:“错了,我不是徐老太,哎哟!我姓许,允许的许。”
我抹了抹汗:“哦,听错了,是许老太。请问你有子女吗?从事什么职业?”
老太:“我有一儿子,在电力公司工作。”
▲《宝典》用醒目的粗黑体大字写明:子女在警察局、法院等强势部门工作,中止救助程序!报警处理。▲
问清老太姓名及子女职业情况,确认救助程序可以继续下去。

3、 我又从背包里掏出一张纸,书曰——

自愿接受救助声明
本人XXX,性别(男/女),XX岁,XX市XXXX地址人。因本人年老体衰、行动不便,不慎于XX年XX月XX日XX时XX分,于XX地自行摔倒在地,无法起身。
本人愿意接受XX市XXX人的热心扶助,本人的所有伤病与XXX无关,一切医疗费用由本人及家人承担,与XXX无关。
特此声明。
声明人签字:
声明日期:____年____月____日

我把声明大声的给老太读了一遍。
我:“老太,你如果同意这个声明,就在上面签个字,我马上就可以扶你起来。”
老太:“没问题,哎哟!我可以签字。”
▲《宝典》用醒目的粗黑体大字写明:拒绝在《自愿接受救助声明》上签字,中止救助程序!报警处理。▲

我掏出笔交给老太的右手,可老太的右手直发抖,笔都握不住,更别提签字了。
老太无法签字,难道就要中止救助吗?放心,古道热肠以助人为乐的我早有预备。

4、 我再从背包里掏出录音笔——
我:“老太,你可以照着这张声明读一遍,我录音作为凭据。”
老太:“好的,哎哟!”
我把那张《自愿接受救助声明》摆在老太面前,老太照着念起来:
“本人许老太哎哟,女,65岁,南京市哎哟XXXX地址人。因本人哎哟年老体衰哎哟!……”
老太正痛苦吃力地念着,旁边有位戴眼镜的中年男子发话了:“哎,小伙子!我是本市律师,专攻民事纠纷案件多年,这是我的工作证,你看看。”
我接过工作证看了两眼,问道:“有何指教?”
律师:“老太不住地哎哟着念你的《自愿接受救助声明》,这个录音恐怕不能作为你免责的证据,法官会认为老太当时受到了胁迫,这样的声明并非老太自愿!”
我一楞,这点倒没想到:“那……那……”
律师:“小伙子,你的热心大家都看见了,但事情并非如你想象的顺利,最好还是报警吧!”
古道热肠以助人为乐的我,岂能半途而废,别急,我还有预备。

5、 我又从包里掏出一张纸,围观众人齐声惊呼“还有?!”书曰——

救助老人目击证明
XXX,男,XX岁,XX市XXXX地人。XXX于XX年XX月XX日路经XX市XXXX地,发现XXX老爷/老太自行摔倒在地,无法起身。
XXX一向古道热肠以助人为乐,有意救助XXX老爷/老太。因XXX老爷/老太摔倒而致身体不便,无法在《自愿接受救助声明》签字认可,或提供有效法律效力的录音证明。
为减轻XXX老爷/老太的痛苦,使其及时得到救助,XXX愿意采取行动,在得到XXX老爷/老太口头许可的情况下,扶助XXX老爷/老太起身并送往医院救治。
以下10位热心的本地人,愿意作为本事件的目击证人,并集体签字担保证明:XXX老爷/老太系自行摔倒,其伤病与XXX无关,其治疗费用由XXX老爷/老太家人子女承担,与XXX无关。
目击证人签名如下:
证人1: 住址: 工作单位: 身份证号: 联系电话:
证人2: 住址: 工作单位: 身份证号: 联系电话:
证人3: 住址: 工作单位: 身份证号: 联系电话:
证人4: 住址: 工作单位: 身份证号: 联系电话:
证人5: 住址: 工作单位: 身份证号: 联系电话:
证人6: 住址: 工作单位: 身份证号: 联系电话:
证人7: 住址: 工作单位: 身份证号: 联系电话:
证人8: 住址: 工作单位: 身份证号: 联系电话:
证人9: 住址: 工作单位: 身份证号: 联系电话:
证人10: 住址: 工作单位: 身份证号: 联系电话:
证明日期:____年____月____日

▲《宝典》用醒目粗黑体大字写明:目击证明必须有10位当地居民签字确认,否则中止救助程序!报警处理。▲

我向围观的人群挥了挥手上的《目击证明》,深情地说:“本人助人决不轻言放弃,各位热心的南京人民,能否为小弟做个证明,在这上面签个字留个名,万一将来有纠纷,麻烦为我作作证,还小弟清白?”
人群里一阵低声议论,很快,那位律师第一个走出来在《目击证明》上签字,在他的带动下,需要的10个目击证人很快签完名。
我感动得热泪盈眶,嘴里不住地说“谢谢,谢谢!”多热情的南京人民啊,在我最需要的时候,给了我无私的帮助。
我把众人签名做证的《救助老人目击证明》给仍躺倒在地不住“哎哟”的老太看,老太的眼里明显涌出了激动的泪花。
我轻声问:“老太,你看了我这份《目击证明》,同意我扶你起来吗?”
老太连声说:“愿意,愿意,哎哟!”
▲《宝典》用醒目的粗黑体大字写明:扶起老人必须得到本人的确认,否则中止救助程序!报警处理。▲

我把老太扶起来在地上稍坐,然后对大伙说:“谁能叫几辆出租车来,我送老太去医院。那10位目击证人,能否跟我到医院继续做个见证啊?出租车费我来付。”
这时律师说话了:“小伙子真是个大好人,令人钦佩!我们10位证人都愿意继续跟你去医院做目击证人,车费我们自己出好了。”
我又差点热泪盈眶(没办法,心肠好的人容易受感动),多好的南京人民啊!
一大群人赶到医院,直奔急诊室,阵势比较大,连医院院长都惊动了。
初步诊断,老太右脚踝扭伤浮肿,需要住院做进一步检查。这时医生开出一单子,说:“谁是老太的亲属啊?先交2000元住院押金和检查费,马上要拍片。”
众人都望着我,我喏喏地说:“这个,那个……我们都不认识老太,是老太自己不小心摔倒无法起身,我们把她扶起送到医院来了。”其实,我背包里还备有一份《住院押金借款证明》,但这会我有些不好意思拿出来。
这时,律师已低声的向院长解释了事情的简单经过。只见院长拿过单子,说:“原来是这样,这位外地年青人在我们南京热心的扶助老人,值得我们学习。住院押金的事就不好再难为人家了,我签个字,先给老太检查治疗要紧。”
我松了口气,助人的事情总算顺利,没有什么环节程序出差错。
大约半小时后,舒缓过来的老太,终于记起了家里的电话,家人很快就会赶到。
我趁大伙不注意,悄悄的出了医院,抬头望着蓝天,心情无比舒畅。

Continue Reading

知心的憔悴

“最近過得怎麼樣”,這個樸素的問候已經不好問出口了,連跟家裡的電話也不例外,仿佛酵在罎子里的餿水,露出一點點就會讓無數的人捂口遮鼻,快步離開。其實倒也真沒有必要問出口,可以想像回答中充滿了有意無意的謊言,或者至少是粉飾。也許是爲了少讓問的人操心,也許發起問候的人也不過是無話可說時的隨便一問。用西洋人和樂觀派們的調侃,就是“我的生活關你屁事”,往深了說,那便是“告訴你也無濟於事”或者“懶得跟你解釋”。
可見了面還是要問候的啊。總不能直接說你好,然後說再見吧?不,不會見面了,至少今天不會。那麼冷的天,幹嘛跑出去瞎轉悠啊,在家上上網多好。網就是這麼把身邊的人疏遠的。在網上看不到你的喜怒哀樂,看不到你是否眉頭緊鎖,更看不到你在匆匆中發奮還是在寂寞中淒涼,乾脆連你好都懶得說了,或者,網路公司有更先進的手法——隱身。
煩惱的時候,甚至找不到一個鮮亮的圖標可以傾訴;開心的時候,也沒有閃動的精靈可以分享。只能把一天天一個個故事寫入厚厚的日記,然後鎖上這些記憶的片段,讓真實的過往慢慢爛在心底。我并不滿意這樣的生活這樣的,網路是生活的附屬品,生活不是網路的奴隸。我努力去打破沉默,儘量去安排一些趣意盎然的活動,卻發現冬天的寒冷與網路造就的陋習一起匯成厚厚的障壁。
於是打電話,希望通訊終端能拉近遠方的朋友。可惜不能,眾人的憂愁像紛飛的雪花一樣飄落,籠罩了大江南北,長城內外。我很埋怨自己怎麼沒有交上個把新西蘭或者澳大利亞的朋友。我真的沒有辦法控制消極情緒的蔓延,許許多多的無奈和不該,也都變成遺憾和傷感從電話的聽筒中湧出來。此刻我直奢望這冰冷的冬天能夠快一些過去,企盼溫暖的陽光能解放這片土地上的人們。
這才初冬啊!我放棄。
Continue Reading

用usingPost方法检查POST变量,提升php站点安全性

单入口网站比多入口网站具备更高的统一性和安全性,你可以在入口处对来自浏览器的数据进行统一的验证。利用UrlRewrite技术实现的单入口PHP方法网上有大量文章可供参考,这里就不多说了。这篇文字还是多说说usingPost方法的设计和它提升PHP站点安全性的原理。
如下图,通过UrlRewrite把URL请求解析成对index.php的请求,在这一步可以实现对$_GET参数的限制。我设置的Web站只接收大小写字母、数字和小数点构成的url。这样SQL注入和XSS攻击都无法通过GET方法实现。根据我做的十余个网站的经验,GET方法传的资料一般都是简单的数字字母组合,比如列表的分页页码(数字),购物车操作用的MD5密钥等等。

这样一来,Web安全防范的的重点就在POST数据上了。用PHP对POST数据作安全验证可以说非常简单。有ctype函数库和preg正则函数的帮助。htmlspecialchars和mysql_real_escape_string让XSS和注入攻击也成为不可能的事情。我在公司时,每次谈到Web安全问题,常说的一句话是良好的安全意识比什么都重要。我现在依然保持这个观点。那么为什么还需要写usingPost函数呢?道理很简单,那就是减少犯错的可能性。
我经历的项目中,大量的Web安全漏洞都是在修改功能的时候被引入的。负责修改的人常常忘记对新增的POST变量做安全检查,尤其是当这个负责修改的程序员刚从烟雾缭绕的会议室出来,加夜班完成这个老板眼中极其重要的功能调整时,更容易“做到能用为止”。
usingPost的设计是让$_POST数组先声明才能使用。usingPost函数提供int,dec,hex,date,string,email,mobile几种数据类型的检查。调用的时候它会遍历声明列表,把没声明的或者类型不对的POST变量删掉。下面的例子中,接收字符串username、字符串nick、十进制整数gender、日期birth四个不同类型的POST变量。调用usingPost后,名称不相符的POST变量和数据类型不符合的都会自动被删除。

usingPost('username:string, nick:string, gender:dec, birth: date');
这样一来,usingPost会帮助验证POST变量。新增功能忘记验证的的变量会因为被usingPost删除而无法使用,Web安全得以更有效地保证。

介绍一下usingPost的数据类型

  • dec 十进制整数,只能是0-9的数字
  • hex 十六进制整数,可以是0-9的数字,大写或小写的a-f的字母
  • int 整数,包括上面的十进制和十六进制
  • date 日期,只接收YYYY-mm-dd的格式
  • email Email格式字符串,用正则验证
  • mobile 手机号码,仅用于中国,以13/15/18开头的11位十进制整数
  • string 字符串,不验证具体格式,用htmlspecialchars转义HTML格记
  • unsafe 不确保安全的原始类型,由程序员自己作安全验证

usingPost函数源码下载using.php.gzusing.php.bz2

Continue Reading