对输出进行过滤和净化
开发团队应当检查传递到外部实体(包括用户、支持库、支持应用程序)的输出,以保证它与允许输出的参数保持一致,并确保此输出仅包含所允许的内容。实质上,在将输出发送给外部的目标接收者之前,用于验证输入的同类检查也适用于输出,这些输出包括输出到屏幕、输出到其它系统等。在调用SQL数据库时,开发者应当使用能够自动去掉字符的模板调用。
一个简单的例子就是检查用户是否合法的功能。如果开发者仅希望从数据库的查询中返回一条记录,就应当检查是否返回了特定记录。只需检查一下,看看该功能是否返回了表明失败的多条记录。与此类似,如果一个数据库的查询要返回一条记录或少量记录,就可以通过输出验证来阻止返回超过特定数量的记录,从而可以防止由于应用程序错误或漏洞被利用而造成的数据泛滥。
使状态信息的保留最小化
软件应当只保留最少的所需状态的信息,并且应当经常清除写到高速缓存中的数据和磁盘临时文件中的数据。如果软件发生故障,这些措施可以使敏感信息(其中包括可能被攻击者利用的软件自身的信息)被意外泄露的可能性达到最小。
不过,有时应用程序的数据必须保留状态信息,如cookies或会话数据。在这种情况下,程序员应当清楚攻击者可能访问哪些位置,不管是内存位置还是文件系统中的位置。状态数据和临时文件只能放在攻击者或程序之外的其它对象无法访问的地方。应当给临时文件起一个攻击者难以猜测的名字。此外,在程序终止执行时,还应当清除高速缓存中的数据,而且还要删除或覆盖临时文件。
不允许未经授权的特权提升
程序员不应当编写可以使用户或过程执行特权提升的逻辑。攻击者会监视这样一个进程:它试图引用另一个进程A,而进程A拥有比其自身更高的特权。攻击者将会解释这种由软件系统指示的特权提升和授权验证活动。开发人员应当使拥有更高特权的进程对攻击者不可见。如果攻击者看到了有更高特权的进程,就会利用它来提升其自己的特权。
合并进程间的身份验证
进程间身份验证的主要目的是将用户的身份和特权与用户所操作的应用程序的进程身份和特权联系起来。这样做可以使软件系统能够根据用户(人员的或软件实体的)与安全相关的特性来做出决策,例如,是否授权某实体访问某些数据或资源。进程间身份验证还可以使系统将软件的进程活动与其用户的经授权的身份连接起来。
但是,新的计算模式要求进程能够自主地动态激发其它自主软件的进程或代理。进而,这些代理可以动态地但更自主地激发进程或代理,所有这些代理都有可能在软件密集型的系统中被广泛地发布,甚至这些代理会属于其它的软件系统。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
软件开发:安全编码的九个最佳方法(三)
程序员可以使用攻击模式来确认相关攻击所针对的特定编码缺陷,并确保这些缺陷不会出现在其代码中。
-
软件开发:安全编码的九个最佳方法(一)
开发团队的所有成员应当清楚常见的编程错误及原因和减少错误的方法,以及这些内容对当前软件项目的适用性。
-
安全编码有章可循(一)
在做好安全软件开发的准备之后,开发团队还需要清楚安全编码的原则。这是开发任何健壮、安全软件的重要基础。
-
易被忽视的五大安全编码原则
如今,很多培训软件开发人员的机构并不培训如何安全地编码。解决软件安全问题的最佳策略就在于程序分析、开发、测试阶段对安全性的考虑。