2010最危险的25个编程错误之思考

阅读更多

早上上班先扫了一眼csdn,其中新闻“2010最危险的编程错误”挺吸引我,于是深度之,感触颇深。

一、2010最危险的编程错误条目

1. 跨站点脚本攻击(4)

2. SQL注入(3)

3. 经典缓冲区溢出(1)

4. 跨站点请求伪造(7)

5. 不正确的访问控制(授权)

6. 在安全决策中依赖不可信的输入

7. 不正确地将路径名限制为受限路径

8. 上传危险类型的文件不受限

9. 操作系统命令中特殊因素的处理不正确(操作系统命令注入)(5)

10. 敏感信息未加密(6)

11. 使用硬编码凭据(21)

12. 以不正确的长度值访问缓冲区

13. PHP程序中Include/Require语句文件名控制不正确(PHP文件侵入)

14. 数组下标验证不正确

15. 异常条件检查不正确

16. 错误消息泄露信息(9)

17. 整数溢出

18. 缓冲区大小计算错误

19. 关键函数缺乏身份验证

20. 下载未经完整性检查的代码(15)

21. 对关键资源的错误权限分配(22)

22. 资源分配没有限制

23. URL重导向到不受信的资源

24. 使用被破解或有风险的加密算法(20)

25. 存在竞争情况(Race condition)(8)

其中后加括号有数字的,是该项错误去年的排名。显然,连续两年都入选的错误,千万不要再犯了。

二、25条编程错误之思考

1、高安全性web程序越来越难写

虽然现在编程语言越来越多、越来越先进、上手越来越容易,甚至完全利用拖拉、配置都可以完成程序编写,但是程序安全风险却越来越高,而且越来越隐蔽。这个,我们细想下也好理解,因为安全风险是可继承并且可放大的。比如说,优秀的html编辑器fckeditor,其有文件上传的漏洞,则只要你的web站点使用了fckeditor就有文件上传的漏洞,而此漏洞是极其隐蔽的。因此,对于对公的有数据交互的web开发,提高其安全性欲来欲困难,写程序的难度也越来越大,不是以前的数据通过web页面可提交保存到数据库并且能查询出来即可。

2、必须有一套强壮权限控制系统

现在做web系统,一定要有强壮的权限控制机制,不仅要控制url,更要控制函数、数据等资源。如表格所示的几条都是由于权限没控制好导致,因此要做一个web系统,其权限控制一定要强壮而且灵活。

5. 不正确的访问控制(授权)

22. 资源分配没有限制

21. 对关键资源的错误权限分配(22)

19. 关键函数缺乏身份验证

3、须有统一的错误处理机制

由于很多错误、异常都是不可预料的,因此即使程序员做了很多错误处理,测试的时候也都是被程序本身捕捉到了,但是用户使用的时候却不断地抛出其它的错误、异常,而且往往会暴露关键信息。诸如:jsp容器是tomcattomcat版本号是多少,数据库是oracletable名称是什么,操作了table的哪些field等。因此,web开发必须进行统一的错误处理,程序员未自行处理的错误、异常,开发平台一定须处理掉。

4、关键性的数据录入、条件必须在服务端校验

数据校验很多开发人员都会考虑到而且也会处理,比如:*必须录入,长度要满足多少,类型必须是什么等等,但是大部分只是在前端js处理了下,就传给服务器端,服务器端直接提交了。跨站点脚本攻击、sql注入、跨站点请求伪造、在安全决策中依赖不可信的输入等如在服务器端校验,则可有效避免。

5、敏感信息一定要加密

敏感信息不仅在传输途中要加密,而且存储在数据库中也应加密,如登录口令等。

你可能感兴趣的:(编程,fckeditor,Web,Tomcat,PHP)