侠客书屋 通过搜索各大小说站为您自动抓取各类小说的最快更新供您阅读!

2001年9月广州

暑气还没褪尽,烈士陵园旁的红棉树缀着零星新叶。

我们从青岛时装周回来没几天,Eva就约我见面,说是有重要的事情。

在羊城晚报集团大楼一楼的咖啡厅,Eva穿米白色职业套装,手里攥着《中国时装》最新刊,封面上的刺绣旗袍在阳光下泛着柔光。

“刘军,集团要给杂志做网站了。”

她把杂志推到我面前,内页夹着张手写的需求清单.

“不只是放些文章,得能让客户在线下单,比如订杂志合订本、预约时装秀展位。但我们编辑部没人懂技术,想请你做技术顾问,全职驻场三个月,薪水按行业三倍算。”

我笑道:“现在还是网益公司的骨干员工,怎么可能全职驻场呢。我只能抽时间进行指导,可以利用周末时间先培训你们公司人员。”

Eva捂住嘴,说道:“是啊,我倒把这忘了。回去我跟领导汇报。”

我指尖敲了敲清单上“服务器搭建”几个字:“你们想要自建服务器还是托管?国内托管服务商里,万网的机柜稳定性不错,珠江新城那边还有电信的机房,延迟能控制在 50ms以内。”

Eva眼睛亮了亮,从包里掏出笔记本:“我们听技术的。但集团有要求,域名得含‘chinafashion’,还要备案——上周问过羊城晚报的技术部,他们说备案得找省通信管理局,可能要一个月。”

“域名注册我熟,中国频道现在能实时注册cn域名,先抢注‘chinafashion的下级cn域名’,再同步走备案流程。”

我拿过她的笔,在纸上画了个简单架构图。

“前端用 htmL+cSS,后端选 Ruby 1.6.7,这版本去年刚出,语法比 perl简洁,适合快速开发订单系统;数据库用 mySqL 3.23,轻量还免费,羊城晚报的新闻后台也在用这个。”

她立刻起身递来一份聘书:“这周末就开始吗?编辑部腾出了间小办公室,连 cRt显示器都给你备好了,17寸的三星,比我们编务用的还大。”

周六早晨 9:00

我推着装满工具盘的手推车进了会议室——里面有 windows 2000 Server安装盘、Apache 1.3.20的压缩包,还有打印好的《Ruby入门手册》。

Eva领着五个懂电脑操作的同事来听课,有负责内容的编辑,也有管发行的专员,每人面前摆着台装了 windows 98的台式机。

“先讲网站的‘骨架’。”

我把投影仪打开,屏幕上跳出架构图。

“大家看,用户在浏览器输域名,先通过 dNS解析到我们的服务器 Ip——这个 Ip是托管机房分配的固定地址,就像门牌号。然后 Apache服务器接收请求,把动态内容交给 Ruby处理,再从 mySqL里调数据,最后返回给用户。”

发行部的老张举了举手:“刘顾问,要是用户在新疆下单,会不会很慢?”

“问得好。”

我点开电信机房的网络拓扑图,“我们选的机房有双线带宽,新疆用户走联通线路,延迟能控制在 200ms以内,比拨号上网打开网页还快。不过要注意,图片不能太大,每张控制在 50Kb以下,不然拨号用户加载会超时。”

接下来教他们注册域名。

我打开中国频道的网页,演示输入“chinafashion国际顶级中文域名”,确认未被注册后,填了羊城晚报集团的营业执照信息:“这里的‘组织类型’要选‘事业单位’,备案时要和通信管理局的资料对得上。现在付款用银行转账,得等三个工作日才能生效,比国外的域名注册慢,但合规。”

编辑小李突然指着屏幕:“那我们的订单数据存在哪里?安全吗?”

“mySqL数据库会设两层密码,一层是服务器登录密码,一层是数据库用户密码。”

我打开 mySqL的命令行,输入“GRANt SELEct,INSERt oN orders to editor @ localhost IdENtIFIEd bY cwpc2001”,“像编辑只能查订单,不能改数据;只有 Eva和我有修改权限,密码里包含集团缩写和年份,不容易破解。”

几节课下来,同事们都记了厚厚的笔记。

老张还把 Apache的配置参数抄在工作证背面:“以后服务器出问题,我也好帮你搭把手。”

到了晚上,大家都回去了。

办公室只剩我和 Eva。

她把自己的电脑搬到我旁边,cRt显示器嗡嗡作响,屏幕上是 UltraEdit编辑器——2001年还没有 Ruby专用 IdE,只能用文本编辑器写代码。

“今天教你写订单提交模块。”

我新建了个“order.rb”文件,先写类定义:“Ruby是面向对象的,我们定义个 order类,包含客户姓名、订单金额这些属性。你看,‘attr_accessor :name,:amount’这行,就能自动生成 getter和 setter方法,不用像 Java那样写一堆函数。”

Eva跟着敲键盘,手指偶尔会按错键:“为什么这里要用‘ @name’而不是‘name’?”

“@开头的是实例变量,只有这个 order对象能访问。”

我指着屏幕,“比如你创建一个订单‘order1 = order.new’,order1的@name和 order2的@name是分开的,不会混在一起。”

接下来连数据库。

我打开 mysql-ruby 2.4.1的驱动包,教她写连接代码:“‘mysql.new (localhostadmincwpc2001chinafashion)’这行,依次是服务器地址、用户名、密码、数据库名。要记得加异常处理,不然数据库断连时,用户会看到一堆乱码。”

她试着写了段提交订单的代码,运行时却报错了。

我凑过去看,发现她把“INSERt INto orders (name, amount) VALUES (#{@name},#{@amount})”里的引号写错了——字符串变量要加单引号,数字不用。

“你看,要是客户姓名里有单引号,比如‘oNeil’,这段代码就会报错。”

我帮她改成参数化查询,“用‘prepare’方法,把变量当参数传进去,就能避免这个问题,还能防 SqL注入——以后写代码都要这么写。”

半个月后,Eva能独立写用户注册、订单查询的模块了。

有天晚上,她运行代码成功调出最新订单时,兴奋地拍了下桌子:“原来 Ruby这么简单!比我大学学的 c语言好懂多了。”

我看着她屏幕上整齐的代码,突然觉得这几个月的周末,比做任何技术项目都有意义。

某个周末天河航空商务酒店,

我和 Eva刚吃完广式晚茶,就把笔记本电脑接到房间的拨号网络上。

她点开“中国时装网”的订单页面,屏幕却跳出乱码,夹杂着“oR 1=1--”的字符。

“怎么回事?”

Eva的声音有点慌。

我立刻远程登录服务器,打开 Apache的 access.log——里面全是异常请求,比如“\/order.php?id=1 oR 1=1--”。

“是 SqL注入。”

我快速切换到 mySqL命令行,输入“SELEct * FRom orders whERE id =1 oR 1=1--”,果然查出了所有订单数据。

“攻击者用拼接 SqL语句的方式,绕开了登录验证。还好我们之前教你的参数化查询,大部分模块都防住了,只有老编辑写的查询页面没改。”

我先把有漏洞的页面下架,换成静态提示页,然后用 traceroute命令追踪攻击 Ip。

“你看,这个 Ip是 202.96.128.*,属于广州的电信网段——再查 whoIS,是‘南方时装传媒’的,他们上个月刚做了类似的订单网站。”

Eva攥紧了拳头:“他们怎么能这么做?”

我没说话,打开屏幕录像,把 access.log里的攻击记录、Ip追踪过程一一录下来,又导出数据库里的注入日志,压缩后加密:“这些都是证据,得交给国家安全部门——2001年《计算机信息网络国际联网安全保护管理办法》里明确说了,破坏计算机信息系统是违法的。”

我拨通了省公安厅网安总队的电话,说明情况后,他们让我们第二天去提交证据。

挂了电话,Eva靠在椅背上,眼神有点疲惫:“以后网站还会被攻击吗?”

我把她的笔记本拿过来,帮她更新了 Ruby的安全补丁:“放心,我会把所有模块都改成参数化查询,再装个入侵检测系统,有异常请求会实时报警。”

那晚我调试到凌晨三点,Eva在旁边帮我泡了杯速溶咖啡。

窗外的天河路灯火通明.

我看着屏幕上“订单系统恢复正常”的提示,突然意识到,这个网站不只是代码和数据,更是 Eva和同事们的心血.

我必须守住它。

周一

提交证据后,网安部门很快介入调查,南方时装传媒的技术负责人被约谈,攻击行为也停了。

但 Eva偶尔还是会盯着订单系统的后台日志发呆,问我:“要是他们换个 Ip再来怎么办?”

我帮她在服务器上部署了防火墙,只开放 80端口和 mySqL端口,还把日志同步到羊城晚报集团的备份服务器:“以后每周我都来检查一次安全漏洞,你要是看到异常,随时给我打电话——不管几点。”

那天,Eva把我送下楼,手里拿着本签了名的《中国时装》:“网站现在每天有两百多个订单,都是你的功劳。”

我接过杂志,看到扉页上写着“致刘军:最靠谱的技术守护者”。

走到红棉树下,我回头看了眼她的身影——阳光洒在她的发梢,像那天第一次见面时一样。

只是我心里多了份牵挂:Eva以后会不会遇到更多技术麻烦?那些竞争对手会不会用更隐蔽的手段攻击网站?

我想,只要她需要,我随时都会回来,做她的技术后盾。

就像守护那个用 Ruby写出来的订单系统一样,坚定而执着。

侠客书屋推荐阅读:绝色丹药师:邪王,你好坏总裁,宠妻请排队太古龙神诀都市之上门神医从前有座镇妖关我的透视可以看穿一切一人之最强异类我只会拍烂片啊入仕异常生物调查局重生七零,回到和前夫结婚当天摄政王的小祖宗又美又飒逆天九小姐:帝尊,别跑!(云家小九超皮哒)风流小屌丝我真是女明星从念动力开始的诸天旅行周队今天又真香了阴师阳徒,医行天下修真弃少逢凶化吉,开局直面十万阴兵三通爷爷故事会御兽:开局让未来的老婆签卖身契都市家事低调大明星君令策之凤摄天下我老婆也重生了我穿成了八个大佬崽崽的娘亲重生78:护林员开始的寻宝人生倒斗撞见灵气复苏,起飞了全网爆红!团宠小人参三岁半豪门千金是宠夫大佬都市之时间主宰别慌,我们全家都是穿来的医路逍遥娘娘她不想再努力了龙翔仕途他的小家伙甜度满分海贼之钢链手指女子学校的唯一男生桃源乡村小傻医功德兑换宝盒,各国都麻了我为暴君画红妆遨游在无数位面世界咬红杏带着搬家石游三界四合院:我是有空间的保安仙帝归来满眼星辰皆是你被白月光绿了,三孩都不是亲生的武动诸天
侠客书屋搜藏榜:海棠春将军与我一世约大夏剑术,谁主沉浮雄起,我洗鞋子养你说好的流氓,结果成了热芭的老公重生之爱妻入局清穿之锦玉无双重生毒妃有点邪我混烘焙圈的红楼之我不是林妹妹蜜婚甜宠之娇妻在上我的超级神豪养成系统极品驭灵师重启2006轮世末日无上小神农姬刃暴猿王我的美好生活在都市风华书让你来加速中上班,你抓哭白露?大国之巨匠靳先生你老婆又婚了将嫡重生:渣男的成长史总裁深度爱重生后成了反派的挂件修真至尊在都市穿成团宠后她暴富了超市空间:穿越年代嫁糙汉都市:我开局成了富二代反派第一爵婚:深夜溺宠令人震惊就变强交换灵魂,这个校花不太冷[古穿今]将军的娱乐生活从海贼开始贩卖宝可梦陈生的逆袭之路窈窕宦官我用一百块挑战环球旅行你我无人天降神宝在七零宦海官途过气偶像大翻身顾先生的逆袭萌妻易得志的青春我!活了5000年!我有一座解忧屋穿到现代以后她躺赢了逆天奇缘:富贵的爱恨情仇废才狂妃:我家王爷太妖孽
侠客书屋最新小说:我的鱼缸是片上古龙渊华娱:从03年开始的导演之王神豪环球旅行,从瑞士女友开始抗联烽火少年行九龙鸿蒙鼎从流浪狗到末世狗王郑琦的混沌人生时空错位1938人生何处是归途:花城网事三十年华娱:我在娱乐圈修仙道爷我啊,可不好惹!诡道之至尊天下双子星劫退休神明在都市种田,被当成隐藏都市玩火,从出租司机到商业巨鳄开局:拿下校花,过享福人生小隐仙不努力就会变成魔法少女的玩物导演:暴发户的眼光你别挑当初杨老板分手?我上岸你哭什么相亲之王从长征路上建立新山头天道让你当帝皇,你变帝骑逢魔?辐射纪元:我的系统有亿点强我的1977:芳华易逝小人物如何能跨越阶层孤狼的觉醒:我的抗战1937葛正诡事录都重开了,当然是做第一深情啦!统御铁流:我的长征1934辞职后,我开着挖掘机浪迹天涯碳姬重生之人既要又要还要变身恶灵,我夺舍美少女这件事民国:开局万亿军火,专治不服开局上交异世界,工业克苏鲁进驻我的美好生活在都市2000:我的暴富时代开局被下套,喜得老婆一位!一根鱼竿行天下万界黑商:我的客户全是至高豪门婚变:我把背叛者打入深渊魂穿七零,从手搓电风扇开始沐阳翁的新书废土武圣:我的任务是开饭店契约到期了,我这个替身该走了死而复生的我被盯上了辞职回家,我靠做糕点成名滩涂走出的渔老板1925:最美好的前途