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

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写出来的订单系统一样,坚定而执着。

UU阅书推荐阅读:隐姓埋名二十年,崛起先杀白月光捡回家的班花太黏人,我遭老罪了全能少女UP主人在家中坐,萝莉天上来重生后,我只想混娱乐圈桃运修真者漫漫修真路,一人独登仙陌上花开为君归前男友爆红后我被迫官宣了深山林场:重返83打猎发家妖女满堂?明明是仙子忠诚!重生之学霸无双头顶青青草原,老实人的憋屈重生爆宠甜妻:总裁,坏死了!让你带娃,你给我科技整活?这个残王我罩了都市重生:我在七日世界刷神宠绝品高手混花都四合院:开局先打断何雨柱的手直播科普帝皇铠甲,国家疯狂打榜夭寿啦!怎么友谊又变质了?邻家姐妹竟是情敌开局挖到尸体,直接觉醒系统封少的掌上娇妻重生高中时代:许你人间繁华带着房子穿女尊最强兵王重出江湖我的功法来自一万年后名门俏医妃光之巨人:我就是旧日支配者爱情公寓之顶层精英疯了吧!你管这叫务农?诸天影视:从照顾战友遗孀开始农家有儿要养成难道你还想建国开局获得系统,我被美女们盯上了超级至尊吹牛系统狐妖:再续前缘神秘复苏:只有我知道剧情异能狱警,不稳绝不出手开局成为世界之主穿越诸天开局签到厨神秘制灌汤包穿越到古代双修无敌归来我只想过的平静一些啊!扑倒小甜妻:老公,请亲亲!边境风云:林浩的荣耀之路开局救下女总裁,她竟然非我不嫁神尊豪婿冷王的独宠医妃四合院:我,街溜子,不讲武德
UU阅书搜藏榜:小楼大厦大国中医潇洒离婚后,她藏起孕肚成首富!予你熠熠星光小祖宗她是顶流大佬的心尖宠平淡的水乡生活绑定慈母系统后,我摆烂了凰妃逆天下玄学大佬被乖兮兮的奶狗缠疯了林域守从长征开始:十军团的绝境血路尘世浊浪之游戏人间接单相亲,美女总裁赖上我直播打假,开局800页保险护体我和我姐一起穿越了魔族少年闯人间四合院:从逃荒开始逆天十八线艺人搞副业,天天跑警局穿书:我被疯批反派夜夜盯到腿软小市场住手!这不是游戏世界!才女清照权斗觉醒时代:我的队友全是觉醒女神神豪花钱系统!医品嫡妃:娇宠偏执摄政王重生之寒门吝啬媳八零后少林方丈史上最强斩妖师道吟重生黑客女王:冷少追妻忙第99次心动娘亲有点拽我家有只九尾狐腹黑竹马:小青梅,吃不够!被团宠成顶流后,她掉马了最强老公:独宠软萌小甜妻圣灵魔法师绝品医妃:误惹腹黑王爷顶流宠妃倾天下总裁老公惹不得我是修士,你们怎么跟我玩修真到异世求求你出道吧穿越后我靠混吃等死苟成了终极大佬慢穿之璀璨人生蚀骨婚情:前夫,请止步人在终极,开局时空之子美人犹记总裁三观不太正
UU阅书最新小说:最爱的人是凶手官场冷暖生死与共:荒岛求生实录让你去扶贫,没让你走向权利巅峰我从底层逆袭变最强这座城市害虫太多,我全杀神豪:为美女花钱,存款直接翻倍让你考公进体制,你被国安带走了重生1975:深山猎户我为妹妹卷成韩娱圈最强神话天才制作人:顶流皆为陪跑重生三七,大兴安岭赶山杀鬼子故宫修复师:开局拆了景山镇物蓝星唯一修士暴打太平洋警察JOJO的奇妙冒险:替身时代我在工厂开挂的日子赤焱巨兽六道轮回博物馆末世归来的第一剑仙穿越之幽灵间谍全民转职,铠甲铸造师瞒不住了女总裁的专属特工:极简裁决灵气复苏:说好的一起证道呢?我的鱼缸是片上古龙渊华娱:从03年开始的导演之王神豪环球旅行,从瑞士女友开始抗联烽火少年行九龙鸿蒙鼎从流浪狗到末世狗王郑琦的混沌人生时空错位1938人生何处是归途:花城网事三十年华娱:我在娱乐圈修仙道爷我啊,可不好惹!诡道之至尊天下双子星劫退休神明在都市种田,被当成隐藏都市玩火,从出租司机到商业巨鳄开局:拿下校花,过享福人生小隐仙不努力就会变成魔法少女的玩物导演:暴发户的眼光你别挑当初杨老板分手?我上岸你哭什么相亲之王从长征路上建立新山头天道让你当帝皇,你变帝骑逢魔?辐射纪元:我的系统有亿点强我的1977:芳华易逝小人物如何能跨越阶层孤狼的觉醒:我的抗战1937