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

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

书河书屋推荐阅读:神级强者在都市重生年代文孤女有空间医婿龙王医婿凌依然易谨离小说免费阅读最强医圣凌依然凌依然萧子期小说免费阅读赵旭李晴晴小说免费全文免费阅读回到地球当神棍总裁老公,宠宠宠!大唐:神级熊孩子我的清纯校花老婆美食供应商甜心18岁:总裁大人,宠宠宠(恶魔小叔,咬一口)一胎双宝:总裁大人夜夜欢阮白慕少凌权力之巅护花强少在都市权力巅峰盖世神医都市超级邪医神级熊孩子系统风水师秘记都市之近身战神高冷王爷,饶了我!四合院:众里寻她千百度轮回剑典万古第一婿上门龙婿权欲场乡村神医斗罗大陆4终极斗罗(斗罗大陆IV终极斗罗)恋上邻家大小姐元卿凌宇文皓免费阅读陆尘李清瑶全文免费阅读小说夜帝心尖宠:神医狂妃欢乐田园小萌妻重生八零甜蜜军婚陆尘李清瑶免费阅读全文最新章节狼性老公,别过来!绝世龙婿独家宠婚:最强腹黑夫妻欢宠田园,农女太子妃一咬定情:异能萌妃,抱一抱大戏骨罗峰顾雪念我的七个姐姐绝世无双全文免费阅读大结局让你下山找老婆,你把师娘娶了?山村最强小农民我不想当老大我的替身是史蒂夫
书河书屋搜藏榜:窃国狂赎京城穿越之旅南锣鼓巷66号萌妹穿越之北宋篇许你卸甲归田,你把我女儿泡了?抗战独狼:从粪叉到98k无敌路甩了线上男友后我被亲哭了娱乐:重生豪门公子,玩转香江哑小姐,请借一生说话重生国民女神:褚少,心尖宠!我从黑洞归来全能大佬的马甲要藏不住了残暴王爷的黑月光枭宠毒妃:第一小狂妻以财养官:我靠炒股升官发财锦鲤老婆你好甜都市极品村医命运编织者:我能看透御兽命运!重生后我给女配当长姐重生爸铺路,位极人臣不是梦天才国医宁天林冉冉王妃每天都想继承遗产四合院:情绪收割系统重生豪门:影后谁敢惹杀死那个傲娇女大小姐的贴身狂医晋江女穿到□□文草莽年代护花强少在都市聂先生告白请先排号惊!刚开播,就被金渐层偷家了?星空舰队,从数据化开始路痴导游照亮他的心港片:我洪兴红棍开局干掉大佬B我能预测未来上神转角遇到总裁文娱:带着村子人一起拍电影朕醉了直播地球之五十亿年重生之牡丹重生年代养大佬鲜肉影帝我煮青梅等你来我以邪恶护万家灯火不灭!犬马她们都说我旺妻太子殿下他对我图谋不轨
书河书屋最新小说:被迫转业后,我搜刮了全球资源高武剑道:地球天才称霸全宇宙东北往事之富贵在天五八那年雁归巢盗墓:露出麒麟纹身后,蜜热麻了分手后,我的桃花泛滥了!游走神话,我贯穿各大神系都市吞天武圣魔修归来,宠妹狂魔一山,一观,一小道最爱的人是凶手官场冷暖生死与共:荒岛求生实录让你去扶贫,没让你走向权利巅峰我从底层逆袭变最强这座城市害虫太多,我全杀神豪:为美女花钱,存款直接翻倍让你考公进体制,你被国安带走了重生1975:深山猎户我为妹妹卷成韩娱圈最强神话天才制作人:顶流皆为陪跑重生三七,大兴安岭赶山杀鬼子故宫修复师:开局拆了景山镇物蓝星唯一修士暴打太平洋警察JOJO的奇妙冒险:替身时代我在工厂开挂的日子赤焱巨兽六道轮回博物馆末世归来的第一剑仙穿越之幽灵间谍全民转职,铠甲铸造师瞒不住了女总裁的专属特工:极简裁决灵气复苏:说好的一起证道呢?我的鱼缸是片上古龙渊华娱:从03年开始的导演之王神豪环球旅行,从瑞士女友开始抗联烽火少年行九龙鸿蒙鼎从流浪狗到末世狗王郑琦的混沌人生时空错位1938人生何处是归途:花城网事三十年华娱:我在娱乐圈修仙道爷我啊,可不好惹!诡道之至尊天下双子星劫退休神明在都市种田,被当成隐藏都市玩火,从出租司机到商业巨鳄开局:拿下校花,过享福人生小隐仙