软件应用程序安全开发指南(SDLC)(21)
2023-06-18 来源:飞速影视
的同时,删除目录中的所有文件)。
而exec()函数只保证第一个参数被执行:
execl("usr/bin/emacs","usr/bin/emacs",filename,NULL);
上面的例子保证文件名仅仅作为一个参数输入Emacs工具,同样它在Emacs命令中使用完全的路径而不是使用可以被攻击者利用的PATH环境变量。
3.6.3.竞争条件
进程需要访问资源时(无论是磁盘、内存或是文件)通常需要执行两个步骤:
1、首先测试资源是否空闲可用;2、如果可用,就访问该资源,否则它等到资源不再使用为止再去访问它。
当另一个进程在步骤1和2之间想要访问同一个资源时就出现问题了。这会
导致不可预测的结果。进程可能会被锁定,或者一个进程劫持获得了另一个进程的较大的权限而导致安全问题。攻击主要集中在有较大权限的程序上(称为setuid程序)。竞争条件攻击通常利用程序执行时可以访问到的资源。另外权限低的程
序也存在安全风险,因为攻击者可能会等待有较高权限的用户执行那个程序(例如root),然后进行攻击。
下面的建议有助于缓解竞争条件(racecondition)攻击:
在进行文件操作时,利用那些使用文件描述符的函数而不能使用那些使用文件路径的函数(例如使用fdopen()而不能使用fopen())。文件描述符使得恶意的
用户在文件打开时或是在原始的进程对文件进行操作前,无法使用文件连接(符号式的或是物理的)来改变文件。
在写文件甚至在读文件时使用fcntl()和flock()函数来对文件加锁,这样它们就不能被其他进程访问。它几乎可以建立原子级的操作。
谨慎操纵临时文件,因为它往往会导致竞争条件。
3.6.4.检验有效的返回值
检验有效的返回值非常重要。一个例子是旧的/bin/login的实现中不检验错
误的返回值,导致当它找不到/etc/passwd文件时返回root的访问权限。如果该文
件损坏了,那么这种情况是合理的,但如果该文件存在只是无法访问,那么这就是一个大问题。
3.7.Perl安全开发要求
多年以来,Perl已经成为用于系统管理和WebCGI开发的功能最强的编
程语言之一(几乎可以使用Perl做任何功能的程序)。但其扩展应用,即作
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号