Abstract

如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录。

Explanation

Database access control 错误在以下情况下发生:

  1. 数据从一个不可信赖的数据源进入程序。
  2. 这个数据用来指定 SQL 查询中主键的值。 例 1: 以下代码用到一个参数化指令,这个指令转义了元字符,以防止SQL injection 漏洞,并构建和执行一个 SQL 查询。该 SQL 查询指令可以搜索与指定标识符 [1] 相匹配的清单。 您可以从与当前被授权用户有关的所有清单中选择这些标识符。
...
id = Integer.decode(request.getParameter("invoiceID"));
String query = "SELECT * FROM invoices WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setInt(1, id);
ResultSet results = stmt.execute();
...

问题在于开发者没有考虑到所有可能出现的 id 值。 虽然接口生成了一个当前用户的标识符清单,但是攻击者可以绕过这个接口,从而获取所需的任何清单。 因为此例中的代码没有执行检查以确保用户有权访问需要的清单,所以代码会显示所有清单,即使这些清单并不属于当前用户。 许多现代 Web 框架都提供对用户输入执行验证的机制。 其中包括 Struts 和 Struts 2。 为了突出显示未经验证的输入源,该规则包会对 HPFortify Static Code Analyzer( HP Fortify 静态代码分析器)报告的问题动态地重新调整优先级,具体方法是在采用框架验证机制时降低这些问题被利用的可能性并提供相应的依据。 我们将这种功能称之为上下文敏感排序。 为了进一步帮助 HP Fortify 用户执行审计过程, Fortify 安全研究团队开发了 Data Validation(数据验证) 项目模板,该模板根据应用于输入源的验证机制按文件夹对问题进行了分组。

Recommendation

与其靠表示层来限制用户输入的值,还不如在应用程序和数据库层上进行 access control。 任何情况下都不允许用户在没有取得相应权限的情况下获取或修改数据库中的记录。 每个涉及数据库的查询都必须遵守这个原则,这可以通过把当前被授权的用户名作为查询语句的一部分来实现。 例 2: 以下代码实施了与例 1 相同的功能,但是附加了一个限制,即为当前被授权的用户指定某一特定的获取清单的方式。

...
userName = ctx.getAuthenticatedUserName();
id = Integer.decode(request.getParameter("invoiceID"));
String query =
"SELECT * FROM invoices WHERE id = ? AND user = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setInt(1, id);
stmt.setString(2, userName);
ResultSet results = stmt.execute();
...

Fortify Audit Workbench 笔记 Access Control: Database的更多相关文章

  1. Fortify Audit Workbench 笔记 Unreleased Resource: Database( 未释放资源:数据库)

    Unreleased Resource: Database 未释放资源:数据库 Abstract 程序可能无法成功释放某一项系统资源. Explanation 程序可能无法成功释放某一项系统资源. 资 ...

  2. Fortify Audit Workbench 笔记索引

    Password Management: Password in Configuration File(明文存储密码) https://www.cnblogs.com/mahongbiao/p/124 ...

  3. Fortify Audit Workbench 笔记 Cross-Site Scripting-Persistent

    Cross-Site Scripting: Persistent Abstract 向 Web 浏览器发送非法数据会导致浏览器执行恶意代码. Explanation Cross-Site Script ...

  4. Fortify Audit Workbench 笔记 Header Manipulation

    Header Manipulation Abstract HTTP 响应头文件中包含未验证的数据会引发 cache-poisoning. cross-site scripting. cross-use ...

  5. Fortify Audit Workbench 笔记 SQL Injection SQL注入

    SQL Injection SQL注入 Abstract 通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令. Explanation SQL injec ...

  6. Fortify Audit Workbench 笔记 File Disclosure: Spring 文件泄露(Spring框架)

    File Disclosure: Spring 文件泄露(Spring框架) Abstract 若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件 ...

  7. Fortify Audit Workbench 笔记 Password Management: Password in Configuration File(明文存储密码)

    Password Management: Password in Configuration File(明文存储密码) Abstract 在配置文件中存储明文密码,可能会危及系统安全. Explana ...

  8. Fortify Audit Workbench 笔记 Command Injection(命令注入)

    Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Comman ...

  9. Fortify Audit Workbench 笔记 Path Manipulation

    Path Manipulation Abstract 通过用户输入控制 file system 操作所用的路径,借此攻击者可以访问或修改其他受保护的系统资源. Explanation 当满足以下两个条 ...

随机推荐

  1. JavaScript 的DOM操作及实例

    一.Windows对象操作 (1).用代码打开窗口:window.open("第一部分","第二部分","第三部分","第四部分& ...

  2. VS2010 常用的快捷键

    1.强迫智能感知:Ctrl+J:2.强迫智能感知显示参数信息:Ctrl-Shift-空格:3.格式化整个块:Ctrl+K+F4.检查括号匹配(在左右括号间切换): Ctrl +]5.选中从光标起到行首 ...

  3. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-openpyxl读取excel(14)

    从excel中读取数据 # -*- coding: utf-8 -*- # @Time : 2020/2/12 17:23 # @File : do_excel_openpyxl_14.py # @A ...

  4. cisco WLC开启portal认证,但是访问https无法跳转问题的解决

     config network web-auth https-redirect enable版本8,及以上才支持  官方文档: http://www.cisco.com/c/zh_cn/support ...

  5. JSF技术web.xml配置解析

    对Java tutorial-examples中jsf hell1的web.xml配置文件的解析 <?xml version="1.0" encoding="UTF ...

  6. js如何把a标签里面的值传递到函数里面

    ----------------------a标签如何定 如何传参到函数---------------------- 1.<a></a>标签 如何传参到函数 <a cla ...

  7. 初入 Ubuntu 的一些操作 · Lei's blog

    查看系统版本 cat /etc/os-release 修改 root 密码 passwd 新建用户 新建用户: adduser username 将新用户加入 sudo 组,这样就可以用 sudo 命 ...

  8. JXL包大解析;Java程序生成excel文件和解析excel文件内容

    最近需求变化,需要把excel导入 我以前没有做过,所以我查了一些资料 和参考别人的代码 以下是多种方式: import java.io.File; import java.io.FileInputS ...

  9. A Knight's Journey (DFS)

    题目: Background The knight is getting bored of seeing the same black and white squares again and agai ...

  10. Catch That Cow (BFS)

    题目: Farmer John has been informed of the location of a fugitive cow and wants to catch her immediate ...