和一些人从「黑客技术」入门计算机不一样,我彷佛从一开始就对所谓黑客技术没有什么兴趣。一开始当我刚刚据说黑客这个词的时候,由于大多数人对黑客精神的崇拜,我也对黑客这个称呼心存敬畏,但当我掌握了更多的知识,接触了更多的人和事以后,愈加以为黑客技术并不高端,黑客也不值得敬畏。在最近两年,黑客被洗白成了「白帽子」,入侵被洗白成了「信息安全」,一开始我以为这彷佛仍是个好现象,但后来我以为这其实也不见得有多少正面意义。程序员
不管在哪里,只要提到黑客这个词,总有一批人跳出来为黑客洗白,并且会把黑客洗成「黑帽子」,「白帽子」,「骇客」,「红客」或者其余各类颜色。我以为这样挺无趣的,有太多的词已经不是它原本的含义了,并且黑客这个词很模糊,老是被用来制造神秘感。若是是为了显示本身的专业性,介绍本身的职业,不如换成交互设计,桌面编程,代码审计,数据库运维等更具体的词。数据库
我老是在吐槽某某知名 Web 安全界人士的编程水平不过关,固然,他们也确实不过关。会写代码是最低的标准,代码应当首先是写给人看的,顺便能在机器上运行。不管多么短小的程序,都应当考虑可读性和可维护性,并应用各类用于避免错误的技巧。对于如何提升可读性,如何避免错误,不一样的人可能会有不一样的观点,可是做为代码的做者,在写代码的时候至少应当考虑过这些问题。我认为绝大部分信息安全相关的工做,都须要首先是一名程序员,有过构建真正应用的经验才行。编程
我有这样的观点是由于我在思考一个问题,「信息安全」的最终目的是什么呢?我认为目的是为了减小程序的漏洞,可是如今业界的广泛目标是「发现更多的漏洞」。的确,发现漏洞是减小漏洞的前提,可是如今业界对于「发现漏洞」的热情实在过高了,以致于忘记了真正的目的。安全
好比说前一阵的 Heartbleed 事件,首先发现这个漏洞的人值得喝彩。可是随后几天,就开始有不少人在乌云网上提交各类网站没有更新 OpenSSL 的问题。在这些人看来,发现漏洞就是本身的目标,但他们从未想过如何可以减小漏洞。运维
我认为减小漏洞的途径应当是培养更多具备安全意识,可以写出高质量代码的程序员,专职的信息安全专家固然也要有,但至少他们应当曾经是一个「具备安全意识的程序员」。以我本身举例,我算是一个不太主流的程序员,除了写代码以外,我还花了更多时间学习新的技术,和新的知识——虽然这些知识可能我永远也不会在工做中用到。我虽然从未专门学习过有关「信息安全」的技术,可是由于我一直在研究如何编写更安全的代码,因此我对「信息安全」也算是举一反三,甚至发现漏洞的水平也在一些人(一般被常常给黑客洗白的人称为「脚本小子」)之上。工具
不少没有学习过编程,而是首先开始学习信息安全的初学者,思惟都很僵化。举个简单的例子,他们很难认识到「XSS」和「SQL Injection」实际上是同一类攻击手法——注入 HTML 和注入 SQL. 也很难区分加密(Encryption), 编码(Encode)和散列(Hash)——由于它们彷佛都是在把一个可读的字符串「加密」成一个不可读的字符串。所谓 SQL 注入不过是 SQL 的一个特例而已,若是你没有用过 SQL, 而直接学习如何注入,那你恐怕得一直按照「大牛」们总结的注入方法来实施,很难本身发现新的攻击方式,这就是我所说的,编码是 Web 安全的基础。学习
好比如今有些 Web 安全方面的书,在繁复地罗列一些很类似的攻击手法,并未抽象出其中的联系和规律,使读者只能照着作,而很难有所启发。更不要说这些书将安全与编码彻底割裂了开来,并传达「代码只是工具,会写就好了」的思想。这样的书却被一些人奉为神做,这又印证了我以前的观点:太多人在以发现漏洞为目标,而不是减小漏洞。网站
最后,个人观点就是认为,直到目前,至少国内的「信息安全」的行业还处于一个很是原始的状态。固然,没有事情是完美的,我也期待这个行业可以迅速地成长起来。编码