反对排名第一的答案啊
计算机科学的学习,没有什么"科班式"也没有什么"黑客式", 所谓的"科班式教育" 仅仅只是高校教育对于一个大规模学习群体的普适性教育,所以需要一个带有"公式化,套路化"的教育模式,也就是你们"黑客"所认为无聊的上课,但实际上, 任何的行业,方向学习,都不是一个套路化的教育模式能够满足的,需要的是你主动自发的学习驱动, 所谓"师傅领进门,修行在个人"就是如此, 但是,计算机科学是严肃的, 尤其是做安全这一行, 需要非常扎实的CS基础和稳固的计算机科学素养, 现在门槛低了,阿猫阿狗都能当黑客了, 然而能把安全做好的,无论是安全从业者,还是地下黑客,能让我觉得吊的,都是肯定满足刚所说的这两个条件的.(为啥这个问题突然又出现在timeline上了, @EvilMoon @z.t.z 你俩工作都不饱和的???)
那么问题来了,该如何学, 每个人对峙时的获取和转化能力不同, 我只说一下我最初怎么做的吧:
以脚本安全为例,大概09年的时候, 我通过搜索引擎大概了解到, 要控制一个服务器,就得有其权限, 通过一些漏洞的利用可以获得服务器权限,于是知道了一些相关的名词, SQLi, 命令执行, webshell, 权限提升... 以SQLi为例, 因为我毫无基础,所以一点点百度,"sqli指的是sql注入" 那么什么是sql,继续百度"sql是结构化查询语言,和数据库相关" 有什么数据库会遇到? 继续搜索知道了"MySQL, msSQL, oracle, db2" 又出现了那么多不懂得名词在文章中,于是继续搜索,每看一篇文章遇到不懂得词儿就搜索相关的结果, 直到有一天, 我回头去看当时看的第一个文章<记一次SQL注入攻击>发现里面的内容我都大概看得懂了,没有没见过的词儿了, 除了一些细节外大概的攻击原理,流程,用到的语句都能基本弄懂了,我当时大概知道,sqli差不多入门了.
我们回看一下整个过程, 是一个目标趋向的过程:
从我想干什么的目标(完成SQL注入攻击), 到遇到相关的东西(什么是SQL,有什么数据库,为什么注入要用这些语句)于是有了新的目标(弄懂相关的内容), 到逐步沿着从上层的表现到究其原因, 会形成一个类似分叉的路线,当我把这些分叉路线完全走完时候, 这一个树的顶端(完成SQL注入攻击)就算基本入门了, 其他的技能我在学习的时候也是类似的方法.
当然这是八九年前,当时学习资源少,不像现在有系统的清晰地学习脉络,所以当时的所谓学习脉络完全是通过一点点花时间去搜索硬画出来的, 现在的学习可以直接看网上已有的学习路线,思维导图等等,省去像我当年一点点搜索的时间.
那么那么多年过去了, 现在也做那么久了我又是如何获取学习新知识的,简单说一下:
和之前所说的目标趋向不同, 之前是从上到下的过程, 现在因为有了充足的经验,形成了自己比较完整的安全观, 我能够清楚地知道,某一个软件,哪些地方容易出问题,什么地方的输入有可能会导致什么的结果,通过怎样的判断能够验证这个结果, 同样的一个安全问题会出现在其他的什么地方,一类语言的弱点是否能成为可利用的安全漏洞并体现在应用,软件上, 这些东西让我现在的学习是自下而上的,因为明白了原理,因为掌握相关的基础, 配合充足的经验和安全的敏感度, 从而发现学习新的东西, 这些东西比较玄学靠灵性和积累, 日后自然会拨云见日逐渐明白.
入门的学习, 是因为学习了基础的只是,于是学会了目标导向的目标, 现在的学习, 是因为有了足够的基础,于是发现了新的东西, 不难看出, 基础,真的很重要, 不是所谓的知乎黑客们bb两句xss, sqli, 什么这黑站那黑站这些非主流说法能匹配的