开发安全之:Database access control

Overview

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

Details

Database access control 错误在以下情况下发生: 1. 数据从一个不可信赖的数据源进入程序。 2. 这个数据用来指定 SQL 查询中主键的值。 在这种情况下,在 cancel.php 中第 64 行的 mysql_query() 使用该数据。

例 1:以下代码用到一个参数化指令,这个指令转义了元字符,以防止 SQL injection 漏洞,并构建和执行一个 SQL 查询。该 SQL 查询指令可以搜索与指定标识符 [1] 相匹配的清单。您可以从与当前被授权用户有关的所有清单中选择这些标识符。 ... $id = $_POST['id']; $query = "SELECT * FROM invoices WHERE id = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('ss',$id); $stmt->execute(); ... 问题在于开发者没有考虑到所有可能出现的 id 值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。 许多现代 Web 框架都会提供对用户输入执行验证的机制(包括 Struts 和 Struts 2)。为了突出显示未经验证的输入源,Fortify 安全编码规则包会对 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题动态重新调整优先级,即在采用框架验证机制时降低这些问题被利用的几率并提供指向相应证据的指针。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队开发了 Data Validation(数据验证)项目模板,该模板根据应用于输入源的验证机制按文件夹对问题进行了分组。

Recommendations

与其靠表示层来限制用户输入的值,还不如在应用程序和数据库层上进行 access control。任何情况下都不允许用户在没有取得相应权限的情况下获取或修改数据库中的记录。每个涉及数据库的查询都必须遵守这个原则,这可以通过把当前被授权的用户名作为查询语句的一部分来实现。

示例 2:以下代码实现的功能与Example 1 相同,但是附加了一个限制,以验证清单是否属于当前经过身份验证的用户。 ... $mysqli = new mysqli($host,$dbuser, $dbpass, $db); $userName = getAuthenticated($_SESSION['userName']); $id = $_POST['id']; $query = "SELECT * FROM invoices WHERE id = ? AND user = ?"; $stmt = $mysqli->prepare($query); $stmt->bind_param('ss',$id,$userName); $stmt->execute(); ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下防火墙相关命令整理

目录 一.前言二.相关命令整理 一.前言 这篇文章简单整理一下Linux系统中防火墙相关命令。 二.相关命令整理 开启防火墙 systemctl start firewalld关闭防火墙 systemctl stop firewalld重启防火墙 systemctl restart firewalld开机启用防火墙 systemctl enable firewall…

CTF CRYPTO 密码学-4

题目名称:奇怪的先生 题目描述: 描述:oss先生将三个培根的中间一只移到了左边,然后咬了一小口最后一根,说真好吃,真是个奇怪的先生! 密文:VlM5WnlXc0ZibEhmMmE1ZHYxMDlhVkdmMlk5WmtRPT0 分析 应该是根据题…

FFmpeg连载6-音频重采样

今天我们的实战内容是将音频解码成PCM,并将PCM重采样成特定的采样率,然后输出到本地文件进行播放。 什么是重采样? 所谓重采样,一句话总结就是改变音频的三元素,也就是通过重采样改变音频的采样率、采样格式或者声道数…

C# 生成指定长度的随机字符串

/// <summary> /// 生成指定长度的随机字符串 /// </summary> /// <param name"intLength">随机字符串长度</param> /// <param name"booNumber">生成的字符串中是否包含数字</param>…

力扣刷MySQL-第一弹(详细解析)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

uniCloud ---- uni-captch实现图形验证码

目录 用途说明 组成部分 目录结构 原理时序 云端一体组件介绍 验证码配置&#xff08;可选&#xff09;&#xff1a; 普通验证码组件 公共模块 云函数公用模块 项目实战 创建云函数 创建注册页 创建云函数 关联公用模块 uni-captcha 刷新验证码 自定义实现 验…

基于FPGAWS2812B的贪吃蛇方案设计(含源码)

第1章 基于FPGA&WS2812B的贪吃蛇方案设计 1.2 贪吃蛇游戏系统的功能需求分析 为了更好的实现我们的贪吃蛇游戏系统&#xff0c;我们需要对项目进行功能分析&#xff0c;利于我们对整个系统的分析、架构。 首先&#xff0c;对于整个游戏系统&#xff0c;我们需要界面来引…

用LED数码显示器伪静态显示数字1234

#include<reg51.h> // 包含51单片机寄存器定义的头文件 void delay(void) //延时函数&#xff0c;延时约0.6毫秒 { unsigned char i; for(i0;i<200;i) ; } void main(void) { while(1) //无限循环 { P20xfe; …

基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比(Matlab)

基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比&#xff08;Matlab&#xff09; 工程下载&#xff1a; HFSS的微带线特性阻抗仿真工程文件&#xff08;注意版本&#xff1a;HFSS2023R2&#xff09;&#xff1a; https://download.csdn.net/download/weixin_445…

stm32之SD(TF)卡、SDIO、FATFS的使用学习(笔记二)[接学习笔记一]

SD卡数据的写入或者读取&#xff0c;需要将数据写入SDIO的FIFO寄存器&#xff0c;然后通过FIFO寄存器进行数据的发送。FIFO寄存器是32位的寄存器&#xff0c;操作 SDIO_FIFO&#xff08;不论读出还是写入&#xff09;必须是以 4 字节对齐的内存进行操作&#xff0c;否则将导致出…

入门级的 DataV 教程,适用于 Vue 2

入门级的 DataV 教程&#xff0c;适用于 Vue 2。这个教程将指导您创建一个名为 datav-project 的 Vue 项目&#xff0c;并展示如何在其中使用 DataV。我们将从安装 Vue CLI 开始&#xff0c;然后创建项目&#xff0c;接着添加 DataV&#xff0c;并最后显示一个简单的数据可视化…

C++ 之LeetCode刷题记录(八)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 35. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;…

ubuntu 22.04 安装 device-tree-compiler (dtc)

网络上使用apt 安装都没用&#xff0c;提升各种以来。最后网络在ubuntu 官网找到了安装包&#xff0c;测试ok&#xff0c;分别是libfdt1_1.4.7-1_amd64.deb libfdt-dev_1.4.7-1_amd64.deb device-tree-compiler_1.4.7-1_amd64.deb 安装顺序也是按照这个顺序来&#xff1a;sudo…

x-cmd pkg | public-ip-cli - 公共 IP 地址查询工具

简介 public-ip-cli 是一个用 Javascript 编写的命令行工具&#xff0c;用于获取当前计算机或网络所使用的公共 IP 地址。 它可以让用户在命令行界面上查询 OpenDNS、Google DNS 和 HTTPS 服务的 DNS 记录以获取与互联网通信时所分配的公共 IP 地址。 首次用户 使用 x env us…

数据结构04附录01:字符串大写转小写[C++]

图源&#xff1a;文心一言 上机题目练习整理~&#x1f95d;&#x1f95d; 本篇作为字符串的代码补充&#xff0c;提供了3种&#xff08;差别并不大&#xff09;解法以及函数的详细解释&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 前文&#xff1a;&#x1f338;…

Flink学习

批处理和流处理的区别 批处理和流处理是数据处理的两种主要方式&#xff0c;它们在处理时间、数据量和处理方式上有一些不同。 处理时间&#xff1a; 批处理是在一段时间内收集的数据&#xff0c;然后进行处理&#xff0c;一般情况下&#xff0c;这些数据是静态的&#xff0c…

蓝桥杯 java 重复字符串

题目描述 * 如果一个字符串S恰好可以由某个字符串重复K次得到&#xff0c;我们就称S是K次重复字符串。 * 例如 abcabcabc 可以看作是 abc重复3次得到&#xff0c;所以 abcabcabc 是3次重复字符串。 * 同理 aaaaaa 既是2次重复字符串、又是3次重复字符串和6次重复字符串。 * 现在…

单片机常用的电子元器件基础

参考自B站该视频 1&#xff1a;电阻 贴片电阻的读取方式 四环电阻 2&#xff1a;电容 其他的电子元器件

c语言嵌套循环

c语言嵌套循环 c语言嵌套循环 c语言嵌套循环一、c语言嵌套循环格式二、嵌套循环案例九九惩罚口诀 一、c语言嵌套循环格式 for(初始值&#xff1b;表达式&#xff1b;表达式) {for&#xff08;初始值&#xff1b;表达式&#xff1b;表达式&#xff09;{代码} }int main() {for (…

宝塔发布网站问题汇总和记录

1、添加网站站点后打不开 解决办法&#xff0c;关闭防跨站攻击2 2、laravel项目部署到linux的时候出现The stream or file "/home/www/storage/logs/laravel.log" could not be opened in append mode 给目录加权限 chmod -R 777 storage 3、Class "Redis"…