9个重要习惯 极大提升工作和时间效率

现代人都很忙,但忙的可能没有效率,可能在“忙人”摸象,也就是瞎忙。也许你的效率可以提升20倍,也许你的激情和潜能可以提升10倍!秘诀就在于 目标管理、时间管理、精力管理、如何在短时间内完成更多的事情、如何从痛苦的修行中悟道、如何尊崇内心的自由、如何有更多的时间去享受生活、如何动态平衡 工作和生活?!这里有能大大提升工作效率和时间效率的几个重要的工作习惯:   1. 每天一上班就进入状态,不要浏览网页,快速聚焦最重要的工作项上面。 一些好习惯的养成,常常有助于工作效率的提高。比如,每天一进入办公室就进入状态,浏览一下邮件,列出今天要完成的工作,首先集中于做最最重要的事情。 不要一上班就浏览网页和新闻,来自朋友的消息和新闻往往会浪费不少时间并分散你的精力,如果你忍不住总是想要上网溜达溜达,这时候应该告诉自己:“晚几个 小时看,那些新闻不会消失的!” 实践证明,一上班就聚焦在最重要的工作上往往能最高效最快速的解决问题,因为你有热情,但热情和焦点很容易被分散,解决的秘诀就在于不让杂事分散自己的注 意力、焦点和热情。总之,记住了:每天一到公司先做最重要的事情!   2. 分类集中处理事项,大大提升时间利用效率。 你每天所要处理的工作,如果仔细想来无非有两种:事务型和思考型。如果将你所要做的工作做如此划分,区别对待,也许你会收到事半功倍的效果。事务型的工 作不用太动脑子,只要按照熟悉的流程或程序做下去就可以,而且不怕被干扰和中断,如收发e-mail、写信、填写工作报表、备忘录等,这些例行公事、性质 相近的事情可以集中在同一个时间段来处理,即使在精神状态不佳的情况下也能完成。而对于那些需要集中精力、一气呵成的思考型工作,则要谨慎对待,在做之前 要进行充分的思考,不停地想,苦思之后方有灵感闪现,这时要安排精力旺盛、思路敏捷,而且不易被干扰的时间段集中去做。   3. 制定工作计划之外给自己一个倒计时产生时间紧迫感。 每天面对大量的工作,谁都不免产生“丢三落四”、忙而无序的状况;如果会工作,养成定时作计划的习惯,效果是大大不一样的。 要善于管理自己的工作,可以准备一个记事本,对自己每月的工作计划、每周的工作计划进行规划和跟踪管理。每月之末,抽出一定的时间思考一下下个月的工作重 点和计划安排。制定工作计划,关键是要会分解目标,把制定的月目标分解到一个周,一个周的目标再分解到每一天。也许看上去是一个很庞大的,担心完成不了的 工作目标,经过这样的层层分解后,结果发现,原来要实现这个目标并不是很难;这样工作起来才不会感到有很大的压力。 此外,制定工作计划之外,要给自己设定一个倒计时,利用倒计时所产生的紧迫感。这是心理学家推荐的自我激励方法。这种倒计时所产生的紧迫感能激发你的决断力和专注力,调动你的情绪和潜能。   4. 学会沟通,微笑沟通,工作效率提升也需要沟通获取良好的外部环境和资源。 在一个公司里或者团队里,遇到最多的时间管理上的问题是什么?沟通问题。沟通首先要学会微笑,微笑首先要敞开心扉,用一个包容的心态和接纳的心态来沟通。微笑、自信,能产生神奇的效果,笑对世界,世界就会对你微笑;自信,周围的人会更多的支持你。 每天用一定的时间来和同事、上级沟通,有良好的沟通心态、学会倾听,就能获得积极的沟通效果,工作软环境、工作需要的资源就能获得支持!这对工作效率的 提升有非常大的作用。记住:很多时候有效沟通可能比抓紧时间做事还重要!很多有经验的人都知道:领导布置下来一项任务之后,先和领导沟通好预期的结果和方 式很重要 ~ 只有当你真正明白了要做什么,怎么去做的时候,再去行动,这样返工的几率就低的多了,自然效率也就高了。这就是所谓的“磨刀不误砍柴工”! 5. 提升自己的专业能力,能力强才有解决问题的效率。 我想这个道理大家都懂的,一个刚毕业的业务不熟、技术不精 的人去解决一个问题往往半天都找不到门道,半天一天的时间可能要被白白浪费在知道自己要干什么上面。有时候,要知道自己要干什么也是一件很难的事情,需要 对业务和需求、技术等多方面的理解,而不知道自己要干什么更不用谈工作效率了。即使知道了要干什么,下一步还有怎么做的问题…. 这一切都要求我们提升自己的专业能力,没有专业能力,强工作效率无从谈起。如果你的专业能力越强,经验约丰富,那么你做一件事情比别人消耗的时间就越少, 这时候你就需要考虑是不是可以接受更大的挑战,多做一些重要但是不紧急的事情。   6. 保持工作环境的有序和整洁。 实践证明,优雅整洁的工作环境、打造高效健康的工作区能大大激发工作的热情和潜能,这就是为什么美国的大公司纷纷在工作环境和装修上大请设计师的原因 了。工作环境不仅会影响到工作效率,还会影响工作中的创造性。美国管理大师坎特为不景气的公司管理人员提出的第一个建议往往是让他们把工作地点重新粉刷或 是清洁一遍。这也是给你自己贴上成功标签的一种方法。她说:“环境会激发人们向更高的目标看齐。不要认为给自己换个新发型或是买件时髦的衣服是轻浮虚荣的,你这样做不是为了炫耀,而是为了在胜利到来之前为自己树立信心。   7. 学会自我暗示提升自信,好情绪能提升工作效率。 自信心就是对良性结果的期待! 工作中没有什么勇敢不勇敢,如果出了问题就必须面对!必须解决!遇到挫折的时候抛弃所有的主观情绪,只追问自己:如何解决问题?(这很难,需要很深厚的功 力)在想办法解决的过程中,要有信心,要进行自我暗示,相信一定会解决一定能够解决,这种对良性结果的期待就是自信心,这种自信能大大提升工作效率。而坏 的情绪好坏往往会影响到工作状态,要求自己尽量不要把一些不好的情绪带进工作里,当然谁也不可避免遭遇气愤、低落的时刻,但要学会控制。每当这时,闭上眼 睛几分钟,告诉自己:“只要不发作,就又战胜自己了”。能够管理自己的情绪了,也就意味着在走向成熟。 此外,要学会把生活和工作上的事情分开。 通常影响我们效率的,不是繁杂的任务和时间管理的问题,而是我们的情绪!我们通常被情绪所左右,压根不想工作,不想干活,拒绝合作,这才是我们拖延和被 动的原因。通常让我们感到疲惫的,不是劳累,而是索然无味。所以,跳槽去一个你喜欢、投入热情的工作中去吧,如果不热爱你的工作,何来工作效率?   8. 要学会拒绝。 [...]

精彩继续…»

(转载)细数各种编程语言优缺点

通天塔导游 (译注:圣经记载:在远古的时候,人类都使用一种语言,全世界的人决定一起造一座通天的塔,就是巴别塔,后来被上帝知道 了,上帝就让人们使用不同的语言,这个塔就没能造起来。 巴别塔不建自毁,与其说上帝的分化将人类的语言复杂化,不如说是人类自身心灵和谐不再的分崩离析。之所以后来有了翻译,不仅是为了加强人类之间的交流,更 寄达了一种愿望,希望能以此消除人际的隔阂,获求来自心灵的和谐及慰藉。真正的译者,把握血脉,抚平创痕,通传天籁,开启心门。) 这是我写的旋风式的编程语言简介—我本来为亚马逊开发者杂志本月的期刊写的,但是发现我写的东西没法…见人。 首先,我偶尔一不小心口出脏话,或者对上帝不恭的话,所以对很官方很正式的亚马逊上发表是不合适的; 所以我就把它塞到我的博客里了,我的博客反正没人看的。除了你以外。是的,只有你会看,你好啊。 其次,这是一项进行中的工程,现在只是东打一耙西搞一下,还没有精加工过的。又一个把它写到博客里的很大的理由。不需要很好,或很完整。就是我今天想说的一些话。请随便! 我的旋风式简介会讲C,C++,Lisp,Java,Perl,(我们在亚马逊用到的所有语言),Ruby (我就是喜欢),和Python,把Python加进来是因为—好吧,你看了就知道了,现在我可不说。 C 你必须懂C。为哈? 因为出于所有现实的理由,这个世界上你过去,现在,将来会用到的每一台计算机都是一台冯·诺曼机器,而C是一种轻量级的,很有表达力的语法,能很好的展现冯·诺曼机器的能力。 冯·诺曼架构就是你每天都用的计算机的架构的标准:一个CPU,内存,硬盘,一条总线。多核计算机并没有带来本质上的变化。冯·诺曼机是一个很方便,很便宜,上世纪五十年代的实现图灵机的技术,图灵机是执行计算的最知名的抽象模型。 世 上还有其他的计算的机器。比如,Lisp机器,是上世纪50年代对Lisp计算模型的实现。Lisp模型是基于lambda代数的一种计算语言表示法,后 者是与图灵机同构的一种模型。不像图灵机,lambda代数能被人类读和写。但是这二者是同等能力的。它们同样精确的表示了计算机能干什么。 Lisp机现在不是很流行了,除了在跳蚤市场里。从谁更受欢迎来说,冯·诺曼机器赢了。还有一些其他的计算机,比如神经网络计算机,译者也不知道怎么翻的计算机(cellular automata),但是这些都不够大众化,至少现在是这样的。 所以你必须知道C。 还 有一个你必须知道C的原因是,Unix是用C写的。巧的是,Windows也是。基本上所有的其他操作系统都是用C写的。因为这些操作系统都是冯·诺曼机 的操作系统,你还能用别的吗? 任何跟C很不一样的东西都会跟硬件的实际能力相差太远而导致无法满足性能上的需要,至少对一个操作系统来说是这样—至少在上个世纪是这样,碰巧这些系统都 是上个世纪的。 你还应该知道Lisp。你不必用它来干实际工作,虽然它在很多GNU的软件里都会很用得着。尤其是,你应该学会Scheme,Lisp的一种小巧化的,纯洁的方言。GNU的版本叫Guile。 他们在麻省理工和加州伯克利教新学生一到两个学期的Scheme,这些学生都对他们为哈要学这么奇怪的语言抓破脑袋。实话实说,作为第一门学习的语言,这是一个很烂的选择,第二门也是很烂。你应该学会它,最终,但不是作为第一门或第二门语言。 这是很难的哦。这是很大的一步。学会怎么用Lisp写出像C语言的程序是不够的,那没有意义。C和Lisp一个就像红外线,一个就像紫外线,它们分布在光谱的最两端。它俩一个牛逼的地方刚好是另一个傻逼了的地方。 如 果说,C是最靠近计算机是如何工作的语言模型,Lisp就是最能反映计算(注意,这里没有了“机”字,计算机和计算是很不同的!译者注)是如何工作的模 型。你不需要懂很多Lisp,真的。紧咬Scheme就哦了,因为它是最简单最干净的。其他的Lisp已经发展成了很大,很复杂(很好很强大? 译者:-)的编程环境,就像C++和Java,要有很多库啊,工具啊等等之类。那些,你不需要知道。但是你应该能用Scheme写程序。如果你能够做出 The Little Schemer和The Seasoned Schemer这两本书里的所有习题,你懂得就够多了,我认为。 但是对于你天天要做的编程工作,你应该基于以下条款选择你的语言:库,文档,工具支持,操作系统集成,资源,和一堆其他的东西。这些条款跟计算机如何工作关系很小,但是跟人类如何工作关系甚大。 人们还在用很直白的C语言写东西。很多东西。你应该懂C! C++ C++ 是地球上最蠢的语言,即使是从蠢这个字的真正意义上出发。C++很无厘头。它不知道自己是什么东西。它没有内视(面向对象里的一个概念,译者注)。C也没 有,但是C不是“面向对象”的,而面向对象很大程度上是关于要让你的程序知道它自己。对象就像演员。所以面向对象语言应该有运行时的自省机制,知道自己是 个什么类的对象。C++不是这样的,真的,你不会那样用它。 关于C:写一个C的编译器是那么的简单,以至于你可以用C写一个关于C的工 具,用起来就像是有内省机制。而C++呢,基本上是不可解析的,所以如果你想写一个很牛逼的工具用来—比如,告诉你你的虚函数的原型,或者帮你重构你的代 码,你将不得不依赖别人的工具集,因为你自己在除非脑子进屎的情况下是根本不会去写一个C++的解析器的。而市面上所有的C++的解析器都很傻逼。 C++很蠢,你不能用蠢语言创造一个好系统。语言决定世界,蠢语言决定蠢世界。 所有的计算都基于抽象。你用低级的东西创造出高级的东西。但是你不能用分子创造出一个城市。尝试使用太低级别的抽象只会给你带来麻烦。 我们就惹上麻烦了 (是指亚马逊的员工,还是所有C++的程序员? 我也不知道,译者注)。 理智的情况下,你用C写的最大的东东就是一个操作系统。而操作系统其实不是很大的,真的。它们看起来很大,但那是因为它们有很多应用软件,操作系统本身的内核是蛮小的。 你 [...]

精彩继续…»

SQL分页存储过程示例及分析

现在大量数据的处理越来越多,高效查询成了一个很重要的问题,其中数据分页也是个必知的东西, 网上找了个例子,效率还不错,一起学习!

使用方法: ———————————– 1 先建个测试用的表:

2 插入数据:(2万条,用更多的数据或者字段长度更大测试会明显一些)

==================================================================== 其它的方案及分析: 分页方案一:(利用Not In和SELECT TOP分页) 语句形式:

————————————- 分页方案二:(利用ID大于多少和SELECT TOP分页) 语句形式:

————————————- 分页方案三:(利用SQL的游标存储过程分页)

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。 建议优化的时候,加上主键和索引,查询效率会提高。 通过SQL 查询分析器,显示比较:我的结论是: 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句 分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句 分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用 在实际情况中,要具体分析。

精彩继续…»

SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法

SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法   在Windows Server 2003 、Windows XP或者Windows 2000中安装 SQL SERVER 2008 开发版和企业版时,会遇到“性能计数器注册表配置单元一致性”检查失败 的问题(Windows Server 2008 由于暂时没有环境,尚未测试)   (图一) 安装提示错误信息为: (图二) 解决方法: 先根据帮助提示,打开 http://support.microsoft.com/kb/300956, 帮助的文档是让你使用安装光盘重置性能计数器文件,操作步骤比较复杂,可是我并没有安装什么特殊的软件,而且确定也没有病毒感染,为什么性能计数器会损坏 呢,因此决定不到万不得已暂时不去重置性能计数器,以免扩大问题的影响面。(Microsoft的Help文档经常是答非所问….)   果然,经翻阅文档,发现计数器配置信息保存在注册表 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib]中 操作步骤: 1. 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击“开始”、“运行”,然后在“打开”中键入 regedit.exe,再单击“确定”。在 Windows 2000 中,使用 regedt32.exe 启动注册表编辑器   2. 定位到以下注册表项: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib] “Last Counter”=dword:0000566a(22122)   [...]

精彩继续…»

快递查询综合网站

还在找“申通快递官网”、“顺丰快递查询”、“圆通网址”?? 收个快递容易吗,要满世界找各自的官网去查单号。。。 感谢有心人做了这个网站,可以同时查询多种快递单号,建议收藏。 网址:http://www.kiees.cn/ ——快递之家 预览: 以后找快递就不用漫天百度、google了。~~~  

精彩继续…»

(转)开发者拒绝写技术博客的常见理由

常有人跟我讨论我在blog上发布过的博文,有时候他们还希望我来撰写某些文章。在讨论的过程中,我几乎总是会问为什么你自己不开一个博客,或者为其他人的博客做些贡献呢?当我在引导他们为技术类的主题写一些博文时,极少有人对此感兴趣。 我的母亲总是告诉我(以及她的学生们)每个人都有自己的故事。她说,写作可能是一种你不曾想到过的非常有益处的行为,直到你写的东西获得了其他人的喜爱和赞同。就像软件开发者为他们的用户开发软件一样,作家为他们的读者而写作。从来都没有什么论断说技术人员无法成为激励他人学习并乐于同他人分享知识的优秀作者。 我写这篇博文的目的就是想鼓励广大的技术人员去享受写作、高效的写作,并能够从中得到乐趣。我将翻出一些我曾经最常见到的关于为什么技术人员不愿意写博客的理由。   “我不认为我是某方面的专家。对于任何一个我能想到的主题,我都不是权威。” 我首先想到的是这个理由,因为它将是我最需要去驳斥的观点。如果从这篇博文里你没有得到任何收获的话,那就记住这句话:你并不需要成为某方面的专家才能去写相关的文章。 翻翻我的博客你就能找到很多这样的例子。我自认为自己是某个方面,或者某两个方面的专家,但我在过去5年中写了超过450篇博文,我肯定不会只写我最在行的那一两个主题。写下你懂得的东西,要成为权威你就不能害怕去多做些研究。这方面有一个很好的例子就是我的一篇标题为“Kerberos for haters”的博文。我几乎没有任何有关Kerberos方面的经验。事实上,甚至在我的RHCA(RedHat系统部署工程师)认证考试中我都无法正确配置好它!但是,我对此做了相当多的研究,并开始慢慢理解了这一大坨东西是如何联系起来的。还有许多人都对Kerberos感到困惑,于是我决定将我所掌握的有关Kerberos方面的知识串接起来写成一篇博文。这篇博文引来了许多正面和负面的回复,很明显我发布的博文对一些读者起到了帮助作用,启发了一些人同时也得罪了一些人。 接下来看看下一个常遇到的理由:如果我写的东西里面有些地方是错误的怎么办?在整个互联网面前犯错,这使我看起来就像是个傻瓜。这种事我早就经历过,都已经有些厌倦了。做个不恰当的假设,每个作者都至少会犯一次错。读者们会指出你的错误(有些读者会很含蓄的指出,而有些读者不会这样),下面就是你的责任了,要么更正你的大作要么说服你的读者是他们错了。我自己也曾经发表过含有错误的博文,而且我对于时不时的要去检查这些错误显得有些懒惰。就像我中学时的新闻学老师一直教导我的:对于一个错误,最重要的部分是你要如何去更正它,并从中汲取教训。总之,你一定会犯些错误的。只要你尽心尽力的对此做研究,并尽量减少错误,及时对错误做出回应,我想读者是不会怪您的。 说到错误,这里还有一个常见的理由:我技术还不错,但我的拼写和语法很糟糕,我根本不擅长写作。这个问题很容易解决,如果你是那种什么事情都靠自己解决的人,那就拿起这本由Strunk和White合著的《The Elements of Style  | 风格的要素》吧。网上有这本书的PDF版,或者你也可以借一本来读。无论你属于哪种情况,这本书详尽的描述了应该如何适当的加标点符号、如何组织句子和段落,以及如何正确地引用你的论点来源(对于写研究性的文章来说相当受用)。也许你并不想拿起一本如此枯燥的参考书来读,如果是这样的话,看看你身边有没有擅长写作的人。在大公司里你常常能在市场部或者公司的通讯录里找到一些愿意读你的文章并帮你做批注的伙计(谢谢你Garrett!,感谢你曾经为我修订过文章)。在 Fiverr(著名的5美元服务区,这是一个在线的信息平台,特色之处在于其收集那些价值5美元的事情,用户可以发布、接受或者分享这些信息)上我甚至找到了一些愿意以5美元的价格为我修订文章的人。 下面我们将看看这第二常见的理由:我不知道该写给谁看。如果我写的东西太简单了,那些真正的技术大牛们会不会觉得我就是个小白?如果我写的东西超级复杂,大多数人都接受不了又怎么办? 这些我都经历过。大多数称职的Linux系统管理员都知道该如何添加和删除iptable规则,他们会觉得这是相当简单的任务。但是你知道吗,在我写过的超过450篇的博文里,这篇《deleting a single iptable rule》的访问量每个月都是排名前5!我每个月的点击量里有11%都来自这篇博文。人们要么通过这篇博文学到了一些知识,要么是他们忘记了该如何删除一条iptable规则,想通过这篇博文做快速的参考。不管如何,这篇博文对于许多人来说都是很有价值的,尽管在我看来这个主题相当的简单。反过来说,我曾经发疯写过一个完整的关于云主机冗余配置的how-to类文档,结合了LVS、glusterfs、MySQL on DRBD、memcached、haproxy以及Idirectord等各种技术。我觉得对于某些读者来说这个文档会很有价值,但肯定会搞晕绝大部分读者。事实证明我又错了,这篇博文长期占据我博客的前10名受欢迎的文章之一,通过这篇博文我收到的回复、email和IRC比其他的文章都要多。这再次证明,本是一篇我认为最没有用处的文章反倒成为了一个“话匣子”。 最后,让我们总结一下,如果你对于写作感到力不从心或者觉得气馁的话,记住下面这些忠告: ●  写你感兴趣的东西,不必在意你是否是专家 ●  不要害怕失败 ●  多多回复你的读者 ●  就算你觉得没人会看你写的东西,也要坚持写下去 ●  始终确保你的文章就代表着你的声音——这也是为什么写作是如此特别和吸引人的地方 关于作者: 本文作者是Major Hayden。他是一名Linux工程师,工作方向是大规模OpenStack部署以及Rackspace云服务自动化管理。Major乐于撰写有关Linux系统管理以及安全性方面主题的文章。他常常在Rackspace的官方博客以及他的个人blog上发表文章。

精彩继续…»

(转载)8个开发更安全代码的简单规则

我非常荣幸在过去的几年中曾经与数千位出色的开发人员一起工作,他们希望了解如何编写更安全的软件。在此期间,我也从构建安全系统方面表现出色的人员那里学到了很多东西,这使我开始思考一个问题。我在想“安全开发人员”之间是否有共同的技能或习惯。答案是当然有!本文介绍了安全代码开发人员之间共有的一系列习惯。   目前我可以肯定的一点是,任何看过这篇文章的人都会立即发现自己不具备的习惯。这非常好。我知道除此以外还有其他好的想法。这里只是列出我所观察到的!因此,下面介绍的是我在这几年中注意到的几种典型习惯。   习惯 1:承担责任   这是长期以来“没有银弹”观点的一种转变,该观点是 25 年前 Fred Brookes 在其“人月神话”一书中提出的。能否使您的产品具有足够的安全性完全取决于您自己。其他任何人或任何出色的工具或编程语言都无法解决所有安全隐患。不要误解我的意思,我喜欢源代码分析工具,但他们无法神奇般地修复您的所有安全漏洞。只有您自己可以做到这一点。   只有创建安全设计和编写安全代码的开发人员才能构建出安全产品。最后,编写代码由个人完成。工具不能取代个人完成这项工作。因此,您产品的安全性就是您的责任!Blaster 和 CodeRed 蠕虫利用的就是个人编写的代码(参见图 1)。      图 1 有弱点的代号是人编写的请记住,要仔细检查所有代码,所有代码都有可能受到攻击。没关系。受到攻击也没关系。关键是,您的代码是否会遭到破坏?只有您可以决定最终结果。因此您的代码必须要使您自己满意。您必须对代码的质量充满信心,因而在晚上可以安心地休息,因为您知道如果受到攻击,您已经做好了万全的准备,可以防止代码受到破坏。   如果有可能,最好请一位安全专家对您的代码进行专业评审。不要让那些对安全一无所知的人来检查您的代码,不要期望他们能够找出安全错误和漏洞。要留出充分的时间让真正了解安全性的人检查您的代码。   不要过于自负,在需要帮助时应主动寻求帮助。我刚刚提到了,您不应完全依赖于工具,但您应该利用一切可利用的资源。请对您的代码运行所有可用的源代码分析工具,并经常这样做。利用所有可用的防御性语言构造和库技巧。例如在 C# 语言中,将执行数组访问的面向网络的代码打包,其中数组索引来自网络请求,采用 checked 操作符的形式,以检测可能出现的整数算法错误。   习惯 2:永远不相信数据   对于这一点,我已经说过无数次,但我还要重申一遍:所有输入在得到证明之前都是不可信的。看看那些最让人深恶痛绝的安全漏洞,您就会发现它们所拥有的最显著的共性就是开发人员相信了输入的数据。问题在于您的代码假定这些数据是可靠的,那么如果您的假设不正确将会怎样?在某一天您的应用程序很可能会崩溃。如果严重的话,攻击者可能会在您的流程中插入恶意代码并破坏您的流程。   安全系统的定义是只执行所要求的任务而不执行其他任务的系统。这一定义有些古怪。当输入的数据存在信任问题时,您往往会让系统执行其他任务。常见漏洞和披露 (CVE) 数据 (cve.mitre.org) 的粗略分析显示,从 2001 年至 2004 年,CVE 跟踪的所有安全漏洞中有 47% 的漏洞属于输入信任问题。最显著的问题就是缓冲区溢出、整数算法错误、跨站点脚本和 SQL 插入错误。我们开始不断看到这种漏洞的新变体,如 XPath 插入漏洞和轻型目录访问协议 (LDAP) 插入漏洞。   您可以根据几个简单规则纠正输入信任问题。首先,不要只看您知道的错误,这就假定了您知道所有错误,并可预测将来发生的所有错误。查找错误是可以的,但条件是这不是您唯一的防御手段。更好的策略是将输入控制在您知道的正确的范围内。对于诸如 C# 和 Perl 此类的高级语言,我喜欢使用正则表达式来确保这一点。   其次,抛弃您已知的错误。例如,如果某人通过您的代码远程请求一个文件,并且文件名中包含不确定的字符(如:or \),请拒绝该请求。并且不要告诉攻击者原因;只要说“找不到文件”即可。   最后,净化数据,这一点并非对所有情形都适用。例如,在 Web [...]

精彩继续…»