和一些人從「黑客技術」入門計算機不一樣,我彷佛從一開始就對所謂黑客技術沒有什麼興趣。一開始當我剛剛據說黑客這個詞的時候,由於大多數人對黑客精神的崇拜,我也對黑客這個稱呼心存敬畏,但當我掌握了更多的知識,接觸了更多的人和事以後,愈加以爲黑客技術並不高端,黑客也不值得敬畏。在最近兩年,黑客被洗白成了「白帽子」,入侵被洗白成了「信息安全」,一開始我以爲這彷佛仍是個好現象,但後來我以爲這其實也不見得有多少正面意義。程序員
不管在哪裏,只要提到黑客這個詞,總有一批人跳出來爲黑客洗白,並且會把黑客洗成「黑帽子」,「白帽子」,「駭客」,「紅客」或者其餘各類顏色。我以爲這樣挺無趣的,有太多的詞已經不是它原本的含義了,並且黑客這個詞很模糊,老是被用來製造神祕感。若是是爲了顯示本身的專業性,介紹本身的職業,不如換成交互設計,桌面編程,代碼審計,數據庫運維等更具體的詞。數據庫
我老是在吐槽某某知名 Web 安全界人士的編程水平不過關,固然,他們也確實不過關。會寫代碼是最低的標準,代碼應當首先是寫給人看的,順便能在機器上運行。不管多麼短小的程序,都應當考慮可讀性和可維護性,並應用各類用於避免錯誤的技巧。對於如何提升可讀性,如何避免錯誤,不一樣的人可能會有不一樣的觀點,可是做爲代碼的做者,在寫代碼的時候至少應當考慮過這些問題。我認爲絕大部分信息安全相關的工做,都須要首先是一名程序員,有過構建真正應用的經驗才行。編程
我有這樣的觀點是由於我在思考一個問題,「信息安全」的最終目的是什麼呢?我認爲目的是爲了減小程序的漏洞,可是如今業界的廣泛目標是「發現更多的漏洞」。的確,發現漏洞是減小漏洞的前提,可是如今業界對於「發現漏洞」的熱情實在過高了,以致於忘記了真正的目的。安全
好比說前一陣的 Heartbleed 事件,首先發現這個漏洞的人值得喝彩。可是隨後幾天,就開始有不少人在烏雲網上提交各類網站沒有更新 OpenSSL 的問題。在這些人看來,發現漏洞就是本身的目標,但他們從未想過如何可以減小漏洞。運維
我認爲減小漏洞的途徑應當是培養更多具備安全意識,可以寫出高質量代碼的程序員,專職的信息安全專家固然也要有,但至少他們應當曾經是一個「具備安全意識的程序員」。以我本身舉例,我算是一個不太主流的程序員,除了寫代碼以外,我還花了更多時間學習新的技術,和新的知識——雖然這些知識可能我永遠也不會在工做中用到。我雖然從未專門學習過有關「信息安全」的技術,可是由於我一直在研究如何編寫更安全的代碼,因此我對「信息安全」也算是舉一反三,甚至發現漏洞的水平也在一些人(一般被常常給黑客洗白的人稱爲「腳本小子」)之上。工具
不少沒有學習過編程,而是首先開始學習信息安全的初學者,思惟都很僵化。舉個簡單的例子,他們很難認識到「XSS」和「SQL Injection」實際上是同一類攻擊手法——注入 HTML 和注入 SQL. 也很難區分加密(Encryption), 編碼(Encode)和散列(Hash)——由於它們彷佛都是在把一個可讀的字符串「加密」成一個不可讀的字符串。所謂 SQL 注入不過是 SQL 的一個特例而已,若是你沒有用過 SQL, 而直接學習如何注入,那你恐怕得一直按照「大牛」們總結的注入方法來實施,很難本身發現新的攻擊方式,這就是我所說的,編碼是 Web 安全的基礎。學習
好比如今有些 Web 安全方面的書,在繁複地羅列一些很類似的攻擊手法,並未抽象出其中的聯繫和規律,使讀者只能照着作,而很難有所啓發。更不要說這些書將安全與編碼徹底割裂了開來,並傳達「代碼只是工具,會寫就好了」的思想。這樣的書卻被一些人奉爲神做,這又印證了我以前的觀點:太多人在以發現漏洞爲目標,而不是減小漏洞。網站
最後,個人觀點就是認爲,直到目前,至少國內的「信息安全」的行業還處於一個很是原始的狀態。固然,沒有事情是完美的,我也期待這個行業可以迅速地成長起來。編碼