阅读更多

19顶
1踩

行业应用

原创新闻 程序员都应该了解哪些安全知识

2012-03-29 09:38 by 见习编辑 jobbole 评论(11) 有8866人浏览

本文来自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    编译:伯乐在线 – 黄利民

来自: 伯乐在线
19
1
评论 共 11 条 请登录后发表评论
11 楼 EXvision 2012-03-31 19:59
BruceXX 写道
引用
Tyler McHenry 也给出了他认为程序员做安全的第一原则:Don’t roll your own。除非你是安全专家或密码破译专家,否则就采用现有的成熟安全平台、框架、或库。这些东西都经过了专家和黑客们深思熟虑、修补、更新和检测。你得利用这些优势,而不是忽视,试图推到重来。


我永远不赞同这些条条框框,相信这些黑客也是通过无数摸索出来的,不自己写写框架,库,怎么知道有问题呢?


俩字,新手。
10 楼 meiyaa2008 2012-03-31 09:42
这篇文章写的不错
9 楼 tag13346 2012-03-30 23:48
保持一颗谦卑的心,不要自作聪明
8 楼 suxu 2012-03-30 18:54
安全套 in action 才是必须的
7 楼 Ulysses 2012-03-30 13:47
BruceXX 写道
引用
Tyler McHenry 也给出了他认为程序员做安全的第一原则:Don’t roll your own。除非你是安全专家或密码破译专家,否则就采用现有的成熟安全平台、框架、或库。这些东西都经过了专家和黑客们深思熟虑、修补、更新和检测。你得利用这些优势,而不是忽视,试图推到重来。


我永远不赞同这些条条框框,相信这些黑客也是通过无数摸索出来的,不自己写写框架,库,怎么知道有问题呢?


别人已经说了,"除非你是安全专家或密码破译专家"
6 楼 lzyzizi 2012-03-30 13:10
lection.yu 写道
为什么不要自己编写加密算法呢?自己编写的毫无规律的加密规则,为什么反而会更加不安全呢?


你的安全来自于隐晦,而不是算法本身的安全。你的觉得加密毫无规则,但是它很可能存在许多弱点而你自己却不知道(可能被专家轻易攻破吧)。加密算法一般都是公开的,这样让更多的人去找这个算法的漏洞从而改进算法本身。

参考下wiki的这个词条吧:Security through obscurity
5 楼 lection.yu 2012-03-30 11:53
为什么不要自己编写加密算法呢?自己编写的毫无规律的加密规则,为什么反而会更加不安全呢?
4 楼 laolinshi 2012-03-30 11:21
BruceXX 写道
引用
Tyler McHenry 也给出了他认为程序员做安全的第一原则:Don’t roll your own。除非你是安全专家或密码破译专家,否则就采用现有的成熟安全平台、框架、或库。这些东西都经过了专家和黑客们深思熟虑、修补、更新和检测。你得利用这些优势,而不是忽视,试图推到重来。


我永远不赞同这些条条框框,相信这些黑客也是通过无数摸索出来的,不自己写写框架,库,怎么知道有问题呢?

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


我永远不赞同这些条条框框,相信这些黑客也是通过无数摸索出来的,不自己写写框架,库,怎么知道有问题呢?
2 楼 loookto 2012-03-30 08:26
Don’t roll your own
geminiyellow 写道
英文不好的人飘过啊,Don’t roll your own。这种精华句子不翻译你太坏了。

我觉得他虽然没有翻译,但做了解释
1 楼 geminiyellow 2012-03-30 08:14
英文不好的人飘过啊,Don’t roll your own。这种精华句子不翻译你太坏了。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 每个程序员都应该了解的知识有哪些?(一)

    像Jeff Atwood(Stack Overflow创始人)这样的都可以忘了使用HttpOnly cookies, sitemaps和cross-site request forgeries,还有哪些可能被遗忘的重要内容?  答案:从一个Web开发者的角度来看,网站的可用性和...

  • 程序员都应该了解哪些安全知识[转]

    如果想要你的程序是安全的,请记住如下原则: ● 不要信任用户的输入信息! ● 验证所有来自非信任源的输入信息,是使用白名单,不是黑名单。 ● 从一开始就要策划安全。安全并不是可以在最后来做的。 ● 保持...

  • 成为一名厉害的程序员,需要哪些必备知识

    成为一名厉害的程序员必备知识,看看你都掌握了吗?

  • 【普法三分钟】程序员至少应该具备哪些法律知识?

    【普法三分钟】程序员至少应该具备哪些法律知识? 文章目录 【普法三分钟】程序员至少应该具备哪些法律知识? 先来看两则新闻 程序员应该记住的法律知识 别人有没有侵犯我的合法权益 我有没有侵犯他人(或集体)的...

  • Java程序员需要了解哪些技术?

    下面就帮大家罗列一下Java程序员需要了解的主要的技术知识有哪些。Java程序员常用的技术:1.一些Java最常用的包、类:例如String、collections(List/Map/Set)、IO、网络;2.常用的库:common库、guava库;这些都值得...

  • 优秀的Java程序员都在看哪些书?

    目录一、立志存高远,笃行践初心二、经典书籍1、Java核心技术2、Java编程思想3、Java语言...大部分程序员的「 目标 」都是成为一名优秀的工程师,一名可以统览全局的「 架构师 」。 千里之行始于足下 对于大部分普通

  • 程序员应该学习掌握哪些知识和技能?

    现在做为一名程序员,压力... 那么,做为一名程序员应该学习掌握哪些知识和技能呢?  这里的程序员,不是指专业软件公司的专业开发人员,只是作为一般企事业单位的开发人员,就是我所理解的承担企事业单位开发...

  • 一个合格的程序员应该读过哪些书

    编者按:2008年8月4日,StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的? “如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本, 你会...

  • 程序员应了解:知识技能金字塔

    而新的编程语言和技术框架等更新迭代速度可以说是360行中最快之一,一般来说程序员知识半衰期是五年,也就是五年以后用的技术和之前的技术大相径庭。 时代变化如此之快,软件行业跟是如此,如果你不善于适应新的...

  • 为什么每一名程序员都应该学习 C++?

    文章来源:InfoQ 架构头条作者 | Shalitha Suranga 译者 | 平川 ... 通常,程序员在他们的编程生涯中会使用多种编程语言。然而,我们也看到,有些程序员一直在使用同一种编程语言。例如,我们经常遇到有几...

  • 科普篇!程序员都有哪些工种和类型呢?

    虽然有大多数的高层管理者对所有的程序员都一视同仁,还是有企业是把程序员当做工具、资源看待,做个头脑清醒的程序员,你的职业生活会更精彩。本文,就详细讲解一下程序员的工种和类型,带你了解程序员的职业发展...

  • 每个程序员都应该学习的 6 种数据结构

    数据结构和算法是编程的支柱,这里有6个Java程序员应该学习的基本数据结构

  • 应该选择网络安全还是程序员?

    在当今数字时代,网络安全和程序员都是非常热门和值得追求的职业。网络安全领域和程序员职业在IT行业中占据着举足轻重的地位。这两个职业都有着不同的发展路径、技能需求和就业前景。选择网络安全还是程序员这个问题...

  • 程序员可以学习哪些知识

    总之,作为一名程序员,不断学习新的知识和技能是非常重要的。通过学习新的编程语言、软件开发技术、操作系统和网络协议,以及如何编写高质量的代码和文档,程序员可以不断提高自己的技能水平,更好地理解和解决问题...

  • 作为程序员该了解的8条冷知识

    想要成为一名成功的程序员,我们除了了解不同编程语言的设计思路,也应当了解编程的发展历史,从而判断未来的编程技术将走向何方。接下就为大家普及下计算机发展历程中的8个冷门小知识!  1.第一台电脑为蒸汽...

  • 中高级PHP程序员应该掌握哪些技术?

    本文把php程序员划分为中、高级程序员两大类程序员,并针对这两大程序员应具备的技能进行分类探索。 中级PHP程序员 1.Linux 能够流畅的使用Shell脚本来完成很多自动化的工作;awk/sed/perl 也操作的不错,能够...

  • 3 年经验的 PHP 程序员应该掌握哪些知识

    在经过了半个多月的面试之后,对于目前市场上对于 3 年左右的程序员的的一个技能需求大概有了了解,对于个人的短板也有了一个更加全面的认识。今天我把最近一段时间面试中遇到的一些问题和考察的技能点总结下来...

  • 《CSS样式表行为手册》中文chm最新版本

    CSS样式表里重点讲述“行为”功能的一本CHM参考手册,很实用方便,内容也很丰富,收藏一下哦!

  • 1-中国各地区-固定资产投资-房地产开发投资情况(1999-2020年)-社科数据.zip

    中国各地区固定资产投资中的房地产开发投资数据集涵盖了1999至2020年的详细统计信息。该数据集包含了全国各城市地级市州的房地产开发投资情况,这些数据对于理解中国城市化进程、经济发展和房地产市场趋势至关重要。数据集中的指标包括年份、地区以及对应的房地产开发投资额(以亿元为单位),这些数据来源于中国区域统计年鉴及各省市统计年鉴。通过这些数据,研究者和决策者可以深入了解不同地区的经济动态,评估房地产市场的健康状况,并据此制定相应的政策和战略。这些数据不仅有助于宏观经济分析,还能为房地产开发商提供市场进入和扩张的决策支持。

Global site tag (gtag.js) - Google Analytics