高级PHP应用程序漏洞审核技术【一】
高级PHP应用程序漏洞审核技术【一】
目录
高级PHP应用程序漏洞审核技术【一】
本文章向大家介绍高级PHP应用程序漏洞审核技术【一】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
小编入门代码审计时看的几篇写的比较经典的PDF文档之一,分享出来希望能帮助到想学习代码审计的小伙伴。
一、前言 PHP是一种被广泛使用的脚本语言,尤其适合于web开发。具有跨平台,容易学习,功能强大等特点,据统计全世界有超过34%的网站有php的应用,包括Yahoo、sina、163、sohu等大型门户网站。而且很多具名的web应用系统(包括bbs,blog,wiki,cms等等)都是使用php开发的, Discuz、phpwind、phpbb、vbb、wordpress、boblog等等。随着web安全的热点升级,php应用程序的代码安全问题也逐步兴盛起来,越来越多的安全人员投入到这个领域,越来越多的应用程序代码漏洞被披露。
针对这样一个状况,很多应用程序的官方都成立了安全部门,或者雇佣安全人员进行代码审计,因此出现了很多自动化商业化的代码审计工具。也就是这样的形势导致了一个局面:大公司的产品安全系数大大的提高,那些很明显的漏洞基本灭绝了,那些大家都知道的审计技术都无用武之地了。我们面对很多工具以及大牛扫描过n遍的代码,有很多的安全人员有点悲观,而有的官方安全人员也非常的放心自己的代码,但是不要忘记了“没有绝对的安全”,我们应该去寻找新的途径挖掘新的漏洞。本文就给介绍了一些非传统的技术经验和大家分享。 另外在这里特别说明一下本文里面很多漏洞都是来源于网络上牛人和朋友们的分享,在这里需要感谢他们,:)
二、传统的代码审计技术 WEB应用程序漏洞查找基本上是围绕两个元素展开:变量与函数。也就是说一漏洞的利用必须把你提交的恶意代码通过变量经过n次变量转换传递,最终传递给目标函数执行,还记得MS那句经典的名言吗?“一切输入都是有害的”。这句话只强调了变量输入
很多程序员把“输入”理解为只是gpc[$_GET,$_POST,$_COOKIE],但是变量在传递过程产生了n多的变化。导致很多过滤只是个“纸老虎”!我们换句话来描叙下代码安全:“一切进入函数的变量是有害的”。 PHP代码审计技术用的最多也是目前的主力方法:静态分析,主要也是通过查找容易导致安全漏洞的危险函数,常用的如grep,findstr等搜索工具,很多自动化工具也是使用正则来搜索这些函数。下面列举一些常用的函数,也就是下文说的字典(暂略)。
但是目前基本已有的字典很难找到漏洞,所以我们需要扩展我们的字典,这些字典也是本文主要探讨的。 其他的方法有:通过修改PHP源代码来分析变量流程,或者hook危险的函数来实现对应用程序代码的审核,但是这些也依靠了我们上面提到的字典。
三、PHP版本与应用代码审计 到目前为止,PHP主要有3个版本:php4、php5、php6,使用比例大致如下:php4 68%2000-2007,No security fixes after 2008/08,最终版本是php4.4.9、php5 32%、2004-present,Now at version 5.2.6(PHP 5.3 alpha1 released!)php6、目前还在测试阶段,变化很多做了大量的修改,取消了很多安全选项如magic_quotes_gpc。(这个不是今天讨论的范围)
由于php缺少自动升级的机制,导致目前PHP版本并存,也导致很多存在漏洞没有被修补。这些有漏洞的函数也是我们进行WEB应用程序代码审计的重点对象,也是我们字典重要来源。
四、其他的因素与应用代码审计 很多代码审计者拿到代码就看,他们忽视了“安全是一个整体”,代码安全很多的其他因素有关系,比如上面我们谈到的PHP版本的问题,比较重要的还有操作系统类型(主要是两大阵营win/*nix),WEB服务端软件(主要是iis/apache两大类型)等因素。这是由于不同的系统不同的WEB SERVER有着不同的安全特点或特性,下文有些部分会涉及。 所以我们在做某个公司WEB应用代码审计时,应该了解他们使用的系统,WEB服务端软件,PHP版本等信息。
五、扩展我们的字典 下面将详细介绍一些非传统PHP应用代码审计一些漏洞类型和利用技巧。
5.1 变量本身的key 说到变量的提交很多人只是看到了GET/POST/COOKIE等提交的变量的值,但是忘记了有的程序把变量本身的key也当变量提取给函数处理。 --code------------------------------------------------------------------------- <?php //key.php?aaaa"aaa=1&bb"b=2 //print_R($_GET); foreach ($_GET AS $key => $value) { print $key."n"; } ?> ------------------------------------------------------------------------------- 上面的代码就提取了变量本身的key显示出来,单纯对于上面的代码,如果我们提交URL: --code------------------------------------------------------------------------- key.php?<script>alert(1);</script>=1&bbb=2 ------------------------------------------------------------------------------- 那么就导致一个xss的漏洞,扩展一下如果这个key提交给include()等函数或者sql查询呢?:) +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:通读代码 +++++++++++++++++++++++++
5.2 变量覆盖(variable-overwrite) 很多的漏洞查找者都知道extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指定函数可以导致变量覆盖,但是还有很多其他情况导致变量覆盖的如:
5.2.1 遍历初始化变量 请看如下代码: --code------------------------------------------------------------------------- <?php //var.php?a=fuck $a="hi"; foreach($_GET as $key => $value) { $$key = $value; } print $a; ?> ------------------------------------------------------------------------------- 很多的WEB应用都使用上面的方式(注意循环不一定是foreach),如Discuz!4.1的WAP部分的代码: --code------------------------------------------------------------------------- $chs = ""; if($_POST && $charset != "utf-8") { $chs = new Chinese("UTF-8", $charset); foreach($_POST as $key => $value) { $$key = $chs->Convert($value); } unset($chs); ------------------------------------------------------------------------------- +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:通读代码 +++++++++++++++++++++++++
5.2.2 parse_str()变量覆盖漏洞(CVE-2007-3205)、mb_parse_str() --code------------------------------------------------------------------------- //var.php?var=new $var = "init"; parse_str($_SERVER["QUERY_STRING"]); print $var; ------------------------------------------------------------------------------- 该函数一样可以覆盖数组变量,上面的代码是通过$_SERVER["QUERY_STRING"]来提取变量的,对于指定了变量名的我们可以通过注射“=”来实现覆盖其他的变量: --code------------------------------------------------------------------------- //var.php?var=1&a[1]=var1%3d222 $var1 = "init"; parse_str($a[$_GET["var"]]); print $var1; ------------------------------------------------------------------------------- 上面的代码通过提交$var来实现对$var1的覆盖。 +++++++++++++++++++++++++ 漏洞审计策略(parse_str) ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找字符parse_str +++++++++++++++++++++++++ +++++++++++++++++++++++++ 漏洞审计策略(mb_parse_str) ------------------------- PHP版本要求:php4<4.4.7 php5<5.2.2 系统要求:无 审计策略:查找字符mb_parse_str +++++++++++++++++++++++++
5.2.3 import_request_variables()变量覆盖漏洞(CVE-2007-1396) --code------------------------------------------------------------------------- //var.php?_SERVER[REMOTE_ADDR]=10.1.1.1 echo "GLOBALS ".(int)ini_get("register_globals")."n"; import_request_variables("GPC"); if ($_SERVER["REMOTE_ADDR"] != "10.1.1.1") die("Go away!"); echo "Hello admin!"; ------------------------------------------------------------------------------- +++++++++++++++++++++++++ 漏洞审计策略(import_request_variables) ------------------------- PHP版本要求:php4<4.4.1 php5<5.2.2 系统要求:无 审计策略:查找字符import_request_variables +++++++++++++++++++++++++
5.2.4 PHP5 Globals 从严格意义上来说这个不可以算是PHP的漏洞,只能算是一个特性,测试代码: --code------------------------------------------------------------------------- <? // register_globals =ON //foo.php?GLOBALS[foobar]=HELLO php echo $foobar; ?> ------------------------------------------------------------------------------- 但是很多的程序没有考虑到这点,请看如下代码: --code------------------------------------------------------------------------- //为了安全取消全局变量 //var.php?GLOBALS[a]=aaaa&b=111 if (ini_get("register_globals")) foreach($_REQUEST as $k=>$v) unset(${$k}); print $a; print $_GET[b]; ------------------------------------------------------------------------------- 如果熟悉WEB2.0的攻击的同学,很容易想到上面的代码我们可以利用这个特性进行crsf 攻击。 +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:通读代码 +++++++++++++++++++++++++ 5.3 magic_quotes_gpc与代码安全
5.3.1 什么是magic_quotes_gpc 当打开时,所有的 "(单引号),"(双引号),(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。还有很多函数有类似的作用 如:addslashes()、mysql_escape_string()、 mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤变量,这看上去很安全。很多漏洞查找者或者工具遇到些函数过滤后的变量直接就放弃,但是就在他们放弃的同时也放过很多致命的安全漏洞。 :)
5.3.2 哪些地方没有魔术引号的保护
1) $_SERVER变量 PHP5的$_SERVER变量缺少magic_quotes_gpc的保护,导致近年来X-Forwarded-For的漏洞猛暴,所以很多程序员考虑过滤X-Forwarded-For,但是其他的变量呢? +++++++++++++++++++++++++ 漏洞审计策略($_SERVER变量) ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找字符_SERVER +++++++++++++++++++++++++ 2) getenv()得到的变量(使用类似$_SERVER变量) +++++++++++++++++++++++++ 漏洞审计策略(getenv()) ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找字符getenv +++++++++++++++++++++++++
3) $HTTP_RAW_POST_DATA与PHP输入、输出流主要应用与soap/xmlrpc/webpublish功能里,请看如下代码: --code------------------------------------------------------------------------- if ( !isset( $HTTP_RAW_POST_DATA ) ) { $HTTP_RAW_POST_DATA = file_get_contents( "php://input" ); } if ( isset($HTTP_RAW_POST_DATA) ) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA); ------------------------------------------------------------------------------- +++++++++++++++++++++++++ 漏洞审计策略(数据流) ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找字符HTTP_RAW_POST_DATA或者php://input +++++++++++++++++++++++++
4) 数据库操作容易忘记"的地方如:in()/limit/order by/group by 如Discuz!<5.0的pm.php: --code------------------------------------------------------------------------- if(is_array($msgtobuddys)) { $msgto = array_merge($msgtobuddys, array($msgtoid)); ...... foreach($msgto as $uid) { $uids .= $comma.$uid; $comma = ","; } ...... $query = $db->query("SELECT m.username, mf.ignorepm FROM {$tablepre}members m LEFT JOIN {$tablepre}memberfields mf USING(uid) WHERE m.uid IN ($uids)"); ------------------------------------------------------------------------------- +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找数据库操作字符(select,update,insert等等) +++++++++++++++++++++++++
5.3.3 变量的编码与解码 一个WEB程序很多功能的实现都需要变量的编码解码,而且就在这一转一解的传递过程中就悄悄的绕过你的过滤的安全防线。 这个类型的主要函数有:
1) stripslashes() 这个其实就是一个decode-addslashes() 2) 其他字符串转换函数: base64_decode -- 对使用 MIME base64 编码的数据进行解码 base64_encode -- 使用 MIME base64 对数据进行编码 rawurldecode -- 对已编码的 URL 字符串进行解码 rawurlencode -- 按照 RFC 1738 对 URL 进行编码 urldecode -- 解码已编码的 URL 字符串 urlencode -- 编码 URL 字符串 ...... (另外一个 unserialize/serialize) 3) 字符集函数(GKB,UTF7/8...)如iconv()/mb_convert_encoding()等 目前很多漏洞挖掘者开始注意这一类型的漏洞了,如典型的urldecode: --code------------------------------------------------------------------------- $sql = "SELECT * FROM article WHERE articleid="".urldecode($_GET[id])."""; ------------------------------------------------------------------------------- 当magic_quotes_gpc=on时,我们提交?id=%2527,得到sql语句为: --code------------------------------------------------------------------------- SELECT * FROM article WHERE articleid=""" ------------------------------------------------------------------------------- +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找对应的编码函数 +++++++++++++++++++++++++
5.3.4 二次攻击(详细见附录[1]) 1) 数据库出来的变量没有进行过滤 2) 数据库的转义符号: * mysql/oracle转义符号同样是(我们提交"通过魔术引号变化为",当我们update进入数据库时,通过转义变为") * mssql的转义字符为"(所以我们提交"通过魔术引号变化为",mssql会把它当为一个字符串直接处理,所以魔术引号对于mssql的注射没有任何意义) 从这里我们可以思考得到一个结论:一切进入函数的变量都是有害的,另外利用二次攻击我们可以实现一个webrootkit,把我们的恶意构造直接放到数据库里。我们应当把这样的代码看成一个vul? +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:通读代码 +++++++++++++++++++++++++
5.3.5 魔术引号带来的新的安全问题 首先我们看下魔术引号的处理机制: [-->\,"-->","-->",null-->] 这给我们引进了一个非常有用的符号“”,“”符号不仅仅是转义符号,在WIN系统下也是目录转跳的符号。这个特点可能导致php应用程序里产生非常有意思的漏洞: 1) 得到原字符(",,",null]) --code------------------------------------------------------------------------- $order_sn=substr($_GET["order_sn"], 1); //提交 " //魔术引号处理 " //substr " $sql = "SELECT order_id, order_status, shipping_status, pay_status, ". " shipping_time, shipping_id, invoice_no, user_id ". " FROM " . $ecs->table("order_info"). " WHERE order_sn = "$order_sn" LIMIT 1"; ------------------------------------------------------------------------------- 2) 得到“”字符 --code------------------------------------------------------------------------- $order_sn=substr($_GET["order_sn"], 0,1); //提交 " //魔术引号处理 " //substr $sql = "SELECT order_id, order_status, shipping_status, pay_status, ". " shipping_time, shipping_id, invoice_no, user_id ". " FROM " . $ecs->table("order_info"). " WHERE order_sn = "$order_sn" and order_tn="".$_GET["order_tn"]."""; ------------------------------------------------------------------------------- 提交内容: --code------------------------------------------------------------------------- ?order_sn="&order_tn=%20and%201=1/* ------------------------------------------------------------------------------- 执行的SQL语句为: --code------------------------------------------------------------------------- SELECT order_id, order_status, shipping_status, pay_status, shipping_time, shipping_id, invoice_no, user_id FROM order_info WHERE order_sn = "" and order_tn=" and 1=1/*" ------------------------------------------------------------------------------- +++++++++++++++++++++++++ 漏洞审计策略 ------------------------- PHP版本要求:无 系统要求:无 审计策略:查找字符串处理函数如substr或者通读代码 +++++++++++++++++++++++++
5.3.6 变量key与魔术引号
我们最在这一节的开头就提到了变量key,PHP的魔术引号对它有什么影响呢?
--code-------------------------------------------------------------------------
<?php
//key.php?aaaa"aaa=1&bb"b=2
//print_R($_GET);
foreach ($_GET AS $key => $value)
{
print $key."n";
}
?>
-------------------------------------------------------------------------------
1) 当magic_quotes_gpc = On时,在php5.24下测试显示:
aaaa"aaabb"b从上面结果可以看出来,在设置了magic_quotes_gpc = On下,变量key受魔术引号影响。但是在php4和php<5.2.1的版本中,不处理数组第一维变量的key,测试代码如下:
--code-------------------------------------------------------------------------
<?php
//key.php?aaaa"aaa[bb"]=1
print_R($_GET);
?>
-------------------------------------------------------------------------------
结果显示:
Array ( [aaaa"aaa] => Array ( [bb"] => 1 ) )
数组第一维变量的key不受魔术引号的影响。
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:php4和php<5.2.1
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
2) 当magic_quotes_gpc = Off时,在php5.24下测试显示:
aaaa"aaabb"b对于magic_quotes_gpc = Off时所有的变量都是不安全的,考虑到这个,很多程序都通过addslashes等函数来实现魔术引号对变量的过滤,示例代码如下:
--code-------------------------------------------------------------------------
<?php
//keyvul.php?aaa"aa=1"
//magic_quotes_gpc = Off
if (!get_magic_quotes_gpc())
{
$_GET = addslashes_array($_GET);
}
function addslashes_array($value)
{
return is_array($value) ? array_map("addslashes_array", $value) : addslashes($value);
}
print_R($_GET);
foreach ($_GET AS $key => $value)
{
print $key;
}
?>
-------------------------------------------------------------------------------
以上的代码看上去很完美,但是他这个代码里addslashes($value)只处理了变量的具体的值,但是没有处理变量本身的key,上面的代码显示结果如下:
Array
(
[aaa"aa] => 1"
)
aaa"aa
+++++++++++++++++++++++++
漏洞审计策略
-------------------------
PHP版本要求:无
系统要求:无
审计策略:通读代码
+++++++++++++++++++++++++
相关文章:
高级PHP应用程序漏洞审核技术【一】
高级PHP应用程序漏洞审核技术【一】 目录 高级PHP应用程序漏洞审核技术【一】 本文章向大家介绍高级PHP应用程序漏洞审核技术【一】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参…...
适用于4D毫米波雷达的目标矩形框聚类
目录 一、前言 二、点云聚类分割 三、基于方位搜索L型拟合 四、评价准则之面积最小化 五、评价准则之贴合最大化 六、评价准则之方差最小化 一、前言 对于多线束雷达可以获取目标物体更全面的面貌,在道路中前向或角雷达可能无法获取目标车矩形框但可以扫到两边…...
[模版总结] - 树的基本算法1 - 遍历
树结构定义 一种非线性存储结构,具有存储“一对多”关系的数据元素集合 种类 General Tree TrieB/B 树二叉树 满/完满/完全二叉树 完美BT : 除了叶子结点外所有节点都有两个字节点,每一层都完满填充完全BT: 除最后一层以外其他每一层都完美…...
macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)
系统介绍 黑果魏叔11 月 10 日消息,今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新(内部版本号:23C5041e),本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…...
Docker进阶——再次认识docker的概念 Docker的结构 Docker镜像结构 镜像的构建方式
前言 在微服务大量应用的互联网时代,经常能看到docker的身影。作为docker的爱好者(在服务器安装MySQL,Redis。。。我用的都是docker),我也会持续深入学习和认识docker。 本篇博客再次介绍docker的基本概念࿰…...
postgis函数学习
1.特定功能的SQL 转为完整的json,前端调用用json_build_object、jsonb_agg等函数,处理mass_test表 select json_build_object(type,FetureCollection,features,jsonb_agg(st_asgeojson(mt.*)::json)) from mass_test mt获取图形边界范围的坐标 select…...
【Gradle-12】分析so文件和依赖的关系
1、前言 在包大小的占比中,so文件的占比往往是最高的,动辄几兆的大小多一个都会把包大小的指标打爆。 而在各厂商要求对手机CPU ARM架构进行分包适配的情况下,你更需要知道哪些依赖是没有适配v7a/v8a的,这将影响你的APP在应用市场…...
vue项目pdf文件的预览
1.下载 您可以在以下网址下载pdfjsLib:https://github.com/mozilla/pdf.js pdfjsLib是一个开源项目,您可以在GitHub上找到其源代码和相关资源。 2.放置文件位置 3.进入 在index.html引入 <script src"<% BASE_URL %>static/pdfjs-dist/b…...
企业计算机中了mkp勒索病毒怎么办,服务器中了勒索病毒如何处理
计算机技术的不断发展给企业的生产生活提供了极大便利,但也为企业带来了网络安全威胁。近期,云天数据恢复中心陆续接到很多企业的求助,企业的计算机服务器遭到了mkp勒索病毒攻击,导致企业的所有工作无法正常开展,给企业…...
Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5)
Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5) import android.content.ClipData import android.graphics.Canvas import android.graphics.Point import android.os.Bundle import android.util.Log import android.view.…...
1994-2021年分行业二氧化碳排放量数据
1994-2021年分行业二氧化碳排放量数据 1、时间:1994-2021年 2、来源:原始数据整理自能源年鉴 3、指标:统计年度、行业代码、行业名称、煤炭二氧化碳排放量、焦炭二氧化碳排放量、原油二氧化碳排放量、汽油二氧化碳排放量、煤油二氧化碳排放…...
如何进行Go程序的打包发布
上一篇,我们已经用GoLand开发了第一个程序Hello Kitty,接下去,我们将完成Go程序的打包发布。 执行: go build -x main.gogo build 和 go run 在编译过程中其实是差不多的,不同之处是 go build 会生成编译好二进制文件并删掉编译…...
python工具HIKVISION视频编码设备接入网关任意文件下载
python工具 构造payload /serverLog/downFile.php?fileName../web/html/serverLog/downFile.php漏洞证明 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何…...
[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型
一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器,允许我们链接和编排不同的模块。可以常…...
开发知识点-Ant-Design-Vue
Ant-Design-Vue a-input a-input Vue组件 a-spin 加载中的效果 data字段 mounted钩子函数 Ant Design Vue 组件库 list-type“picture-card” 上传的图片作为卡片展示 name show-upload-list action :beforeUpload“handleBeforeUpload” :headers“customHeaders” :disabl…...
2022最新版-李宏毅机器学习深度学习课程-P50 BERT的预训练和微调
模型输入无标签文本(Text without annotation),通过消耗大量计算资源预训练(Pre-train)得到一个可以读懂文本的模型,在遇到有监督的任务是微调(Fine-tune)即可。 最具代表性是BERT&…...
Android codec2 视频框架 之输入buffer
文章目录 输入端的内存管理输入数据包buffer结构体的转换 主要的流程如上, 申请内存在CCodecBufferChannel,申请之后回调到MediaCodec。然后应用从MediaCodec获取 将解码数据放到buffer中,CCodecBufferChannel在将这块buffer 送到componet模块…...
Python实现局部二进制算法(LBP)
1.介绍 局部二进制算法是一种用于获取图像纹理的算法。这算法可以应用于人脸识别、纹理分类、工业检测、遥感图像分析、动态纹理识别等领域。 2.示例 """ 局部二进制算法,计算图像纹理特征 """ import cv2 import numpy as np imp…...
如何评价现在的CSGO游戏搬砖市场
如何评价现在的csgo市场? 其实整个搬砖市场,现在已经变得乌烟瘴气,散发着“恶臭”。我个人非常鄙视那些虚有其表,大小通吃的做法,那些甚至连搬砖数据都看不懂的人,也出来吹嘘着“实力强大,经验丰…...
ResourceQuota对象在K8s上的说明
ResourceQuota资源对象的说明,以及在集群中的作用说明 定义说明 https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/ 集群中的资源组的划分和设计 在具有 32 GiB 内存和 16 核 CPU 资源的集群中,允许 A 团队使用 20 GiB 内存 和 10 核…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
