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

转载 2012年03月31日 12:11:35
导读:本文来自 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),并不意味着你就安全了(攻击者会寻找弱点)

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

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

相关文章推荐

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

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

为SSD编程(6):总结—每个程序员都应该了解的关于固态硬盘的知识

原文:http://codecapsule.com/2014/02/12/coding-for-ssds-part-6-a-summary-what-every-programmer-should-k...

每个程序员都应该了解的内存知识1——内存概述

英文原文:https://lwn.net/Articles/250967/ 1、概述 早期的计算机很简单,它的各种组件如CPU、内存、大容量存储和网络接口都是一起开发的,所以性能差不多。举个...

每个程序员都应该了解的“虚拟内存”知识(Memory part 3: Virtual Memory)

[编辑注:本文是Ulrich Drepper的“每个程序员应该了解的内存方面的知识”文章的第三部分;这一部分谈论了虚拟内存,特别是TLB性能。没有阅读第1部分和第2部分的人可能现在就想读一读了。和往常...

每个程序员都应该了解的内存知识(3)-虚拟内存

【原文:http://www.cnblogs.com/mikewolf2002/archive/2013/04/13/3018413.html】 英文原帖地址:http://lwn.net/Ar...

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

英文原文:lwn.net,翻译:开源中国 [编辑的话: Ulrich Drepper最近问我们,是不是有兴趣发表一篇他写的内存方面的长文。我们不用看太多就已经知道,LWN的读者们会喜欢这篇文章的...

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

1 简介 早期计算机比现在更为简单。系统的各种组件例如CPU,内存,大容量存储器和网口,由于被共同开发因而有非常均衡的表现。例如,内存和网口并不比CPU在提供数据的时候更(特别的)快。 曾...

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

英文原文:lwn.net,翻译:开源中国 [编辑的话: Ulrich Drepper最近问我们,是不是有兴趣发表一篇他写的内存方面的长文。我们不用看太多就已经知道,LWN的读者们会喜欢这篇文章的。内...

每一个Javascript程序员都应该了解的浮点知识

在Javascript开发人员的职业生涯中会碰到一些奇怪的错误——似乎基本的数学运算行不通。在这样或那样的时候,有人会告诉你实际上Javascript中的数字就是浮点。任何人试图去理解浮点或要搞清楚它...

总结—每个程序员都应该了解的固态硬盘知识

在这部分,我以独立的简单段落的形式总结了其它部分的内容。每个段落概括了其他部分一节或几节的内容,这样可以让读者在每个主题下能够得到更多细节。 基础 1. 存储单元类型 固态硬盘(SS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)