記一次 「靈異事件」 及由此引起的思考

上個週日,即 5 月 12 日,風和日麗,正和朋友在天河公園清閒的散步。忽然接到運營的電話,語氣匆匆的說道: 「xxx, 很差啦,陰陽師官方論壇 好像被黑客攻擊了,所有頁面變成黑白了,你快回來修復一下」。一聽到這消息,我確定很震驚啊,作了幾年的 web 開發,總算被黑客盯上了,正如一句老話所言:出來混,早晚要還的。因而乎,我匆匆忙忙的和朋友道了別,小跑回公司,由於公司到天河公園就幾百米的路程嘛,因此大概 10 分鐘就到了,打開電腦一看,嘖,還真是啊,頁面怎麼所有變成黑白了啊?css

看上去,個人第一反應是有種淡淡的憂傷。以前也瞭解過,有些網站爲了悼念某我的,可能會在那人的誕辰日把網站設置成黑白。可是,這種網站通常都是我的網站,他爲了記念過世的親友。但是,咱們的陰陽師論壇不是我的網站,爲了悼念誰呢?難道是悼念遊戲裏面的某我的物?html

還有一個問題讓我困惑的是,運營說她上週五下班前看論壇仍是正常的,就剛剛打開才變成這樣的。咱們週六日通常也沒有人回來加班的的,就算加班,也不可能隨意發佈代碼到線上環境的。因此排除了週六日有人上傳了代碼的可能。越想越以爲匪夷所思,難道真的是靈異事件?git

既然,想不出來是什麼緣由,那就老老實實的從代碼中找緣由啦,畢竟咱們做爲馬列主義的信仰者,纔不相信什麼靈異事件呢!因而打開 chrome dev tools ,經過審覈元素,選中 html 根元素,就看到設置了以下的樣式 :web

filter: grayscale(100%);
複製代碼

咦,這不是濾鏡嘛!而後,把這代碼刪除掉,頁面忽然就變成了彩色了。因此找到頁面變成黑白的緣由了,是由於添加了個濾鏡屬性。chrome

但是,還有個問題是,這個濾鏡是誰加的?我在論壇項目的根目錄全局搜索 「filter」 關鍵字,卻什麼也沒有搜索到。難道是我沒有更新代碼,因而 git pull 一下,再搜索,依舊沒有搜索到任何東西。bash

而後,靜下心來想一想,忽然想到論壇是使用 discuz 來搭建的,除了本地代碼外,還能夠在管理後臺的統計代碼處添加 css 和 js 的,因而登陸到後臺,果不其然,看到了一坨以下的代碼:antd

function bnw() {
    var black = "filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: url(data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><filter ….3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"/></filter></svg>#grayscale); filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); filter: gray; -webkit-filter: grayscale(1);",
    body_bg = "background:url(https://dhxy-f.netease.com/forum/201805/11/202133wufbodbhdzxqdeub.jpg) center top repeat-x!important";
    var star_month = new Date().getMonth() + 1,
    star_today = new Date().getDate(),
    end_today = 13;
    var _html = document.getElementsByTagName("html")[0],
    _body = document.getElementsByTagName("body")[0];
    if (star_month == 5 && end_today - star_today == 1) {
        _html.style.cssText = black;
        _body.style.cssText = body_bg;
    }
}
bnw();
複製代碼

這段代碼雖然有點長,可是作的事情是:判斷日期,若是是 5.12 日就添加濾鏡效果,讓頁面變成黑白。 如今問題的根源已經找到了,原來是後臺配置了一個定時炸彈。這不是什麼靈異事件,更不是什麼黑客攻擊。 但是,這代碼是誰加上去的?是何時添加上去?由於後臺配置的代碼沒有 log, 我沒法查看修改記錄。另外, 5.12 是個什麼特殊的日子呢?我只知道今天是母親節。百思不得其姐的我,拿起電話打給 了老大,他一開始也很詫異,說最近沒有接到過要在 5.12 把論壇設置成黑白的需求啊。而後,過了一會,他忽然大聲的說:我想起來了,5.12 是汶川大地震記念日啊!這個需求是去年提的,當時爲了 悼念 汶川地震 10 週年。svg

事情的真相總算找到了,原來這是去年遺留的代碼引發的。網站

此次 」靈異事件「,引發了我對代碼管理的一些思考:url

  • 條件判斷要嚴格
  • 及時移除過時的代碼
  • 讓用戶知情,或把選擇權交給用戶

第 1 點,條件判斷要嚴格:以此次事故爲例,那段代碼是去年添加的,原本是 但願僅在 2018-05-12 這天起做用的,但是,因爲代碼裏面只判斷了 月日,而沒有判斷年份,致使了在 2019-05-十二、2020-05-12......每一年的 5.12 都會起做用。因此,咱們寫代碼不該該偷懶,該嚴格的的地方仍是得嚴格。

第 2 點,及時移除過時的代碼:記念汶川地震10週年,這屬於一次性活動,活動結束以後,這段代碼就是多餘的、過時的了,因此應該要及時移除掉的。這種過時的代碼,除了會影響後面接手同窗的理解以後,還可能會引發一些其餘負面影響,就像此次的事件。

第 3 點,讓用戶知情,或把選擇權交給用戶:並非每一個人都會 一會兒想起來 5.12 是汶川地震,在他不知情的狀況下打開頁面,看到黑白,確定會以爲莫名其妙的,甚至以爲網站是否是 有 bug 了。因此,能夠打開 頁面時,提示用戶: 」今天是汶川地震 xx 週年「。又或者,把是否要顯示成黑白的選擇權交給用戶,好比彈窗提示 「切換到黑白主題」,讓用戶 選擇 「是」 或 「不是」。

說到這裏,不知道你們還記不記得去年的 「antd 的聖誕彩蛋事件」,傳送門:如何看待 Ant Design 聖誕節彩蛋事件?。這種強行把本身的意願推加到用戶身上的作法,是不負責任的。想一下,好比你用 antd 作了個伊斯蘭國的政府網站 ,一打開居然全都是慶祝基督教聖誕節的彩蛋,這後果有多嚴重?因此,不要總是想着給用戶帶來什麼驚喜,由於每一個用戶的性格或文化可能不同,你的精心準備,可能只會讓用戶有驚而無喜。

相關文章
相關標籤/搜索