安全编程: 避免竞争条件(2)
作者:网络 文章来源:转载 点击数: 更新时间:2006-1-19
[ 字体:缩小 正常 放大 | 双击自动滚屏 ]
请选择合适的字体颜色:
选择颜色
黑 色
红 色
黄 色
绿 色
橙 色
紫 色
蓝 色
褐 色
墨 绿
深 蓝
赭 石
粉 绿
淡 绿
黄 灰
翠 绿
综 红
砖 红
淡 蓝
暗 红
玫瑰红
紫 红
桔 黄
军 黄
烟 灰
深 灰
灰 蓝
在一个进程内部,线程可能也同样需要锁;有很多书都非常详细地讨论了这些问题。在这里,我们要讨论的主要问题是确保您小心地涵盖了所有情况;很容易忘记某个特定情形,或者没有正确处理。事实上,正确使用锁是很难的,攻击者可能利用这些锁处理中的错误。如果您需要在一个进程内部对线程使用很多锁,那么可以考虑使用自动完成锁的维护的语言或者语言结构。有很多语言,比如 Java 和 Ada95,都有内置的可以自动处理锁维护(并使结果有可能更正确)的语言结构。 只要有可能,在开发程序时最好根本不使用锁。一个单独的服务器 进程每次只接受一个客户机请求,然后处理该请求,直到完成该请求为止,而后再获得下一个请求,从某种意义上讲,进程内部的所有对象是被自动锁定的;这种简单的设计可以避免很多危险的加锁问题。如果您需要一个锁,那么保持其简单性(比如为几乎所有内容都使用惟一的锁)是有好处的。这并不总是实用的,因为这样设计有时会损害性能。具体地说,单服务器 系统需要确保无论哪个操作都无法占用过长的时间。但是这个建议是值得考虑的;使用很多锁的系统会更可能有缺陷,而且维护这些锁也会影响性能。 处理文件系统 安全程序的编写必须确保攻击者无法以导致问题的方式利用共享的资源,有时这并不像看起来那样容易办到。文件系统是最常见的共享资源之一。所有的程序都可以共享文件系统,所以,有时需要额外的努力,以确保攻击者不能以引发问题的方式利用文件系统。 有很多确定为安全的程序都存在称为“time of check - time of use”(TOCTOU)的竞争条件缺陷。这只说明了程序检查某种情形是否可行,然后稍后使用那一信息,但是攻击者可能会在这两个步骤之间改变该情形。对文件系统来说,以下问题尤为突出;在这两个步骤之间,攻击者通常可以创建一个普通的文件或者一个符号链接。例如,如果某个已授予特权的程序检查是否不存在给定名称的文件,然后打开该文件写入信息,那么在那两个步骤之间,攻击者可以创建一个使用该名称的符号链接文件... 比如 /etc/passwd 或者其他一些敏感文件。
上一页 [1] [2]
文章录入:54iter 责任编辑:54iter
上一篇文章: 安全编程: 避免竞争条件(1) 下一篇文章: 安全编程: 避免竞争条件(3)
【发表评论 】【加入收藏 】【告诉好友 】【打印此文 】【关闭窗口 】