程序员都应该了解哪些安全知识

标签: 程序员 安全 知识 | 发表时间:2012-03-29 01:13 | 作者:伯乐在线
出处:http://dongxi.net/

导读:本文来自StackOverflow上的一个问答贴。网友 M.H 提问: 我是一名IT专业学生,现在是大三,直到现在我们才开始学习很多计算机相关的课程(编程、算法、计算机体系结构、数学等……)。

但是还有一个叫“安全”的世界离我们很远,我是指:计算机安全、互联网安全、网络安全、Hacking、破解等。 

我很确信没有人可以知晓所有安全知识,但我确信,肯定有一定的“最低限度”知识,是每个 程序员或IT学生应当了解的。我的问题是,那些“最低限度”知识包括了哪些?希望您能给我建议一些电子书,或课程,或任何有助于我探索这条路的东西。

 

目前这个问题得分最高的回复是由  bignum 提供的,如下:

 

如果想要你的程序是安全的,请记住如下原则:

● 不要信任用户的输入信息!

● 验证所有来自非信任源的输入信息,是使用白名单,不是黑名单。

● 从一开始就要策划安全。安全并不是可以在最后来做的。

● 保持简单。复杂性会增加安全漏洞的可能性。

● 最低限度保持你程序的攻击面( attack surface)。

● 确保程序有“自动防故障装置”( Fail-safe

● 采用深度防御( defence in depth

● 坚持最小特权原则( least privilege

● 采用威胁建模( threat modelling)(Web程序更应如此)

● 权限分离( Compartmentalize

● 没有不透风的墙,在代码中隐藏秘密都无法长久。

● Don’t write your own crypto / 不要自己编写一种加密方法 (译注:见下文另外一位网友的回复)

● 采用加密(crypto),并不意味着你就安全了(攻击者会寻找弱点)

● 注意缓冲区溢出,并了解如何防范

 

下面是一些优秀书籍和在线文章:

●《  Writng Secure Code  | 编写安全的代码 (第二版)》- 我认为每个程序员都该读读这本书 (译注:第二版还没有中文,据说在翻译中……)

Writing Secure Code, Second Edition

●  Building Secure Software: How to Avoid Security Problems the Right Way | 构建安全的软件:避免产生软件安全问题的正确方法

Building Secure Software: How to Avoid Security Problems the Right Way

 Secure Programming for Linux and Unix HOWTO (译注:在线电子书)

 

Tyler McHenry 也给出了他认为程序员做安全的第一原则: Don’t roll your own。除非你是安全专家或密码破译专家,否则就采用现有的成熟安全平台、框架、或库。这些东西都经过了专家和黑客们深思熟虑、修补、更新和检测。你得利用这些优势,而不是忽视,试图推到 重来

 

英文原文: StackOverflow    编译: 伯乐在线 –  黄利民

【如需转载,请标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

 

   查看评论

相关 [程序员 安全 知识] 推荐:

程序员都应该了解哪些安全知识

- - 东西-科技
导读:本文来自StackOverflow上的一个问答贴. 网友 M.H 提问: 我是一名IT专业学生,现在是大三,直到现在我们才开始学习很多计算机相关的课程(编程、算法、计算机体系结构、数学等……). 但是还有一个叫“安全”的世界离我们很远,我是指:计算机安全、互联网安全、网络安全、Hacking、破解等.

每个程序员都应该了解的磁盘知识

- Adam - NoSQLFan
虽然我们可能经常都在说 SSD 时代即将来临,可能我们今天的建立在磁盘结构上的很多知识都将无用武之地,但毕竟当前很多的存储产品,包括很多NoSQL产品,都是建立在磁盘存储的理论基础上的. 下面是一个关于磁盘原理的PPT,描述了磁盘存储的各种知识. 为什么初创公司适合/不适合用NoSQL. Red Hat正考虑发力NoSQL/Hadoop.

每个程序员都应该了解的内存知识

- - 博客 - 伯乐在线
英文原文 What every programmer should know about memory, Part 1,翻译: 开源中国. [ 编辑的话: Ulrich Drepper最近问我们,是不是有兴趣发表一篇他写的内存方面的长文. 我们不用看太多就已经知道,LWN的读者们会喜欢这篇文章的.

作为程序员,不得不知道的App推广知识

- - ITeye博客
初看这个题目,大家可能就疑问,作为程序员只管做自己的产品就好了,写代码就OK了,我干嘛要知道一些推广知识,跟我没关系,不需要知道. 你是否也像我一样以后做个产品经理,项目CTO,项目CEO这样的有抱负,还是默默无闻的做个简单的程序员,从码农到码圣的升级版程序员. 你是否也像我一样以后的职业规划不仅仅局限于程序员这个角色,而不想突破垂直职业的牢笼,从剑客到武林盟主的蜕变.

这些知识决定了程序员的上限

- - 后端技术杂谈 | 飒然Hang
讲述决定程序员上限的一些知识技能点,包括如何学习、如何阅读源码、计算机科学基础知识体系等. 会什么是你的下限,能够会什么是你的上限. 杜绝 1年工作经验重复 N年. 如果自己遇到这种问题会怎么解决,与资料中的解决方案相比优劣如何. 别人为什么会想到这种解决方案. 自己是由于经验欠缺还是技能点欠缺才导致没有想到好的解决方案.

程序员需要了解的硬核知识之CPU

- - SegmentFault 最新的文章
大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU. CPU 的全称是 Central Processing Unit,它是你的电脑中最 硬核的组件,这种说法一点不为过.

程序员是应用安全的第一道闸

- - ITeye资讯频道
绝大多数的企业,都是在Web应用设计结束后才开始考虑应用安全的问题,应用安全与应用开发之间的脱节是导致各种严重的安全漏洞的根源. 对很多互联网企业来说, Web应用安全往往在开发过程中被忽略. VentureBeat的专栏作者John Jacott最近发表了一篇博文认为安全的第一个也是最重要的环节是程序员.

为什么每个程序员都应该学习代码编译器知识

- - 外刊IT评论
所有优秀的计算机科学学院都提供了编译器课程,但是相对比较少的学校把它作为本科课程的必修部分. 这篇文章回答了这个问题:为什么需要学习编译器知识. 我写这篇文章的其中一个原因是,尽管我在读本科时很喜欢编译器课程,但是我几乎看不到它的实际作用. 大多数资料看起来要么简单易懂,要么很深奥(事实上,我找到的大部分编译器资料都是很枯燥的.

程序员是懒惰反复无常的伪知识分子,果真如此吗?

- fyits0 - cnBeta.COM
“计算机编程中极少人是真正的艺术家,大多数人充其量不过是房屋粉刷匠而已. 管理顾问 Tim Bryce 不喜欢程序员,而许多程序员也不喜欢他. (注:Tim Bryce 发布过一篇名为《P理论:管理程序员的哲学》的文章.

WEB安全测试所需的基础知识提纲

- - CSDN博客Web前端推荐文章
第一章:B/S架构体系安全渗透测试基础. (1)介绍HTTP标示URL. (2)HTTP响应状态码. (3)HTTP协议传输内容. (1)HTTP常见认证机制. (2)BASE64编码介绍. (1)拒绝服务攻击基础. (2)Smurf攻击模型. (3)Fraggle攻击模型. (4)SynFlooding攻击模型.