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

高级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应用程序漏洞审核技术【一】&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需要的朋友可以参…...

适用于4D毫米波雷达的目标矩形框聚类

目录 一、前言 二、点云聚类分割 三、基于方位搜索L型拟合 四、评价准则之面积最小化 五、评价准则之贴合最大化 六、评价准则之方差最小化 一、前言 对于多线束雷达可以获取目标物体更全面的面貌&#xff0c;在道路中前向或角雷达可能无法获取目标车矩形框但可以扫到两边…...

[模版总结] - 树的基本算法1 - 遍历

树结构定义 一种非线性存储结构&#xff0c;具有存储“一对多”关系的数据元素集合 种类 General Tree TrieB/B 树二叉树 满/完满/完全二叉树 完美BT : 除了叶子结点外所有节点都有两个字节点&#xff0c;每一层都完满填充完全BT&#xff1a; 除最后一层以外其他每一层都完美…...

macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)

系统介绍 黑果魏叔11 月 10 日消息&#xff0c;今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;23C5041e&#xff09;&#xff0c;本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…...

Docker进阶——再次认识docker的概念 Docker的结构 Docker镜像结构 镜像的构建方式

前言 在微服务大量应用的互联网时代&#xff0c;经常能看到docker的身影。作为docker的爱好者&#xff08;在服务器安装MySQL&#xff0c;Redis。。。我用的都是docker&#xff09;&#xff0c;我也会持续深入学习和认识docker。 本篇博客再次介绍docker的基本概念&#xff0…...

postgis函数学习

1.特定功能的SQL 转为完整的json&#xff0c;前端调用用json_build_object、jsonb_agg等函数&#xff0c;处理mass_test表 select json_build_object(type,FetureCollection,features,jsonb_agg(st_asgeojson(mt.*)::json)) from mass_test mt获取图形边界范围的坐标 select…...

【Gradle-12】分析so文件和依赖的关系

1、前言 在包大小的占比中&#xff0c;so文件的占比往往是最高的&#xff0c;动辄几兆的大小多一个都会把包大小的指标打爆。 而在各厂商要求对手机CPU ARM架构进行分包适配的情况下&#xff0c;你更需要知道哪些依赖是没有适配v7a/v8a的&#xff0c;这将影响你的APP在应用市场…...

vue项目pdf文件的预览

1.下载 您可以在以下网址下载pdfjsLib&#xff1a;https://github.com/mozilla/pdf.js pdfjsLib是一个开源项目&#xff0c;您可以在GitHub上找到其源代码和相关资源。 2.放置文件位置 3.进入 在index.html引入 <script src"<% BASE_URL %>static/pdfjs-dist/b…...

企业计算机中了mkp勒索病毒怎么办,服务器中了勒索病毒如何处理

计算机技术的不断发展给企业的生产生活提供了极大便利&#xff0c;但也为企业带来了网络安全威胁。近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了mkp勒索病毒攻击&#xff0c;导致企业的所有工作无法正常开展&#xff0c;给企业…...

Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图,Kotlin(5)

Android拖放startDragAndDrop拖拽Glide加载堆叠圆角图&#xff0c;Kotlin&#xff08;5&#xff09; 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、时间&#xff1a;1994-2021年 2、来源&#xff1a;原始数据整理自能源年鉴 3、指标&#xff1a;统计年度、行业代码、行业名称、煤炭二氧化碳排放量、焦炭二氧化碳排放量、原油二氧化碳排放量、汽油二氧化碳排放量、煤油二氧化碳排放…...

如何进行Go程序的打包发布

上一篇&#xff0c;我们已经用GoLand开发了第一个程序Hello Kitty,接下去&#xff0c;我们将完成Go程序的打包发布。 执行&#xff1a; go build -x main.gogo build 和 go run 在编译过程中其实是差不多的&#xff0c;不同之处是 go build 会生成编译好二进制文件并删掉编译…...

python工具HIKVISION视频编码设备接入网关任意文件下载

python工具 构造payload /serverLog/downFile.php?fileName../web/html/serverLog/downFile.php漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法而造成的任何…...

[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型

一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器&#xff0c;允许我们链接和编排不同的模块。可以常…...

开发知识点-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的预训练和微调

模型输入无标签文本&#xff08;Text without annotation&#xff09;&#xff0c;通过消耗大量计算资源预训练&#xff08;Pre-train&#xff09;得到一个可以读懂文本的模型&#xff0c;在遇到有监督的任务是微调&#xff08;Fine-tune&#xff09;即可。 最具代表性是BERT&…...

Android codec2 视频框架 之输入buffer

文章目录 输入端的内存管理输入数据包buffer结构体的转换 主要的流程如上&#xff0c; 申请内存在CCodecBufferChannel&#xff0c;申请之后回调到MediaCodec。然后应用从MediaCodec获取 将解码数据放到buffer中&#xff0c;CCodecBufferChannel在将这块buffer 送到componet模块…...

Python实现局部二进制算法(LBP)

1.介绍 局部二进制算法是一种用于获取图像纹理的算法。这算法可以应用于人脸识别、纹理分类、工业检测、遥感图像分析、动态纹理识别等领域。 2.示例 """ 局部二进制算法&#xff0c;计算图像纹理特征 """ import cv2 import numpy as np imp…...

如何评价现在的CSGO游戏搬砖市场

如何评价现在的csgo市场&#xff1f; 其实整个搬砖市场&#xff0c;现在已经变得乌烟瘴气&#xff0c;散发着“恶臭”。我个人非常鄙视那些虚有其表&#xff0c;大小通吃的做法&#xff0c;那些甚至连搬砖数据都看不懂的人&#xff0c;也出来吹嘘着“实力强大&#xff0c;经验丰…...

ResourceQuota对象在K8s上的说明

ResourceQuota资源对象的说明&#xff0c;以及在集群中的作用说明 定义说明 https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/ 集群中的资源组的划分和设计 在具有 32 GiB 内存和 16 核 CPU 资源的集群中&#xff0c;允许 A 团队使用 20 GiB 内存 和 10 核…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...