原文地址:
欢迎转载!但请注明出处(原文地址)与我的姓名:靳田 【程序编程相关:关于blog的作用的一些思考】http://blog.csdn.net/estyle/archive/2004/07/02/32269.aspx 【推荐阅读:实现上千万条数据的分页显示!】尽管大家都提“防御性编程”,但我还是比较喜欢“防御”——毕竟防御不是目的,只是措施而已,过分强调难免迷失方向. 【扩展信息:VB.net基础:如何获得并显示网上图片】
谢谢啦! ^_^首先要弄清楚的问题是:什么是防御?为什么要进行防御?
回答第一个问题,简单地说,防御有两个主要内容,既尽量避免潜在的错误发生与尽量减小错误带来的危害. 如果你已有一定编程经验,或许会拿防御与异常处理进行对比.就我看来,异常处理提供的是一套死的机制,而防御则属于活的思路编程范畴,把异常处理用活了,也就成了一种防御(注意这远远不是防御的全部). 对于第二个问题,这样说或许比较贴切:就算你能容忍你的程序中存在大量高发且明显甚至危险的漏洞,你的客户与程序使用者却是无论如何都不能接受的!你惹他们试试看?其次,我们要弄清楚的问题是:如何进行防御?
前面说过了,防御是活的,其根本任务不在于形式,而在于思路!现在我们先理清思路. 最传统的防御思路是:先为程序设置一个理想的应用环境(不仅仅是软硬件环境,还包括使用者行为等可变因素),分析法找出尽可能多的潜在错误(既那些可能与理想的运行环境不同的地方),制定验证依据与响应措施并实施,然后运用错误处理机制对未知的潜在错误进行捕获与处理.——注意,我用了“最传统的”来修饰这个防御思路,建议大家先不要在意这个思路的优劣,看完全文再慢慢讨论. 无论是什么样的防御思路,其最根本的问题总是“分析法找出尽可能多的潜在错误”,所以下面我们先说说这个根本问题.或许举几个简单而片面,但是很常见的例子比较能够帮助大家理解:
一.用户信息注册,数据表中设计的年龄字段的数据类型是整型,用户可能输入的是“eighteen”; 二.运用mssql数据库的asp应用程序被部署在一台没有安装mssql与msde的服务器上; 三.依赖用户输入构造t-sql语句的where子句,导致埋下的sql注入隐患; 四.浏览者短时间内多次尝试登陆.呵呵,是不是一旦举例,就豁然开朗了?问题在于,如何找出尽可能多的潜在错误,强调的是尽可能多!这我可帮不了你,要靠你自己发现并总结经验.当然,借鉴别人的经验也是有效的,但如果缺乏自己的思考仍然是永远不够的.
... 下一页