2011年度CWE/SANS最危险25个软件错误部分记录

为什么是2011年度呢?因为后面就没有这个排行了。
原文地址在这里,仅对其中的一部分进行记录。

SQL注入

CWE编号

89

描述

软件利用一些受外部影响的输入来构造SQL命令,并且对输入中可能修改这条SQL命令的特殊元素没有处理过处理错误。

预防手段

设计上
  • 使用经过检验的框架或库。
  • 利用结构化的方法来强制数据和代码分离。
  • 用能够完成任务的最低权限来运行你的代码。
  • 对于任何客户端上的安全检查,在服务器上也复制一份。
  • 给可能的输入建立映射表,拒绝其他输入。
实现上
  • 如果一定要动态构建查询语句或命令,建立严格的白名单。
  • 假设所有输入都是恶意的,使用成熟的输入验证策略。
  • 保证error信息中包含尽可能少的信息。
  • PHP开发者不用register_globals.
操作上
  • 使用应用防火墙。

OS注入

CWE编号

78

描述

软件利用一些受外部影响的输入来构造OS命令,并且对输入中可能修改这条OS命令的特殊元素没有处理过处理错误。

预防手段

设计上
  • 尽可能利用库函数调用而不是外部过程来实现功能。
  • 在jail或其他沙盒中运行你的代码。
  • 对于那些用来生成os命令的数据,尽可能减少它们与外部接触的机会。
  • 对于任何客户端上的安全检查,在服务器上也复制一份。
  • 使用经过检验的框架或库。
  • 利用结构化的方法来强制数据和代码分离。
  • 给可能的输入建立映射表,拒绝其他输入。
  • 用能够完成任务的最低权限来运行你的代码。
实现上
  • 如果一定要动态构建查询语句或命令,建立严格的白名单。
  • 如果程序允许指定参数,那么用这种方式替代命令行。
  • 假设所有输入都是恶意的,使用成熟的输入验证策略。
  • PHP开发者不用register_globals.
操作上
  • 在一个能进行污点分析的环境执行代码,并且禁止所有用到被污染数据的命令。
  • 保证error信息中包含尽可能少的信息。
  • 利用运行时的限制来创建一个指令白名单
  • 使用应用防火墙

经典缓冲区溢出

CWE编号

120

描述

程序将一个输入缓冲区内容拷贝到输出缓冲区,而没有确保输入缓冲区的大小小于输出缓冲区。

预防手段

需求上
  • 使用一种不会发生缓冲区溢出的语言。
编译上
  • 使用能够减轻或消除缓冲区溢出的编译器或编译策略。
  • 手动增加攻击者的工作量。
设计上
  • 使用经过检验的框架或库。
  • 对于任何客户端上的安全检查,在服务器上也复制一份。
  • 给可能的输入建立映射表,拒绝其他输入。
  • 用能够完成任务的最低权限来运行你的代码。
实现上
  • 在对内存进行分配管理时,认真检查缓冲区长度,边界等。
  • 假设所有输入都是恶意的,使用成熟的输入验证策略。
操作上
  • 利用地址空间配置随机加载(ASLR)技术。
  • 使用有数据执行保护机制的CPU或OS。
  • 将不指定长度的复制函数用指定长度的函数替代。
  • 在jail或其他沙盒中运行你的代码。

跨站脚本

CWE编号

79

描述

软件在用户控制的输入被放到服务其他用户的网页之前未对用户控制的输入进行检查或检查不当。
出现在写网页的各种语言中。

预防手段

设计上
  • 使用经过检验的框架或库。
  • 理解你的输入的上下文。对于所有将会被输出到网页的数据,尤其是从外部输入进来的数据,对非字母字符使用适当的编码。
  • 掌握所有不可信输入所能到达的地方,并记住不可信输入可能会通过API调用间接获得。
  • 对于任何客户端上的安全检查,在服务器上也复制一份。
  • 利用结构化的方法来强制数据和代码分离。
  • 给可能的输入建立映射表,拒绝其他输入。
实现上
  • 对每个网页固定一种编码。
  • 使用Struts时,将form bean的filter设置为true再写数据。
  • 将会话cookie设定为HttpOnly.
  • 假设所有输入都是恶意的,使用成熟的输入验证策略。
  • PHP开发者不用register_globals.
操作上
  • 使用应用防火墙

关键功能缺少授权检查

CWE编号

306

描述

对需要可证明的用户身份或消耗大量重要资源的功能没有进行任何授权检查。

预防手段

设计上
  • 使用经过检验的框架或库。
  • 对于任何客户端上的安全检查,在服务器上也复制一份。
  • 将你的应用分为匿名,正常,享有特权的和管理员权限的区域。
  • 尽量避免使用自定义的验证方法,用框架,操作系统或环境的验证能力来替代。

缺少授权检查

CWE编号

862

描述

当一个角色试图访问一个资源或进行一个action时,软件没有进行授权检查。

预防手段

设计上
  • 使用经过检验的框架或库。
  • 将你的应用分为匿名,正常,享有特权的和管理员权限的区域。
  • 确保你针对着你的业务逻辑进行访问控制检查。
  • 对于网络应用,确保每一页在服务器端都正确地进行了访问控制。
配置安装上

在你的操作系统或服务器环境上使用正确的访问控制能力,并且定义你自己的访问控制表。

猜你喜欢

转载自blog.csdn.net/m0_37924639/article/details/80428425