news 2026/10/19 5:37:18

SSRF绕过与URL解析差异:攻防实战与防御方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SSRF绕过与URL解析差异:攻防实战与防御方案

如果你维护过任何一个“给用户一个输入框,后端帮忙请求URL”的功能,大概都和我一样有过被SSRF折腾到加班的经历。SSRF(Server-Side Request Forgery,服务端请求伪造)这个词在安全圈里不算新鲜,但每次以为把IP黑名单、域名校验、协议限制都做好了,总有人能掏出一种让你眼前一黑的绕过姿势。最近我把某SSRF专题知识库翻了个底朝天,又顺着代号O的资深研究员关于URL解析漏洞的研究思路重新梳理了一遍,发现真正的问题根本不是“你有没有做防护”,而是“你的防护到底在靠谁来解析URL”。

这篇文章我会从攻击面和URL解析差异讲起,结合一套可复现的本地实验环境,把自己的实操记录、绕过思路、修复方案和踩坑心得一次性写完。适合三类人看:一是写Web后端、开始关心请求安全性的工程师;二是做渗透测试或漏洞挖掘,想系统理解SSRF绕过点的安全从业者;三是纯粹想搞明白“一个URL而已,怎么会出这么多事”的好奇读者。内容会尽量说人话,但涉及到的协议细节和代码片段我不会省,因为省掉的恰恰是最容易让防护失效的地方。

1. 为什么URL解析会成为现代SSRF攻击的命门

1.1 服务器发起请求的本质:你以为的不是你以为的

先来还原一下攻击场景最底层的逻辑。一个存在SSRF的Web应用,本质上是允许用户控制某个“服务端发出去到URL”的输入,比如:

  • 图片缩略图服务:用户传一个图片URL,服务器读取后处理;
  • 接口回调配置:用户填一个回调地址,服务器向该地址推送事件;
  • 文档转换预览功能:用户上传一个文件,里面嵌入外部URL,服务器去拉取;
  • 代理/转发网关:用户提供一个目标地址,服务器代为访问。

在这些场景下,程序要做的事无非就是:拿到一个URL字符串,经过解析、校验、并发起请求。问题往往出在“校验时用的一套解析逻辑,和最后真正发起请求时用的另一套解析逻辑”不一致。这就好比快递收件时,前台小姐姐看了一遍地址觉得没问题,结果真正的快递员用地图软件导到的却是另一个地方,至于最后送到了哪,很可能连快递员自己都说不清。

安全防护要做的是“禁止请求内网地址”,最常见的做法是:把URL里的主机名提取出来,解析成IP,判断是不是内网段,如果是就拒绝。听起来简单,但这个“提取主机名并解析IP”的过程,在不同语言、不同库、甚至不同版本之间,结果可能完全不同。

1.2 传统防护为什么会频繁失灵

我搭过不少SSRF防护模型,也见过网上大量防护代码,坦白讲,绝大多数都能被找到绕过空间。常见的防护手段无非这么几类:

第一类是字符串黑名单过滤,比如屏蔽host为127.0.0.1、localhost、10.x.x.x等。这种最简单也最容易被绕过,因为URL可以用各种形式表达同一个目标地址。

第二类是正则提取host,再解析DNS做IP判断。这个看起来靠谱一些,但如果你用的正则只认://后面的标准host格式,那攻击者在URL结构上做点手脚,比如用反斜杠、额外@符、省略号、畸形端口等,就能让正则抓到的host跟实际请求的host不是同一个。

第三类是解析器+请求器分离的问题。校验用Node.js的URL库解析,请求用Python的requests或Go的net/http去执行,两个库对URL的理解存在差异,校验过了,实际请求却去了别的地方。这类问题隐蔽性极强,而且很难通过“多写几条黑名单规则”来堵住,因为你根本不知道运行时的真实行为是什么样的。

我记得代码O的研究里有一张非常经典的对比图,把同一段URL扔给各种解析器和HTTP客户端,得到的scheme、host、port、path各不相同。有的认为@前面是用户名,有的认为@后面才是主机;有的把\当作路径分隔符,有的直接当作非法字符报错;有的会对IPv4地址做进制转换,导致你以为是一个域名,实际请求是内网IP。正是这些细节拼出了现代SSRF攻击最宽的绕过面。

2. 核心细节:解析器差异造就的绕过矩阵

2.1 同一段URL,不同“视力”的解析器

我在实验里会反复做一件很枯燥但极有价值的事:把同一个URL字符串喂给不同的解析函数,打印出它们各自理解的scheme、host和port。先看一组例子,假设目标应用验证逻辑只检查host是否解析到内网IP,我们用http://example.com@127.0.0.1:8080/admin这个URL来看:

  • Python的urllib.parse.urlparse认为host是127.0.0.1,example.com是用户名信息;
  • Go的net/url也基本这样解析,会忽略@前的部分;
  • Node.js的new URL()同样会把@前当作用户名,但在部分场景下对空格、反斜杠的处理又不一样;
  • Java的java.net.URI在某些特殊格式下会直接判定URL不合法,而底层HTTP连接器却偷偷换了一套解析逻辑。

如果校验只看了example.com(比如自己写了个正则,取@后面的部分有偏差),那最后发出的请求很可能直接打到了127.0.0.1上。这不是危言耸听,我在不少开源项目的代码评审里都见到过类似的坑。

更有意思的是,即使大家都正确地把@后面的127.0.0.1当作host,攻击者还能用另一种思路:把IP换成“看起来不像IP但解析后就是内网IP”的写法。常见的有:

  • 十进制整数IP:http://2130706433/,这个数字换算成十六进制是0x7F000001,即127.0.0.1;
  • 十六进制IP:http://0x7f000001/;
  • 八进制IP:http://0177.0.0.1/;
  • IPv6内联:http://[::1]:8080/;
  • 混合进制、省略前导零等。

这些写法很多开发者一辈子都没见过,但HTTP客户端基本都能理解,而且没有哪条黑名单能穷举完所有变体。唯一的出路不是增加黑名单,而是改变判断逻辑本身。

2.2 反斜杠、空格与无法预料的分隔符

URL标准里正斜杠/是路径分隔符,但很多现实系统中的HTTP客户端对反斜杠\也给予极度的宽容。OWASP上收录过不少利用反斜杠绕过SSRF防护的案例,比如:

http://evil.com\@192.168.0.1/ http://192.168.0.1\@evil.com/

第一种,有的解析器把\当作普通字符或路径分隔符,于是host变成了evil.com\@192.168.0.1,校验时可能因为这个host不存在或不在黑名单里就放行了,但底层请求库在拼接连接时识别出192.168.0.1,最终把请求发到了内网。

第二种,某些解析器在host字段遇到反斜杠时,会从@位置提取主机,或直接忽略掉@前的部分,导致实际host变成192.168.0.1。

还有一类问题是空格和TAB(水平制表符)。URL标准不允许host里出现空格,但一些宽松的解析器会用“在第一个分隔符处截断”的策略。比如http://evil.com /192.168.0.1/,校验系统提取到的host可能是evil.com,而有些HTTP库在连接时会尝试多种解析,最终请求到了192.168.0.1。这类攻击利用的是“解析器的容错能力”,我们越希望程序处理畸形输入时不要崩溃,就越可能在安全边界上打开一道门。

2.3 解析与请求分离:防护失效的最大推手

我接手过一套某跨平台系统,后台用Java做业务逻辑,用Node.js做图片代理转发服务。系统最初的SSRF防护是在Java侧校验完URL之后,再把整条URL传给Node.js去请求。结果我发现,Java侧认为合法的http://example.com\@127.0.0.1:8080/,到了Node.js侧被解析成了对loopback地址的请求。典型的解析器与请求器分离问题。

这类问题的根源在于,任何SSRF防护方案都隐含这样一个假设:校验方对URL的理解和真正发请求的模块完全一致。但这个假设在工程实践中几乎从不成立。不同语言对URI规范的支持程度不一样,有的严格遵循RFC,有的会主动修正用户输入,有的为了兼容老系统还会把非法字符尽最大努力“猜”成合法结构。于是“校验通过”和“请求到达内网”这两件事可以同时成立。

所谓前沿研究,在我看来核心就是:把“解析器差异”本身当成一种攻击面来系统化建模。O研究员发表的几篇分析里,把不同语言、不同库、不同操作系统下的解析结果做成映射关系,从中找组合偏差。这不是为了炫技,而是告诉我们,要想真正防住现代SSRF,必须统一“校验解析”和“实际请求解析”,否则任何防护都等于在沙子上盖楼。

3. 实操:搭建一套可复现的SSRF绕过实验环境

3.1 靶场结构与防护模型设计

为了把前面的理论落到地面上,我搭了一个非常轻量的模拟项目X,用来复现SSRF绕过过程。整个环境可以跑在本地Docker里,不需要任何外部依赖,全部用假域名、假服务来模拟,目的是让我们安全地观察“同一个URL在不同环节里被谁理解成了什么”。

靶场有两个角色:

  • 目标应用:一个提供“URL预览”功能的Web服务,接收url参数,后端校验后请求该地址并返回响应内容。
  • 内网模拟服务:监听127.0.0.1:8080的假服务,路径/flag返回一串标记字符串,用来证明SSRF请求确实打到了“不应该到达”的内部地址。

目标应用的校验逻辑我故意写成很多项目里最常见的样子:

  1. 从URL中提取host;
  2. 用gethostbyname解析host得到IP;
  3. 判断IP是否属于私网段/本机段;
  4. 若不在黑名单内,则将URL交给后端HTTP客户端请求。

实验用两个不同语言写的HTTP客户端轮流作为“真正发起请求”的模块,观察同一串URL在防护代码和实际请求代码之间的偏差。

3.2 绕过一:反斜杠与@的组合

第一步实验很简单,请求:

http://target.local/url?url=http://fake.com\@127.0.0.1:8080/flag

目标应用的校验代码如果使用Python标准库的urlparse来提取host,它会认为整个fake.com\@127.0.0.1:8080都是host的部分(因为不认反斜杠),gethostbyname可能解析失败或得到空结果,于是默认放行。随后如果真正的HTTP客户端是某语言里的宽松实现,它会把\当作host和path之间的分隔符,实际请求目标变成127.0.0.1:8080/flag。

实测下来,我们确实在响应里看到了内网服务的flag内容。这个绕过成功率跟具体的HTTP客户端解析策略强相关,但恰恰因为“复杂系统里没人能保证每个模块都严格一致”,你依然能在真实项目中找到可打的点。

提示:这类实验建议在完全隔离的本地网络中进行,不要拿任何线上系统当目标。安全研究的第一原则永远是授权和隔离。

3.3 绕过二:进制变体与IPv6地址

第二个实验把所有私网地址的常见变体都试了一遍:

  • http://2130706433:8080/flag(127.0.0.1的十进制形式)
  • http://0x7f000001:8080/flag(十六进制形式)
  • http://0177.0.0.1:8080/flag(八进制形式)
  • http://[::ffff:127.0.0.1]:8080/flag(IPv6映射形式)

我们用校验脚本对前的host做gethostbyname解析,结果发现:2130706433这种字符串在部分系统上会被直接视为“未知主机名”,解析失败后校验逻辑直接跳过;但HTTP客户端却明确把它当作IPv4地址处理。于是又一次绕过成功。

这类问题提醒我们:不要指望靠“判断解析出的IP是否内网”来防住所有写法,因为很多表示形式在校验阶段根本解不出IP来。真正的做法应该是“禁止非预期IP格式的host”,而不是“能解析出IP再判断”。

3.4 绕过三:DNS重绑定与多次解析

第三个实验需要一点条件:一个可控域名,首次解析返回公网IP,第二次解析返回内网IP。这就是经典的DNS rebinding(DNS重绑定)。攻击手法是:让目标应用的校验阶段解析域名时得到公网地址,通过校验;实际请求阶段再次解析时,DNS服务器返回内网地址,请求便打到内网。

我搭建了一个本地模拟DNS服务,配置一条记录在TTL很短的情况下交替返回203.0.113.1和127.0.0.1。目标应用调用gethostbyname拿到第一次结果(公网IP),然后立即用HTTP客户端请求同一个域名。由于两次DNS解析之间没有做缓存一致性约束,第二次请求直接连接内网。

这类攻击用“IP黑名单+域名解析校验”几乎无法彻底防御,因为你校验的IP和实际连接的IP根本不是同一次解析结果。这也是为什么现在很多SSRF防护库要求“解析域名后锁定IP,再使用该IP发起请求”,而不是让底层HTTP客户端自己去再解析一次。

3.5 修复实验:统一解析器后的效果

实验的最后,我重写了目标应用的校验逻辑:

  1. 使用和实际HTTP客户端完全相同的URL解析器来提取host;
  2. 不直接信任host字符串,先在协议层做规格化处理,拒绝任何包含反斜杠、多余@、非常规端口、非十进制IDN字符等畸形输入;
  3. 对所有不是标准十进制点分IPv4或标准小写域名的host直接拒绝;
  4. 设置“先解析一次得到IP并锁定”,在锁定的IP上发起请求,不允许二次解析;
  5. 加一层防火墙级别的出网限制,使应用服务器根本发不出到私网地址的请求。

修复后,之前的三类绕过实验全部失败。这说明SSRF的根本缓解方案不是“塞更多的黑名单”,而是从架构上消除校验与实际请求之间的不一致性,并把网络出口收掉。最有效的一招永远是你让应用根本没有发往内网的能力,而不是靠代码一层层地去“拦”。

4. 现代SSRF攻击的进阶利用思路

4.1 从URL解析漏洞到内网横向的开始

很多人以为SSRF攻击的终点就是看到/flag字符串,其实不是。现代攻击里,SSRF更多地被当作“跳板”和“探测工具”。URL解析漏洞只是第一层门,一旦跨过,攻击者可以利用服务器请求能力去探测内网端口、读取云元数据、访问内部管理接口,甚至借助gopher等协议去攻击内网里基于文本协议的服务。

我参与过的某次授权渗透测试里,目标系统对URL的过滤已经做得不错,黑名单规则覆盖了常见IP变体,但攻击者发现一个特殊字符组合可以让校验器误判host,从而请求到内网的192.168.10.23:6379(一个很常见的缓存数据库服务)。进一步利用后,通过该服务协议拼接恶意指令,直接在内网机器上写入了数据。整个过程如果只盯着“URL解析”这一层,可能会觉得只是一个校验绕过,但放到真实攻击链里,就成为横向渗透的起点。

因此,防御SSRF时也要带着攻击链思维,不要在URL请求这一层被绕过后就觉得大势已去,而要确保内网中其他服务也具备足够的鉴权和隔离。SSRF缓解跟内网安全形势是强关联的,没有哪个系统能靠一个层的校验就达到绝对安全。

4.2 云环境与文件协议带来的额外攻击面

现代Web应用大量部署在云主机上,附近往往有各种管理后台、元数据服务和对象存储接口。如果SSRF能访问这些地址,后果堪比直接交出服务器控制权。我不打算展开具体的厂商服务细节,只提一个思路:很多云环境里有一个特殊IP地址专门提供实例元数据,如果攻击者让服务端请求该地址,可能会读取到临时密钥、实例ID、网络配置甚至用户数据。

另外,部分后端支持file://、gopher://、dict://等非HTTP协议。就算HTTP端口访问被防火墙限制,如果协议没限制死,攻击者完全可以用file:///etc/passwd读取本地文件。我在自己维护的防护方案里有一个原则:只要业务不需要,就在协议层面把白名单之外的scheme全部拒绝。这是成本最低、见效最快的防线。

4.3 URL解析研究对防护体系的启发

O研究员的文章让我印象最深的不只是那些绕过payload,而是他把“解析器差异”上升到了“标准映射”的高度。你可以维护一个属于自己技术栈的对照表:列表左边是所有可能进入业务系统的URL来源与参数位置,右边是真正发出连接请求的底层库解析行为。每次升级依赖库、更换网络组件都要重新核对一次这个表,因为解析行为很可能在库版本之间悄悄变化。

这一点在我实际做安全评审时帮助极大。以前我评审SSRF防护代码,会盯着黑名单正则是怎么写的,有没有漏掉0x7f000001;现在我会先问一个问题:这个字段最终会被哪个模块的哪个函数消费,那个函数对输入的容忍度有多高。因为攻击者不是在和“业务代码”对抗,而是在和“所有可能解析这个URL的库的组合”对抗。

5. 防御视角:从代码审计到运行时加固

5.1 开发阶段:统一解析、收紧协议、拒绝畸形输入

开发新功能时,最好把“URL对外请求”封装成唯一出口函数,所有业务方都只能通过这个函数发起请求。这个函数内部做好:

  • 用白名单协议限制(默认仅允许http和https);
  • 对URL字符串做严格解析,使用与底层HTTP客户端完全一致的解析器,有条件的话直接使用该客户端自带的解析结果做校验;
  • 规范化host表示,把百分比编码、进制变化、IPv6映射等统一转换成标准形式再判断;
  • 拒绝任何host中包含@、反斜杠、空格、控制字符、非标准端口的输入,除非业务确实需要支持,那就得额外走审批流程。

还要注意一个细节:校验和请求之间不能有“时间差”和“对象差”。如果校验时解析一次得到IP,请求时又让底层库重新解析一次域名,DNS重绑定的攻击面就一直存在。正确做法是把解析得到的IP锁进连接对象,请求时强制使用该IP,同时保留原始host用于HTTP头里的Host字段。

5.2 运行时加固:出网即治理

运行时最有效的兜底策略是网络层的出网访问控制。如果应用服务器根本不能连接私网地址,那前面所有绕过都打不出伤害。不要只在应用层做IP判断,而是在防火墙或安全组上,把应用服务器到目标网段的访问全部断掉,只放行允许的域名和CDN地址。这个属于基础设施治理,单靠开发团队很难推动,但一旦推动成功,安全效果是质的提升。

在云环境里,优先把工作负载放到无公网IP的子网里,出网统一经过代理,由代理做域名白名单和协议限制。这样即使业务应用被绕过,攻击者拿到的也只是代理允许范围内的一小部分网络能力。

5.3 安全测试阶段:用对照表驱动用例设计

我建议每个团队都把自己技术栈里的“URL解析对照表”做成测试用例的输入源。不要只测一条/etc/passwd、一个127.0.0.1就收工,那只能证明防护对已知的100个绕过的某种成立。把那条完整的SSRF绕过矩阵跑一遍,包括反斜杠、@、进制IP、IPv6、特殊协议、编码、DNS多次解析模拟,全部写进自动化测试里。

在我自己运行的某开源扫描器里,就是把这些绕过样本全部做成可重复执行的用例,每次CI跑完看防护是否仍然成立,一旦有依赖库版本变化导致解析行为不同,安全测试就会立刻告警。防御不是一次性工作,是需要跟依赖演进不断对齐的长期状态。

6. 常见问题与排查技巧实录

6.1 常见问题速查

现象可能原因排查要点
校验时host解析为公网,但实际请求到达内网两次DNS解析结果不一致,或解析器与请求器不一致对比校验时解析结果与底层请求自带的解析逻辑
黑名单里写了127.0.0.1但请求仍打到本机攻击者使用了进制、IPv6、省略写法等变体用规范化的IP工具统一格式后再判断
file://协议绕过HTTP限制读取文件协议白名单没生效,或后端多协议支持限制协议白名单,拒绝默认的非HTTP scheme
前端校验通过,后端仍然失败前后端使用不同语言/解析库建立解析对照表,保持前后端一致或后端严格兼容
一次请求明明没问题,但换个网络环境就绕过DNS TTL或域名解析策略差异在连接层锁定IP,禁止二次解析
某些字符在日志里显示为乱码,但请求正常发出字符编码被宽松处理检测URL中的非ASCII字符,严格限制编码范围

6.2 我在实践里踩过的一些坑

第一个坑是高估了标准库的“标准性”。刚开始我默认Python的urllib解析结果可以作为所有请求链路的基准,结果发现底层HTTP库用的是一套更宽松的C解析逻辑,反斜杠绕过在我自己的项目里真实存在。后来我决定放弃“用一个库代表所有行为”的想法,所有校验都基于最终发出请求的那个客户端内部解析结果。

第二个坑是忽略了下游服务对URL的二次处理。有一次我们在代理层把URL校验好了,但后端业务为了做页面展示,对URL做了拼接、改写、解码,结果拼出一个新的危险URL。防御方需要关注URL在整个生命周期里的每一次变化,而不是只盯着入口校验。

第三个坑是DNS解析缓存。我在本地实验时加了比较激进的缓存配置,导致DNS重绑定实验一直复现不出来。排查了很久才发现是缓存把第二次解析结果给吞了。做攻击复现和做防御验证都要注意缓存策略,别在错误环境下得出结论。

第四个坑是在自动化测试里用真实域名做样本。真实域名容易超时、失效、甚至被重定向到危险地址,不如完全自建本地模拟环境,用Docker起几个可控服务,让样本始终可复现。

6.3 排查工具与调试思路

我调试这类问题通常三步走。第一步,抓包或者用HTTP客户端把实际发出去的连接目标打印出来。不要只看业务日志,很多库会在内部做跳转,最终连接的目标和日志里记录的初始URL根本不是同一个。第二步,用同一段URL在多个解析器里跑一遍,把结果对比输出。这个动作极其简单,但经常能一秒定位到责任方。第三步,从网络层看出口连接,如果应用已经部署到环境里,直接在服务器上观察出网连接的目标地址和端口,比对请求链路上的决策结果。

这套排查思路我用了很久,基本覆盖了90%以上的SSRF防护失效问题。它也能帮你在代码评审阶段发现那些“看起来很安全,实际一跑就绕”的隐藏缺陷。

7. 从我自己的经验看,这个方向还能挖到很多值得做的事

研究这类问题越深,我越觉得真正的护城河不是某一条绕过payload,而是“对自己技术栈里所有URL消费方的行为建模能力”。每当我看到一个新的库版本或者新的网络组件,第一反应不是去看API文档,而是先扔一把畸形URL进去看看它对host、scheme、路径的容忍度。这个习惯帮我提前规避过很多问题。

如果你想在团队里推动SSRF防护落地,可以从一个很小的动作开始:把现有所有出网请求的入口统一收口,然后在入口里加一条最基础的协议白名单和host规范化检查,最后在CI里加入一条包含10种绕过样本的自动化用例。不需要一开始就追求完美,先让绕过成本变高,再慢慢追随前沿研究里的解析差异对照来补齐。

最后分享一个小技巧:我自己维护了一份“解析器行为对照表”,每半年重新测一轮。这个表不光是给自己看的,还会在每次代码评审时贴在显著位置,提醒自己和团队——我们写的每一行校验代码,最终都要在某个具体的解析器里执行,而那个解析器可能有自己的脾气。安全边界只有在“所有组件都按同一种逻辑理解URL”时才是真实存在的,这也是现代SSRF攻击研究留给所有防御者的核心启示。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 5:37:04

VS Code插件目录迁移指南:释放C盘空间的三种有效方案

VS Code 的插件路径平时根本没人看,直到有一天你发现 C 盘莫名其妙少了几个 G,打开磁盘清理一盘,用户目录下的 .vscode 文件夹居然膨胀到了十几 G。我见过不少同事遇到这种情况:明明代码工程都放在其他盘,C 盘还是隔三…

作者头像 李华
网站建设 2026/10/19 5:36:09

编译原理语法分析:从CFG理论到工程级错误恢复实战

1. 项目概述:为什么“语法”是编译原理里最常被低估的硬核关卡刚接触编译原理的人,十有八九会把注意力全砸在“词法分析”和“语义分析”上——前者像查字典,后者像解数学题,听着就带感;而“语法”这个词,表…

作者头像 李华
网站建设 2026/10/19 5:35:57

SpringBoot+Vue办公用品直售系统:完整前后端分离实战

简介:一份基于JAVASpringBootVueMySQL的日常办公用品直售系统完整项目,面向高校学生及开发者,适合作为毕业设计、课程设计或期末大作业参考,也可作为前后端分离开发的学习范例。包内整合了项目源码、数据库脚本、开发工具及构建运…

作者头像 李华
网站建设 2026/10/19 5:35:26

AI接入自动化测试必须先做能力对齐与契约化设计

1. 这不是加个API调用那么简单:为什么AI接入自动化测试必须先做“能力对齐”“想让你的自动化测试接入AI,这一步必须要有。”——这句话在最近几个技术群和内部分享会上被反复提起,但很多人听完就去翻文档、查SDK、试调用接口,结果…

作者头像 李华
网站建设 2026/10/19 5:35:22

C# WebAPI 连接 SQL Server 实战:从 Demo 到生产避坑指南

简介:这份 C# WebAPI 示例代码面向具备一定 .NET 基础的开发者,用于快速理解基于 ASP.NET 构建 RESTful 风格 HTTP 服务的完整流程,并演示如何与 SQL Server 数据库进行数据交互。示例涵盖 ApiController 控制器编写、HttpGet/HttpPost 等 HT…

作者头像 李华
网站建设 2026/10/19 5:35:00

面向大模型API场景的蜜罐系统设计与实现

这三四个月做的最有意思的一个内部项目,就是标题里这个“面向大模型API场景的蜜罐系统”。接了需求的时候我心里嘀咕了一句:现在连大模型API都需要养个假系统来钓鱼了?但等我翻完线上网关的访问日志,我承认,确实需要&a…

作者头像 李华