<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>文章 on Dan`s Blog</title>
		<link>https://blog.dansec.vip/post/</link>
		<description>Recent content in 文章 on Dan`s Blog</description>
		<generator>Hugo</generator>
		<language>zh-CN</language>
		
		
		
		
			<lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0800</lastBuildDate>
		
			<atom:link href="https://blog.dansec.vip/post/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>大模型学习笔记2：链式法则、矩阵与反向传播</title>
				<link>https://blog.dansec.vip/p/ai-study-2/</link>
				<pubDate>Sun, 29 Mar 2026 00:00:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/ai-study-2/</guid>
				<description>&lt;p&gt;本文用于解决上篇文章的遗留问题&lt;/p&gt;&#xA;&lt;h1 id=&#34;简单回顾一下&#34;&gt;简单回顾一下&lt;/h1&gt;&#xA;&lt;p&gt;如果想要知道&lt;em&gt;&lt;strong&gt;期望输出&lt;/strong&gt;&lt;/em&gt; &lt;span class=&#34;math-inline&#34; data-reader-math&gt;&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;/mrow&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;/span&gt; 和&lt;em&gt;&lt;strong&gt;模型的真实输出&lt;/strong&gt;&lt;/em&gt; &lt;span class=&#34;math-inline&#34; data-reader-math&gt;&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mover accent=&#34;true&#34;&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;^&lt;/mo&gt;&lt;/mover&gt;&lt;/mrow&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;/span&gt; 差，就使用如下公式，这个叫做 Loss&lt;/p&gt;&#xA;&lt;div class=&#34;math-block&#34; data-reader-math&gt;&lt;span class=&#34;katex&#34;&gt;&lt;math xmlns=&#34;http://www.w3.org/1998/Math/MathML&#34; display=&#34;block&#34;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;mi&gt;o&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo stretchy=&#34;false&#34;&gt;(&lt;/mo&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mover accent=&#34;true&#34;&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;^&lt;/mo&gt;&lt;/mover&gt;&lt;msup&gt;&lt;mo stretchy=&#34;false&#34;&gt;)&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&#xA;如果想要知道&lt;em&gt;&lt;strong&gt;某个参数&lt;/strong&gt;&lt;/em&gt;应该往哪个方向变，变多少，即计算变化率(坡度)，则使用求导的方式，得到&lt;/p&gt;</description>
			</item>
			<item>
				<title>信任的代价：我眼中一部 XSS 攻防二十五年的演进史</title>
				<link>https://blog.dansec.vip/p/%E4%BF%A1%E4%BB%BB%E7%9A%84%E4%BB%A3%E4%BB%B7%E6%88%91%E7%9C%BC%E4%B8%AD%E4%B8%80%E9%83%A8-xss-%E6%94%BB%E9%98%B2%E4%BA%8C%E5%8D%81%E4%BA%94%E5%B9%B4%E7%9A%84%E6%BC%94%E8%BF%9B%E5%8F%B2/</link>
				<pubDate>Tue, 24 Mar 2026 00:00:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/%E4%BF%A1%E4%BB%BB%E7%9A%84%E4%BB%A3%E4%BB%B7%E6%88%91%E7%9C%BC%E4%B8%AD%E4%B8%80%E9%83%A8-xss-%E6%94%BB%E9%98%B2%E4%BA%8C%E5%8D%81%E4%BA%94%E5%B9%B4%E7%9A%84%E6%BC%94%E8%BF%9B%E5%8F%B2/</guid>
				<description>&lt;h1 id=&#34;信任的代价我眼中一部-xss-攻防二十五年的演进史&#34;&gt;信任的代价：我眼中一部 XSS 攻防二十五年的演进史&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&amp;ldquo;所有注入漏洞的本质，都是语义歧义——&lt;br&gt;&#xA;同一段数据，在不同的解析上下文中，被赋予了截然不同的含义。&lt;br&gt;&#xA;防御的本质，是在数据越过上下文边界的那一刻，消除这种歧义。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>大模型学习笔记：从 Loss 到梯度下降</title>
				<link>https://blog.dansec.vip/p/ai-study/</link>
				<pubDate>Mon, 23 Mar 2026 17:40:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/ai-study/</guid>
				<description>&lt;p&gt;废话不多说，直接开始吧&lt;/p&gt;&#xA;&lt;p&gt;本文面向的是笔者自己和一些了解大模型的一大堆基础概念，但是从来没有穿起过的，想要学习的读者&lt;/p&gt;&#xA;&lt;p&gt;作者读文献 English 和 中文 语言系统混了，不要介意（4级难度）&lt;/p&gt;</description>
			</item>
			<item>
				<title>智力的本质：找规律</title>
				<link>https://blog.dansec.vip/p/iq/</link>
				<pubDate>Mon, 23 Mar 2026 17:40:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/iq/</guid>
				<description>&lt;p&gt;笔者有感而发，当做乐子看看&lt;/p&gt;&#xA;&lt;h1 id=&#34;背景&#34;&gt;背景&lt;/h1&gt;&#xA;&lt;p&gt;又一次校招来临，每年这段时间都会有很多学生往好岗位挤&lt;/p&gt;&#xA;&lt;p&gt;如果你有幸校招过，你会发现一个很奇怪的，或者已经奇怪到习以为常的事情：&lt;/p&gt;</description>
			</item>
			<item>
				<title>语言的边界：从 SQL 注入到大模型安全的范式转移</title>
				<link>https://blog.dansec.vip/p/%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BE%B9%E7%95%8C%E4%BB%8E-sql-%E6%B3%A8%E5%85%A5%E5%88%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%AE%89%E5%85%A8%E7%9A%84%E8%8C%83%E5%BC%8F%E8%BD%AC%E7%A7%BB/</link>
				<pubDate>Wed, 11 Feb 2026 10:00:30 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BE%B9%E7%95%8C%E4%BB%8E-sql-%E6%B3%A8%E5%85%A5%E5%88%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%AE%89%E5%85%A8%E7%9A%84%E8%8C%83%E5%BC%8F%E8%BD%AC%E7%A7%BB/</guid>
				<description>&lt;p&gt;作为一名安全工程师，在处理漏洞的过程中，我始终认为&lt;strong&gt;安全的本质是对边界的定义与捍卫&lt;/strong&gt;。而语言，正是构建这些边界的基石。&lt;/p&gt;&#xA;&lt;p&gt;从早期的 SQL 注入到如今的大模型（LLM）Prompt Injection，表面上看是攻击手法的演变，实则是计算架构从&lt;strong&gt;确定性(Deterministic)&lt;/strong&gt; 向 **概率性(Probabilistic)**迁移时，语言边界控制权的根本性丧失。&lt;/p&gt;</description>
			</item>
			<item>
				<title>URL 中的 # 号去哪了？从 Burp 抓包报错说起</title>
				<link>https://blog.dansec.vip/p/urlstudy/</link>
				<pubDate>Thu, 25 Dec 2025 04:34:24 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/urlstudy/</guid>
				<description>&lt;h2 id=&#34;一-问题背景&#34;&gt;一、 问题背景&lt;/h2&gt;&#xA;&lt;p&gt;在最近的一次测试（&lt;del&gt;实则几年前&lt;/del&gt;）中，我发现了一个有趣的现象，并用 Burp Suite 进行验证时产生了新的疑问：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;浏览器的“隐形”行为&lt;/strong&gt;：当我使用浏览器访问带有 &lt;code&gt;#&lt;/code&gt; 的 URL 时，查看网络请求包（Network tab），发现浏览器发送给服务器的请求路径中，&lt;strong&gt;默认去掉了 &lt;code&gt;#&lt;/code&gt; 及其后面的所有内容&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Burp 的“强制”行为&lt;/strong&gt;：为了验证服务器对 &lt;code&gt;#&lt;/code&gt; 的处理，我使用 Burp Suite 拦截数据包，手动在 Request Line 的 URL 路径中添加了 &lt;code&gt;#&lt;/code&gt; 号（例如 &lt;code&gt;GET /api/test#123&lt;/code&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;服务器的异常响应&lt;/strong&gt;：结果出乎意料，服务端直接返回了 &lt;strong&gt;400 Bad Request&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这就引出了笔者一些疑问：&lt;/p&gt;</description>
			</item>
			<item>
				<title>IDEA Structural Search</title>
				<link>https://blog.dansec.vip/p/tryonetryideastructuralsearch/</link>
				<pubDate>Fri, 18 Apr 2025 15:34:24 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/tryonetryideastructuralsearch/</guid>
				<description>&lt;h1 id=&#34;before-all&#34;&gt;Before All&lt;/h1&gt;&#xA;&lt;p&gt;在笔者学习Java反序列化链的时候，时常会碰到寻找合适类的问题，例如在学习Shiro550 CB链时，需要寻找一个类，需要同时满足3个条件：&lt;/p&gt;</description>
			</item>
			<item>
				<title>CommonsBeanutils1学习速记</title>
				<link>https://blog.dansec.vip/p/commonsbeanutils1study/</link>
				<pubDate>Tue, 15 Apr 2025 14:59:40 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/commonsbeanutils1study/</guid>
				<description>&lt;h1 id=&#34;前置知识&#34;&gt;前置知识&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;TemplatesImpl&lt;/code&gt;中的字节码加载流程&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TemplatesImpl.newTransformer&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;-&amp;gt;TemplatesImpl.getTransletInstance&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;-&amp;gt;TemplatesImpl._class&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;_transletIndex&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;.newInstance&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;其中&lt;code&gt;TemplatesImpl._class[_transletIndex]&lt;/code&gt;在如下调用栈里的&lt;code&gt;loader.defineClass处&lt;/code&gt;进行了类加载&lt;/p&gt;</description>
			</item>
			<item>
				<title>红黑树整理</title>
				<link>https://blog.dansec.vip/p/redblacktreestudy/</link>
				<pubDate>Fri, 11 Apr 2025 14:41:27 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/redblacktreestudy/</guid>
				<description>&lt;h1 id=&#34;相关名词整理&#34;&gt;相关名词整理&lt;/h1&gt;&#xA;&lt;p&gt;发现之前的逻辑有点不对，重新整理一份&lt;/p&gt;&#xA;&lt;h2 id=&#34;树&#34;&gt;树&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;树&lt;/strong&gt;是由节点（Node）和边（Edge）组成的有限集合，满足以下条件：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;根节点（Root）&lt;/strong&gt;：存在且仅存在一个特定的节点，称为树的根节点。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;子节点与父节点&lt;/strong&gt;：除根节点外，每个节点通过一条边唯一地连接到一个称为其&lt;strong&gt;父节点&lt;/strong&gt;的节点。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;子树（Subtree）&lt;/strong&gt;：每个节点可以有零个或多个&lt;strong&gt;子节点&lt;/strong&gt;，子节点对应的子树是互不相交的集合。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;无环性&lt;/strong&gt;：树中不存在环路（即从任一节点出发沿着边遍历，无法回到该节点）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;连通性&lt;/strong&gt;：所有节点通过边连接，且从根节点出发可通过边到达任意其他节点。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;二叉树&#34;&gt;二叉树&lt;/h2&gt;&#xA;&lt;p&gt;首先，二叉树是树&lt;/p&gt;</description>
			</item>
			<item>
				<title>BST与AVL树学习</title>
				<link>https://blog.dansec.vip/p/bstandavlstudy/</link>
				<pubDate>Thu, 10 Apr 2025 19:15:26 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/bstandavlstudy/</guid>
				<description>&lt;p&gt;因为看java内部库实现的时候，没看出来一些典型的算法，补补课相当于&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;别问为什么用python实现&lt;/del&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;二叉查找树&#34;&gt;二叉查找树&lt;/h1&gt;&#xA;&lt;p&gt;Binary Search Tree =&amp;gt; BST&lt;/p&gt;&#xA;&lt;p&gt;二叉查找树根节点的值大于其左子树中任意一个节点的值，小于其右子树中任意一节点的值，且该规则适用于树中的每一个节点。&lt;/p&gt;</description>
			</item>
			<item>
				<title>CISCN 2019 web writeup</title>
				<link>https://blog.dansec.vip/p/ciscn2019web/</link>
				<pubDate>Mon, 17 Mar 2025 11:16:20 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/ciscn2019web/</guid>
				<description>&lt;h1 id=&#34;web1&#34;&gt;web1&lt;/h1&gt;&#xA;&lt;p&gt;题目源码链接&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/CISCN&amp;#43;2019&amp;#43;web1.zip&#34;&gt;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/CISCN+2019+web1.zip&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;访问：&lt;code&gt;http://172.28.76.89:8845/CISCN_2019_web1/&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20250317135608960.png&#34; alt=&#34;image-20250317135608960&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;得到提示，利用伪协议获取hint.php和index.php内容&lt;/p&gt;</description>
			</item>
			<item>
				<title>.htaccess 文件利用方式</title>
				<link>https://blog.dansec.vip/p/htaccessphpstudy/</link>
				<pubDate>Tue, 14 Jan 2025 11:21:33 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/htaccessphpstudy/</guid>
				<description>&lt;h1 id=&#34;whats-htaccess&#34;&gt;What&amp;rsquo;s .htaccess&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;.htaccess&lt;/code&gt;文件是 Apache 中有一种特殊的文件，其提供了针对目录改变配置的方法，即在一个特定的文档目录中放置一个包含一条或多条指令的配置文件。此作用文件作用于此目录及其所有子目录。&lt;/p&gt;</description>
			</item>
			<item>
				<title>php exit 死亡绕过</title>
				<link>https://blog.dansec.vip/p/phpexitdeathbypass/</link>
				<pubDate>Thu, 26 Dec 2024 18:21:52 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/phpexitdeathbypass/</guid>
				<description>&lt;p&gt;最近在复习一些内容，做记录，免得又忘了&lt;/p&gt;&#xA;&lt;h1 id=&#34;demo0&#34;&gt;Demo0&lt;/h1&gt;&#xA;&lt;p&gt;给出题目demo，如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;demo0.php&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;show_source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;__FILE__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$content&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_GET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_GET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;?php exit();?&amp;gt;&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;file_put_contents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;demo0.php&lt;/code&gt;针对的是最简单的写马：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;content&lt;/code&gt;传变量名，以&lt;code&gt;.php&lt;/code&gt;作为后缀&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;data&lt;/code&gt;传入一句话马&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>PHP本体的C语言源码调试</title>
				<link>https://blog.dansec.vip/p/phpsrcdebug/</link>
				<pubDate>Wed, 25 Dec 2024 19:06:13 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/phpsrcdebug/</guid>
				<description>&lt;h1 id=&#34;期望效果&#34;&gt;期望效果&lt;/h1&gt;&#xA;&lt;p&gt;比如某个php文件内容如下&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;error_reporting&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$strr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;?php exit();&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;preg_replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;|[^a-z0-9A-Z+/]|s&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$strr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;base64_decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;file_put_contents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;php://filter/convert.base64-decode|convert.iconv.UCS-2LE.UCS-2BE/resource=shell.php&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$strr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;file_get_contents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;shell.php&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$a2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;运行脚本的命令为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php test.php&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;对于该脚本来说：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;我无法得知&lt;code&gt;file_put_contents()&lt;/code&gt;的内部实现流程&lt;/li&gt;&#xA;&lt;li&gt;我无法得知&lt;code&gt;php://filter&lt;/code&gt;伪协议的具体实现&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这些当然可以通过看源码来获取，但是如果能实现对&lt;code&gt;php&lt;/code&gt;的&lt;code&gt;debug&lt;/code&gt;，那岂不是美哉&lt;/p&gt;</description>
			</item>
			<item>
				<title>WSL 转移记录</title>
				<link>https://blog.dansec.vip/p/wsltransrecord/</link>
				<pubDate>Wed, 25 Dec 2024 18:56:18 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/wsltransrecord/</guid>
				<description>&lt;h1 id=&#34;wsl导入导出&#34;&gt;WSL导入/导出&lt;/h1&gt;&#xA;&lt;p&gt;安装好WSL2后，无需安装Ubuntu等发行版，直接导出导入即可，命令简记&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 导出 指定虚拟机 到 指定位置并指定命名&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wsl --export Ubuntu2404 D:\Ubuntu2404.tar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 导入&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 指定导入后的虚拟机名字 指定导入后文件存储地 指定导入文件（导入虚拟机文件） 指定 WSL 版本&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wsl --import Ubuntu2404 D:\ProgramFiles\WSL\Ubuntu2404 D:\ProgramFiles\WSL\_Bak\Ubuntu-24.04.tar --version 2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h1 id=&#34;wsl指定默认登陆用户&#34;&gt;WSL指定默认登陆用户&lt;/h1&gt;&#xA;&lt;p&gt;可能出现默认登陆用户变化的情况，解决方案：&lt;/p&gt;</description>
			</item>
			<item>
				<title>PHP Filter 伪协议实现细节</title>
				<link>https://blog.dansec.vip/p/phpfilterworks/</link>
				<pubDate>Tue, 17 Dec 2024 14:05:49 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/phpfilterworks/</guid>
				<description>&lt;p&gt;在PHP中，关于编码转换，使用&lt;code&gt;php://filter&lt;/code&gt;和&lt;code&gt;iconv()&lt;/code&gt;进行编码转换有所不同&lt;/p&gt;&#xA;&lt;h1 id=&#34;iconv&#34;&gt;iconv&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;基本语法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PHP&#34; data-lang=&#34;PHP&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;iconv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$in_charset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$out_charset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;参数说明：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;$in_charset&lt;/code&gt;&lt;/strong&gt;: 输入字符编码，即源字符串的编码。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;$out_charset&lt;/code&gt;&lt;/strong&gt;: 输出字符编码，即目标字符串的编码。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;$str&lt;/code&gt;&lt;/strong&gt;: 要转换的字符串。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;返回值&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;成功时，返回转换后的字符串&lt;/li&gt;&#xA;&lt;li&gt;失败时，返回 &lt;code&gt;false&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>PHP 转换过滤器</title>
				<link>https://blog.dansec.vip/p/phpfiltersconvert/</link>
				<pubDate>Tue, 17 Dec 2024 13:09:44 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/phpfiltersconvert/</guid>
				<description>&lt;h1 id=&#34;php-过滤转换器&#34;&gt;PHP 过滤转换器&lt;/h1&gt;&#xA;&lt;h2 id=&#34;convertbase64&#34;&gt;convert.base64*&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;包括 &lt;code&gt;convert.base64-encode&lt;/code&gt; &lt;code&gt;convert.base64-decode&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;使用这两个过滤器等同于分别用 &lt;code&gt;base64_encode()&lt;/code&gt; 和 &lt;code&gt;base64_decode()&lt;/code&gt; 函数处理所有的流数据。&lt;/p&gt;&#xA;&lt;h3 id=&#34;设置参数&#34;&gt;设置参数&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;convert.base64-encode&lt;/code&gt; 支持以一个关联数组给出的参数。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;如果给出了 &lt;code&gt;line-length&lt;/code&gt;，base64 输出将被用 &lt;code&gt;line-length&lt;/code&gt; 个字符为长度而截成块。&lt;/li&gt;&#xA;&lt;li&gt;如果给出了 &lt;code&gt;line-break-chars&lt;/code&gt;，每块将被用给出的字符隔开。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这些参数的效果和用 &lt;code&gt;base64_encode()&lt;/code&gt; 再加上 &lt;a href=&#34;https://www.php.net/manual/zh/function.chunk-split.php&#34;&gt;chunk_split()&lt;/a&gt; 相同&lt;/p&gt;</description>
			</item>
			<item>
				<title>IDEA与Tomcat</title>
				<link>https://blog.dansec.vip/p/ideatomcat/</link>
				<pubDate>Fri, 06 Dec 2024 10:28:11 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/ideatomcat/</guid>
				<description>&lt;details&gt;&lt;summary&gt;前情提要&lt;/summary&gt;&#xA;&lt;p&gt;IDEA 中，仅编写了一个&lt;code&gt;.java&lt;/code&gt;文件即可部署一个接口，怎么做到的？&lt;/p&gt;&#xA;&lt;p&gt;笔者使用&lt;code&gt;Test.java&lt;/code&gt;源码如下&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;jndi.example.study&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;jakarta.servlet.ServletException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;jakarta.servlet.annotation.WebServlet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;jakarta.servlet.http.HttpServlet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;jakarta.servlet.http.HttpServletRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;jakarta.servlet.http.HttpServletResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.naming.Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.naming.InitialContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.sql.DataSource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.io.IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.sql.Connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.sql.ResultSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.sql.Statement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@WebServlet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/test&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HttpServlet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;protected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HttpServletRequest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HttpServletResponse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 获取JNDI上下文&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InitialContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 查找数据源&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;envContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lookup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;java:/comp/env&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataSource&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataSource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;envContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lookup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbc/sec&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 获取连接&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getConnection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;[+] success!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 执行查询&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Statement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;createStatement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ResultSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;executeQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SELECT * FROM sec.user;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 处理结果集&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 关闭连接&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;如何启动发布到Web端的？分为两方面，所以将会有两篇文章&lt;/p&gt;&#xA;&lt;p&gt;本文聚焦于 IDEA 启动 Tomcat 时做了哪些事儿？&lt;/p&gt;&#xA;&lt;p&gt;下篇文章聚焦于 Tomcat 源码中如何识别并分配处理类&lt;/p&gt;&#xA;&lt;/details&gt;</description>
			</item>
			<item>
				<title>Tomcat目录结构学习</title>
				<link>https://blog.dansec.vip/p/tomcatdirstruct/</link>
				<pubDate>Fri, 06 Dec 2024 00:03:48 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/tomcatdirstruct/</guid>
				<description>&lt;h1 id=&#34;tomcat&#34;&gt;Tomcat&lt;/h1&gt;&#xA;&lt;p&gt;基本信息暂时不作过多介绍了，本文聚焦于Tomcat的目录结构理解&lt;/p&gt;&#xA;&lt;h1 id=&#34;目录结构一览&#34;&gt;目录结构一览&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Tomcat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── bootstrap.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── catalina-tasks.xml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── catalina.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── service.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── shutdown.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── startup.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── tomcat11.exe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── tomcat11w.exe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── version.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#x9;├── .........&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── conf&#x9;&lt;span class=&#34;c1&#34;&gt;# 用来存放tomcat的一些配置文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;   ├── Catalina&#x9;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# Catalina 为一个目录，可以设置默认加载的项目，初始状态下可能不存在&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── catalina.properties&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── context.xml&#x9;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# context.xml 可以用来配置数据源之类的&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── logging.properties&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── server.xml&#x9;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# server.xml 可以设置端口号、设置域名或IP、默认加载的项目、请求编码 &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── tomcat-users.xml&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# tomcat-users.xml 用来配置管理tomcat的用户与权限 &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── tomcat-users.xsd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── web.xml&#x9;&#x9;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# web.xml 可以设置tomcat支持的文件类型 &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── lib&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# lib目录主要用来存放tomcat运行需要加载的jar包，建议只把Tomcat需要的jar包放到这个目录下&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 例如，像连接数据库的jdbc的包(mysql-connector-java-8.0.16.jar)我们可以加入到lib目录中来&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── annotations-api.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── catalina-storeconfig.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── tomcat-i18n-es.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── .......&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── logs&#x9;&lt;span class=&#34;c1&#34;&gt;# 顾名思义，一些日志的保存点&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── src&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 并非自带，笔者同时下载了源码zip包，自行创建的目录，放入了源码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── apache-tomcat-11.0.0-src.zip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── temp&#x9;&lt;span class=&#34;c1&#34;&gt;# temp目录用户存放tomcat在运行过程中产生的临时文件。（清空不会对tomcat运行带来影响） &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── safeToDelete.tmp &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── webapps&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── ROOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── ........ &lt;span class=&#34;c1&#34;&gt;# 稍后重点介绍&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── work&#x9;&lt;span class=&#34;c1&#34;&gt;# work 目录用来存放tomcat在运行时的编译后文件，例如运行时生成的文件，最终运行的文件都在这里。通过webapps中的项目生成的！&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 可以把这个目录下的内容删除，再次运行时会生再次生成work目录。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 当客户端用户访问一个JSP文件时，Tomcat会通过JSP生成Java文件，然后再编译Java文件生成class文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 生成的java和class文件都会存放到这个目录下。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 清空work目录，然后重启tomcat，可以达到清除缓存的作用。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 可以把这个目录下的内容删除，再次运行时会生再次生成work目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── LICENSE&#x9;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 许可证&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── NOTICE&#x9;&#x9;&#x9;&#x9;&lt;span class=&#34;c1&#34;&gt;# 说明文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;其他没有列出的&lt;em&gt;&lt;strong&gt;根目录下的普通文件&lt;/strong&gt;&lt;/em&gt;不重要&lt;/p&gt;</description>
			</item>
			<item>
				<title>JVM 启动属性/环境变量</title>
				<link>https://blog.dansec.vip/p/jvmproperties/</link>
				<pubDate>Thu, 05 Dec 2024 18:09:35 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/jvmproperties/</guid>
				<description>&lt;h1 id=&#34;java-system-properties&#34;&gt;Java System Properties&lt;/h1&gt;&#xA;&lt;p&gt;随你怎么叫：配置参数/启动属性/环境变量/系统属性，都可以，反正大概率都是指&lt;code&gt;Java System Properties&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;为了方便和统一，本文下面统一叫做：JVM 启动参数&lt;/p&gt;</description>
			</item>
			<item>
				<title>JVM 运行时参数查询</title>
				<link>https://blog.dansec.vip/p/jvmruntimepathenv/</link>
				<pubDate>Thu, 05 Dec 2024 17:18:22 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/jvmruntimepathenv/</guid>
				<description>&lt;details&gt;&lt;summary&gt;前情提要&lt;/summary&gt;&#xA;&lt;p&gt;紧接&lt;a href=&#34;https://d4n-sec.github.io/p/port-pid-taskfile/&#34;&gt;此文&lt;/a&gt;的前情提要&lt;/p&gt;&#xA;&lt;p&gt;在找到对应端口对应的文件目录后，有点绝望，JDK 目录连上了我的知识点，却击碎了我的幻想&lt;/p&gt;&#xA;&lt;p&gt;但是咱不是善于认输的人，有没有什么办法可以看到正在运行的&lt;code&gt;java&lt;/code&gt;进程的相关配置参数或者环境变量呢？&lt;/p&gt;&#xA;&lt;p&gt;答案：有的，所以如下&lt;/p&gt;&#xA;&lt;p&gt;但是即使知道了环境变量，由于是通过案例通过&lt;code&gt;Tomcat&lt;/code&gt;部署（移植到类中直接运行失败），所以也无法排除是否是&lt;code&gt;Tomcat&lt;/code&gt;发起连接还是业务代码发起连接&lt;/p&gt;&#xA;&lt;p&gt;不管怎么说，学到了就记录&lt;/p&gt;&#xA;&lt;/details&gt;</description>
			</item>
			<item>
				<title>Windows 根据端口查找进程</title>
				<link>https://blog.dansec.vip/p/port-pid-taskfile/</link>
				<pubDate>Thu, 05 Dec 2024 16:46:33 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/port-pid-taskfile/</guid>
				<description>&lt;details&gt;&lt;summary&gt;前情提要&lt;/summary&gt;&#xA;&lt;p&gt;由于有&lt;a href=&#34;https://d4n-sec.github.io/p/javaaboutjndi/#---todo---&#34;&gt;这个待办&lt;/a&gt;的存在，我将尝试去证明：&lt;code&gt;JNDI&lt;/code&gt;配置后，与数据库通信层的连接代码是交给了 Tomcat，JBOSS 等完成&lt;/p&gt;&#xA;&lt;p&gt;虽然可能没什么意义，但是有疑问想要自己解决不总是坏的&lt;/p&gt;&#xA;&lt;p&gt;在Debug时，尝试通过通讯层面证明为&lt;code&gt;Tomcat&lt;/code&gt;与&lt;code&gt;Mysql&lt;/code&gt;通信&lt;/p&gt;&#xA;&lt;p&gt;在抓包过程中，很遗憾，只能得到目的端口和来源端口信息（当然咯，网络层面通讯进行数据库查询带什么本地进程信息呢？），如下图&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20241205165612177.png&#34; alt=&#34;image-20241205165612177&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;3306&lt;/code&gt;是&lt;code&gt;MySQL&lt;/code&gt;的默认端口，&lt;del&gt;如果&lt;code&gt;4894&lt;/code&gt;是固定端口，且该服务属于&lt;code&gt;Tomcat&lt;/code&gt;的话，此次证明就可以告一段落了&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;显然没有那么简单，重新运行发现连接数据库&lt;code&gt;3306&lt;/code&gt;-&lt;code&gt;Server 端口&lt;/code&gt;所对应的&lt;code&gt;Client&lt;/code&gt;端口并不固定，那么只能说明将要进行连接时，&lt;code&gt;Client&lt;/code&gt;从 OS 处申请了一个端口，也没有指定。&lt;/p&gt;&#xA;&lt;p&gt;所以如果可以找到&lt;code&gt;端口&lt;/code&gt;对应的&lt;code&gt;进程&lt;/code&gt;对应的&lt;code&gt;文件位置&lt;/code&gt;，如果该文件处于&lt;code&gt;Tomcat&lt;/code&gt;目录，而非&lt;code&gt;JDK&lt;/code&gt;，项目目录，岂不是也可以证明是&lt;code&gt;Tomcat&lt;/code&gt;发起连接的？&lt;/p&gt;&#xA;&lt;p&gt;答案：很遗憾，不能，找到的是 JDK 中的 &lt;code&gt;java.exe&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;当然了笨蛋，JVM 管所有，所以如果有 java 程序发起连接，都需要经过 JVM 啊，JVM 当然来源于 &lt;code&gt;java.exe&lt;/code&gt; 咯，笨蛋&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;但是尽管这是让自己无语的一次脑洞尝试，但这次的排查有一些知识点可以记下来，故有此文章&lt;/p&gt;&#xA;&lt;/details&gt;</description>
			</item>
			<item>
				<title>一些好用的 MarkDown 语法</title>
				<link>https://blog.dansec.vip/p/usefullmarkdowngrammar/</link>
				<pubDate>Mon, 25 Nov 2024 13:28:42 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/usefullmarkdowngrammar/</guid>
				<description>&lt;h1 id=&#34;可折叠展开&#34;&gt;可折叠展开&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;font&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#FF0000&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;免责声明【必读】&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;本工具仅供学习和技术研究使用，不得用于任何商业或非法行为，否则后果自负。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;本工具的作者不对本工具的安全性、完整性、可靠性、有效性、正确性或适用性做任何明示或暗示的保证，也不对本工具的使用或滥用造成的任何直接或间接的损失、责任、索赔、要求或诉讼承担任何责任。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;本工具的作者保留随时修改、更新、删除或终止本工具的权利，无需事先通知或承担任何义务。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;本工具的使用者在下载、安装、运行或使用本工具时，即表示已阅读并同意本免责声明。如有异议，请立即停止使用本工具，并删除所有相关文件。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;效果&#34;&gt;效果&lt;/h2&gt;&#xA;&lt;details&gt;&lt;summary&gt;&lt;font color=&#34;#FF0000&#34; size=&#34;5&#34;&gt;免责声明【必读】&lt;/font&gt;&lt;/summary&gt;&#xA;&lt;p&gt;本工具仅供学习和技术研究使用，不得用于任何商业或非法行为，否则后果自负。&lt;/p&gt;&#xA;&lt;p&gt;本工具的作者不对本工具的安全性、完整性、可靠性、有效性、正确性或适用性做任何明示或暗示的保证，也不对本工具的使用或滥用造成的任何直接或间接的损失、责任、索赔、要求或诉讼承担任何责任。&lt;/p&gt;&#xA;&lt;p&gt;本工具的作者保留随时修改、更新、删除或终止本工具的权利，无需事先通知或承担任何义务。&lt;/p&gt;&#xA;&lt;p&gt;本工具的使用者在下载、安装、运行或使用本工具时，即表示已阅读并同意本免责声明。如有异议，请立即停止使用本工具，并删除所有相关文件。&lt;/p&gt;&#xA;&lt;/details&gt;</description>
			</item>
			<item>
				<title>Java基础知识：LDAP</title>
				<link>https://blog.dansec.vip/p/javaaboutldap/</link>
				<pubDate>Mon, 25 Nov 2024 08:05:08 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaaboutldap/</guid>
				<description>&lt;h1 id=&#34;whats-ldap&#34;&gt;What&amp;rsquo;s LDAP&lt;/h1&gt;&#xA;&lt;p&gt;Lightweight Directory Access Protocol -&amp;gt; LDAP&lt;/p&gt;&#xA;&lt;p&gt;直译：轻量级目录访问协议（Directory -&amp;gt; 又可译为电话簿），但是意义不准确&lt;/p&gt;&#xA;&lt;p&gt;不管是目录还是电话簿，核心点为&lt;em&gt;&lt;strong&gt;查找&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;即 Directory 服务内部的数据组织形式是树形结构，这样做的目的是方便&lt;em&gt;&lt;strong&gt;查找&lt;/strong&gt;&lt;/em&gt;。其最开始存在的目的是做白页、黄页类应用，而我们可以利用这个结构做其它事情，&lt;em&gt;&lt;strong&gt;比如用一个LDAP服务管理公司内所有地方的用户信息&lt;/strong&gt;&lt;/em&gt;，这样就可以做到&lt;em&gt;&lt;strong&gt;单点登录&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java基础知识：JNDI</title>
				<link>https://blog.dansec.vip/p/javaaboutjndi/</link>
				<pubDate>Sat, 23 Nov 2024 10:04:22 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaaboutjndi/</guid>
				<description>&lt;p&gt;OK，又到了&lt;del&gt;喜闻乐见的&lt;/del&gt;Java基础知识环节&lt;/p&gt;&#xA;&lt;h1 id=&#34;whats-jndi&#34;&gt;What&amp;rsquo;s JNDI&lt;/h1&gt;&#xA;&lt;p&gt;JNDI，即&lt;code&gt;Java Naming and Directory Interface&lt;/code&gt;，直译为 Java命名与&lt;em&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/em&gt;接口&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Java&lt;/code&gt;表明了这个玩意儿大概率只在Java中存在&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java基础知识：JPA</title>
				<link>https://blog.dansec.vip/p/javaaboutjpa/</link>
				<pubDate>Fri, 22 Nov 2024 15:28:55 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaaboutjpa/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20241122153243285.png&#34; alt=&#34;show&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;whats-jpa&#34;&gt;What&amp;rsquo;s JPA&lt;/h1&gt;&#xA;&lt;p&gt;JPA（Jakarta Persistence API）是一个规范，定义了Java应用程序中持久性的一组概念。JPA提供了一个对象关系映射（ORM）层，允许开发人员使用Java对象进行工作，而无需手动转换对象导向范式和关系数据库之间的差异。JPA实现如&lt;code&gt;Hibernate&lt;/code&gt;和&lt;code&gt;EclipseLink&lt;/code&gt;处理Java对象和数据库表之间的转换，使开发人员免于编写底层JDBC代码。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java基础知识：EJB</title>
				<link>https://blog.dansec.vip/p/javaaboutejb/</link>
				<pubDate>Fri, 22 Nov 2024 15:01:58 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaaboutejb/</guid>
				<description>&lt;h1 id=&#34;whats-ejb&#34;&gt;What&amp;rsquo;s EJB&lt;/h1&gt;&#xA;&lt;p&gt;EJB =&amp;gt; &lt;code&gt;Enterprise Java Beans&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;直译：企业 Java Beans&lt;/p&gt;&#xA;&lt;p&gt;EJB 的官方解释：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程，并使用计算机语言将他们实现。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;所谓：&amp;quot;&lt;em&gt;&lt;strong&gt;业务逻辑&lt;/strong&gt;&lt;/em&gt;&amp;quot;&#xA;我们注意到在EJB 的概念中主要提到的就是&amp;quot;业务逻辑&amp;quot;的封装，而这个业务逻辑到底是什么？说的那么悬乎，其实这个所谓的&amp;quot;业务逻辑&amp;quot;我们完全可以理解成执行特定任务的&amp;quot;类&amp;quot;。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java基础知识：J2EE</title>
				<link>https://blog.dansec.vip/p/javaaboutj2ee/</link>
				<pubDate>Thu, 21 Nov 2024 10:00:30 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaaboutj2ee/</guid>
				<description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;&lt;strong&gt;概念多且杂，且看且过&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;java--j2ee&#34;&gt;JAVA &amp;amp; J2EE&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;Java&lt;/code&gt;和&lt;code&gt;Java EE&lt;/code&gt;（也可称&lt;code&gt;J2EE&lt;/code&gt;，其中的&lt;a href=&#34;https://blog.csdn.net/zl1zl2zl3/article/details/86030331&#34;&gt;故事&lt;/a&gt;）是两个不同概念&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Java&lt;/code&gt;不仅指一种语言，也可以指一种软件系统的流派&lt;/p&gt;&#xA;&lt;p&gt;目前&lt;code&gt;JAVA&lt;/code&gt;有三个平台：&lt;/p&gt;</description>
			</item>
			<item>
				<title>Linux-创建新用户并使其SSH密钥登录</title>
				<link>https://blog.dansec.vip/p/aboutssh/</link>
				<pubDate>Thu, 21 Nov 2024 10:00:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/aboutssh/</guid>
				<description>&lt;p&gt;本记录执行背景&lt;/p&gt;&#xA;&lt;p&gt;Linux新环境，只有root账号&lt;/p&gt;&#xA;&lt;p&gt;想要达成的目的：&lt;/p&gt;&#xA;&lt;p&gt;创建多个个人账号并使用SSH密钥登录&lt;/p&gt;&#xA;&lt;h1 id=&#34;基本环境&#34;&gt;基本环境&lt;/h1&gt;&#xA;&lt;p&gt;连接Linux Shell后，开启 root ssh远程登录，以方便后续连接&lt;/p&gt;</description>
			</item>
			<item>
				<title>编译原理-基本知识</title>
				<link>https://blog.dansec.vip/p/compilationprinciplebaseknowledge/</link>
				<pubDate>Thu, 14 Nov 2024 14:03:12 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/compilationprinciplebaseknowledge/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20241114140514841.png&#34; alt=&#34;image-20241114140514841&#34;&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;表格管理&#34;&gt;表格管理&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;作用：用来记录源程序的各种信息以及编译过程中的各种状况&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;与编译前三阶段有关的表格有：符号表、常数表、标号表、分程序入口表、中间代码表等&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;符号表&#34;&gt;符号表&lt;/h2&gt;&#xA;&lt;p&gt;用来登记源程序中的常量名变量名、发数组名、过程名等，记录它们的性质、定义和引用情况&lt;/p&gt;</description>
			</item>
			<item>
				<title>编译原理-目标代码生成</title>
				<link>https://blog.dansec.vip/p/compilationprinciplecodegeneration/</link>
				<pubDate>Mon, 11 Nov 2024 17:15:43 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/compilationprinciplecodegeneration/</guid>
				<description>&lt;h1 id=&#34;目标代码生成&#34;&gt;目标代码生成&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;任务&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;把经过优化的中间代码转化成特定机器上的低级语言代码&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;目标代码的形式&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;绝对指令代码：可立即执行的目标代码。&lt;/li&gt;&#xA;&lt;li&gt;汇编指令代码：汇编语言程序，需要通过汇编程序汇编后才能运行。&lt;/li&gt;&#xA;&lt;li&gt;可重定位指令代码：先将各目标模块连接起来，确定变量、常数在主存中的位置，装入主存后才能成为可以运行的绝对指令代码。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>编译原理-优化</title>
				<link>https://blog.dansec.vip/p/compilationprincipleoptimize/</link>
				<pubDate>Mon, 11 Nov 2024 16:59:47 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/compilationprincipleoptimize/</guid>
				<description>&lt;h1 id=&#34;优化&#34;&gt;优化&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;任务&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对前面产生的中间代码进行加工变换，以期在最后阶段能产生更为高效的目标代码。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;原则:等价变换&lt;/li&gt;&#xA;&lt;li&gt;主要关注：公共子表达式的提取、合并已知量、删除无用语句、循环优化等。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;循环优化：将循环内的语句优化为必需语句&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;优化举例&#34;&gt;优化举例&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20241111170905973.png&#34; alt=&#34;image-20241111170905973&#34;&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>编译原理-语义分析和中间代码生成</title>
				<link>https://blog.dansec.vip/p/semanticanalysis/</link>
				<pubDate>Fri, 08 Nov 2024 19:41:32 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/semanticanalysis/</guid>
				<description>&lt;h1 id=&#34;语义分析和中间代码生成&#34;&gt;语义分析和中间代码生成&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;任务&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对语法分析识别出的各类语法范畴，分析其含义，进行和初步翻译，产生介于源代码和目标代码之间的一种代码。&lt;/li&gt;&#xA;&lt;li&gt;分为两阶段工作：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对每种语法范畴进行静态语义检查&lt;/li&gt;&#xA;&lt;li&gt;若语义正确，就进行&lt;a href=&#34;https://blog.dansec.vip/p/semanticanalysis/#middleCode&#34;&gt;中间代码&lt;/a&gt;的翻译&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span id=&#34;middleCode&#34;&gt;中间代码&lt;/span&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;中间代码形式有：四元式、三元式、逆波兰式&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;中间代码生成举例：&lt;/p&gt;</description>
			</item>
			<item>
				<title>编译原理-语法分析</title>
				<link>https://blog.dansec.vip/p/grammaranalysis/</link>
				<pubDate>Fri, 08 Nov 2024 17:13:30 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/grammaranalysis/</guid>
				<description>&lt;ul&gt;&#xA;&lt;li&gt;任务&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在&lt;a href=&#34;https://d4n-sec.github.io/p/lexicalanalysis/&#34;&gt;词法分析&lt;/a&gt;的基础上，根据语言的&lt;a href=&#34;https://blog.dansec.vip/p/grammaranalysis/#grammarRules&#34;&gt;&lt;em&gt;&lt;strong&gt;语法规则&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;，把单词符号组成的各类&lt;a href=&#34;https://blog.dansec.vip/p/grammaranalysis/#grammarUnits&#34;&gt;语法单位&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span id=&#34;grammarRules&#34;&gt;语法规则&lt;/span&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;语言的规则，又称为文法：规定单词如何构成&lt;a href=&#34;https://blog.dansec.vip/p/grammaranalysis/#grammarUnits&#34;&gt;语法单位&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;span id=&#34;grammarUnits&#34;&gt;语法单位&lt;/span&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;语法单位包括：短语、子句、语句、过程、程序&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;语法规则如何表示&#34;&gt;语法规则如何表示&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;BNF（巴科斯范式）：&lt;code&gt;A::=B|C&lt;/code&gt; -&amp;gt; 表示A定义为B或C&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;语法分析的方法&#34;&gt;语法分析的方法&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;推导（Derive）和归约（Reduce）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;推导&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最左推导、最右推导&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最&lt;em&gt;&lt;strong&gt;右&lt;/strong&gt;&lt;/em&gt;推导：每次推导都把最&lt;em&gt;&lt;strong&gt;右&lt;/strong&gt;&lt;/em&gt;方的&lt;strong&gt;字母&lt;/strong&gt;按照规则&lt;strong&gt;转化为标识符或者常量&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;归约（推导的逆过程）&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最右归约、最左归约&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最&lt;em&gt;&lt;strong&gt;左&lt;/strong&gt;&lt;/em&gt;归约：每次归约都把最&lt;em&gt;&lt;strong&gt;左&lt;/strong&gt;&lt;/em&gt;方的&lt;strong&gt;标识符或者常量&lt;/strong&gt;按照规则转化为&lt;strong&gt;字母&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>编译原理-词法分析</title>
				<link>https://blog.dansec.vip/p/lexicalanalysis/</link>
				<pubDate>Fri, 08 Nov 2024 17:06:57 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/lexicalanalysis/</guid>
				<description>&lt;h1 id=&#34;关于&#34;&gt;关于&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;任务&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;输入源程序，对构成源程序的字符串进行扫描和分解，识别出一个个的&lt;a href=&#34;https://blog.dansec.vip/p/lexicalanalysis/#word&#34;&gt;单词&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;词法分析依照词法规则，识别出正确的单词，&lt;a href=&#34;https://blog.dansec.vip/p/lexicalanalysis/#trans&#34;&gt;转换&lt;/a&gt;为统一规格，备用&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;span id=&#34;word&#34;&gt;单词&lt;/span&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;高级语言中有实在意义的最小语法单位，字符组成（关键字？）&lt;/li&gt;&#xA;&lt;li&gt;包括：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;基本字：&lt;code&gt;void int float&lt;/code&gt;等&lt;/li&gt;&#xA;&lt;li&gt;标识符：变量名，函数名等&lt;/li&gt;&#xA;&lt;li&gt;整常数：例如 a*50 中的50&lt;/li&gt;&#xA;&lt;li&gt;运算符：&lt;code&gt;+ - * / =&lt;/code&gt;等&lt;/li&gt;&#xA;&lt;li&gt;界限符：&lt;code&gt;{} &#39;&#39; ; ()&lt;/code&gt;等&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;span id=&#34;trans&#34;&gt;转换&lt;/span&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对基本字、运算符、界限符的转换&lt;/li&gt;&#xA;&lt;li&gt;标识符的转换&lt;/li&gt;&#xA;&lt;li&gt;常数的转换&lt;/li&gt;&#xA;&lt;li&gt;转换完成后的格式：&lt;em&gt;&lt;strong&gt;（类号，内码）&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>编译原理</title>
				<link>https://blog.dansec.vip/p/compilationprinciple/</link>
				<pubDate>Fri, 08 Nov 2024 17:02:31 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/compilationprinciple/</guid>
				<description>&lt;h1 id=&#34;编译程序的工作&#34;&gt;编译程序的工作&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://d4n-sec.github.io/p/LexicalAnalysis/&#34;&gt;词法分析&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;语法分析&lt;/li&gt;&#xA;&lt;li&gt;语义分析和中间代码生成&lt;/li&gt;&#xA;&lt;li&gt;优化&lt;/li&gt;&#xA;&lt;li&gt;目标代码生成&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20241108164207108.png&#34; alt=&#34;image-20241108164207108&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;上图中的语义分析一般来说会被融合进语法分析中&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java自定义类加载器</title>
				<link>https://blog.dansec.vip/p/userdefineclassloader/</link>
				<pubDate>Fri, 08 Nov 2024 11:10:34 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/userdefineclassloader/</guid>
				<description>&lt;h1 id=&#34;自定义类加载器的使用&#34;&gt;自定义类加载器的使用&lt;/h1&gt;&#xA;&lt;p&gt;根据&lt;a href=&#34;https://d4n-sec.github.io/p/classloaderloadpath/&#34;&gt;前文&lt;/a&gt;，不管是Bootstrap ClassLoader还是ExtClassLoader等，这些类加载器都只是加载指定的目录下的jar包或者资源。如果在某种情况下，我们需要动态加载一些东西呢？&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java ClassPath</title>
				<link>https://blog.dansec.vip/p/javaclasspath/</link>
				<pubDate>Thu, 07 Nov 2024 16:31:15 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaclasspath/</guid>
				<description>&lt;p&gt;ClassPath是Java中一个重要的环境变量，弄懂他对于Java运行环境的理解有重大的帮助&lt;/p&gt;&#xA;&lt;h1 id=&#34;classpath是什么&#34;&gt;ClassPath是什么&lt;/h1&gt;&#xA;&lt;p&gt;CLASSPATH直译过来是类路径，是Java环境配置中要设置的一个环境变量，就是.class文件的路径，&lt;em&gt;&lt;strong&gt;表示JVM从哪里去寻找要运行的class文件&lt;/strong&gt;&lt;/em&gt;，&lt;code&gt;CLASSPATH = D:\java&lt;/code&gt;表示执行java命令时去&lt;code&gt;D:\java&lt;/code&gt;目录中去找需要被执行的class文件并运行。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java默认类加载器的加载路径</title>
				<link>https://blog.dansec.vip/p/classloaderloadpath/</link>
				<pubDate>Thu, 07 Nov 2024 16:22:58 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/classloaderloadpath/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://d4n-sec.github.io/p/bytecodeanndloadclass/#java%E7%B1%BB%E5%8A%A0%E8%BD%BD%E5%99%A8%E6%9C%89%E5%93%AA%E4%BA%9B&#34;&gt;前文&lt;/a&gt;有提到Java的默认&lt;code&gt;ClassLoader&lt;/code&gt;有三种，且三种的&lt;code&gt;ClassLoader&lt;/code&gt;会加载不同的Java类。&lt;/p&gt;&#xA;&lt;p&gt;他们加载的类的路径在哪？&lt;/p&gt;&#xA;&lt;p&gt;是否可以进行设置？&lt;/p&gt;&#xA;&lt;p&gt;本文做一个初步探讨&lt;/p&gt;&#xA;&lt;h1 id=&#34;全量输出&#34;&gt;全量输出&lt;/h1&gt;&#xA;&lt;p&gt;在不配置任何参数的情况下，执行&lt;code&gt;MainTest.java&lt;/code&gt;查看默认路径&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;MainTest.java&lt;/code&gt;内容如下&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java字节码与类加载器</title>
				<link>https://blog.dansec.vip/p/bytecodeanndloadclass/</link>
				<pubDate>Wed, 06 Nov 2024 14:52:13 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/bytecodeanndloadclass/</guid>
				<description>&lt;p&gt;本章深入了解&lt;strong&gt;Java字节码&lt;/strong&gt;以及加载Java字节码的&lt;strong&gt;类加载器&lt;/strong&gt;相关姿势！&lt;/p&gt;&#xA;&lt;h1 id=&#34;java字节码&#34;&gt;Java字节码&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Java 在刚刚诞生之时曾经提出过一个非常著名的口号: “&lt;strong&gt;一次编写，到处运行（write once，run anywhere）&lt;/strong&gt;”，这句话充分表达了软件开发人员对冲破平台界限的渴求。“与平台无关”的理想最终实现在操作系统的运用层上: 虚拟机提供商开发了许多可以运行在不同平台上的虚拟机，这些虚拟机都可以载入和执行同一种平台无关的字节码，从而实现了程序的“一次编写到处运行”。&lt;/p&gt;&#xA;&lt;p&gt;各种不同平台的虚拟机与所有平台都统一使用的程序存储格式—&lt;strong&gt;字节码（ByteCode）&lt;/strong&gt;，因此，可以看出字节码对 Java 生态的重要性。之所以被称为字节码，是因为字节码是由十六进制组成的，而 JVM（Java Virtual Machine）以两个十六进制为一组，即以字节为单位进行读取。在 Java 中使用 &lt;strong&gt;javac&lt;/strong&gt; 命令把源代码编译成字节码文件，一个 .java 源文件从编译成 .class 字节码文件的示例&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20241106165423165.png&#34; alt=&#34;image-20241106165423165&#34;&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>24-11-06 有感</title>
				<link>https://blog.dansec.vip/p/feel_2024-11-06-14-43-11/</link>
				<pubDate>Wed, 06 Nov 2024 14:43:26 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/feel_2024-11-06-14-43-11/</guid>
				<description>&lt;p&gt;最近其实学到的东西越来越多了，但是不知怎的，写文章的欲望却变得低迷了起来，不知是因为什么&lt;/p&gt;&#xA;&lt;p&gt;也许是因为其中部分知识算的上是已经学过了，如果重复写的话会感觉“浪费时间”吧&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windows 右键菜单</title>
				<link>https://blog.dansec.vip/p/windowsrightmenu/</link>
				<pubDate>Thu, 17 Oct 2024 16:09:39 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/windowsrightmenu/</guid>
				<description>&lt;h1 id=&#34;windows-多级右键菜单基础&#34;&gt;Windows 多级右键菜单基础&lt;/h1&gt;&#xA;&lt;h2 id=&#34;修改的键与项&#34;&gt;修改的键与项&lt;/h2&gt;&#xA;&lt;p&gt;Win10鼠标右键菜单管理分为三种情形：右键文件夹、文件以及右键空白区域&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;右键空白区域（分为桌面空白区域和其他文件夹下空白区域）&lt;/li&gt;&#xA;&lt;li&gt;右键文件夹&lt;/li&gt;&#xA;&lt;li&gt;右键文件（分为所有文件和某类型文件两种）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d4n-picture-database.oss-cn-beijing.aliyuncs.com/img/image-20240914180800214.png&#34; alt=&#34;image-20240914180800214&#34;&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Windows 注册表基础</title>
				<link>https://blog.dansec.vip/p/windowsregeditbase/</link>
				<pubDate>Tue, 15 Oct 2024 20:53:41 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/windowsregeditbase/</guid>
				<description>&lt;h1 id=&#34;windows-注册表基础&#34;&gt;Windows 注册表基础&lt;/h1&gt;&#xA;&lt;h2 id=&#34;windows注册表的本质&#34;&gt;Windows注册表的本质&lt;/h2&gt;&#xA;&lt;p&gt;官方描述&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;注册表是一个分层数据库，其中包含对 Windows 的操作以及 Windows 上运行的应用程序和服务至关重要的数据。 数据以树格式进行结构化。 树中的每个节点称为 &lt;em&gt;键&lt;/em&gt;。 每个键可以同时包含 &lt;em&gt;子项&lt;/em&gt; 和数据条目（称为 &lt;em&gt;值&lt;/em&gt;）。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>WSL2 PHP Xdebug 调试环境，安装速记</title>
				<link>https://blog.dansec.vip/p/devphpdebug/</link>
				<pubDate>Mon, 19 Aug 2024 22:11:14 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/devphpdebug/</guid>
				<description>&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#正式开始安装&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:ondrej/php&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install apache2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install --no-install-recommends php7.4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install -y php7.4-cli php7.4-common php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php7.4-bcmath php7.4-dev php7.4-fpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php -i 找xdebug&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://xdebug.org/wizard&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://xdebug.org/files/xdebug-版本&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xvzf xdebug-版本.tgz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; xdebug-版本&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;phpize &lt;span class=&#34;c1&#34;&gt;#确保和网上的一样&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;c1&#34;&gt;#或者make &amp;amp;&amp;amp;sudo make install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 这个时候 modules 文件夹下已经有xdebug.so了&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 把他保存到一个路径短，且路径上没有-号的文件夹下&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 可用路径 /home/dan/xdebug/xdebug3.1.6/xdebug.so&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 使用一个phpinfo();也可以找到，推荐phpinfo();虽然麻烦&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php -i&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;php.ini&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#找到php.ini路径&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#vim 编辑添加&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Xdebug&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;zend_extension&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /home/dan/xdebug/xdebug3.1.6/xdebug.so&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.remote_enable&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.remote_autostart&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.remote_handler&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dbgp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.idekey&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vscode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.start_with_request&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.mode &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; debug&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#;;特别注意这个地方是client_port，而xdebug2中是remote_port&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.client_host &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0.0.0.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdebug.client_port &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;9383&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#重启PHP服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo service php版本-fpm restart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo service apache2 restart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#查看一下xdebug有没有&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php -i （只能查看cli版本的）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#使用一个phpinfo();确保apache版本的php.ini是否被修改;可以确保无误&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#;断点，访问，成功&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>CC6 Demo 学习</title>
				<link>https://blog.dansec.vip/p/cc6demo/</link>
				<pubDate>Tue, 06 Aug 2024 21:56:10 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/cc6demo/</guid>
				<description>&lt;h1 id=&#34;cc6链&#34;&gt;CC6链&lt;/h1&gt;&#xA;&lt;p&gt;CC6 Demo学习，以及踩坑记录&lt;/p&gt;&#xA;&lt;h2 id=&#34;cc6-demo&#34;&gt;CC6 Demo&lt;/h2&gt;&#xA;&lt;p&gt;CC6能够解决CC1高版本无法利用的问题，先看看CC6链&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;调用栈&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Gadget chain:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; java.io.ObjectInputStream.readObject()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; java.util.HashMap.readObject()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; java.util.HashMap.hash()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; org.apache.commons.collections.keyvalue.TiedMapEntry.hashCode()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; org.apache.commons.collections.keyvalue.TiedMapEntry.getValue()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; org.apache.commons.collections.map.LazyMap.get()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; org.apache.commons.collections.functors.ChainedTransformer.transform()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; org.apache.commons.collections.functors.InvokerTransformer.transform()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; java.lang.reflect.Method.invoke()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; java.lang.Runtime.exec()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;第8行到最后的链路我们已经熟悉了。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经济学十大原理</title>
				<link>https://blog.dansec.vip/p/ten-principles-of-economics/</link>
				<pubDate>Mon, 05 Aug 2024 21:10:08 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/ten-principles-of-economics/</guid>
				<description>&lt;ul&gt;&#xA;&lt;li&gt;First of All&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;什么是教育&lt;/p&gt;&#xA;&lt;p&gt;Education Is What Remains After You Have Forgotten Everything You Learned In School&lt;/p&gt;&#xA;&lt;p&gt;在你忘记所有你在学校中学到的知识后，剩下的东西，就是教育&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;经济学十大原理&#34;&gt;经济学十大原理&lt;/h1&gt;&#xA;&lt;p&gt;十大原理分成三类问题&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How People Make Decisions（人们如何作出决策）&lt;/li&gt;&#xA;&lt;li&gt;How People Interact（人们如何相互影响/相互作用）&lt;/li&gt;&#xA;&lt;li&gt;How the Economy as a Whole Works（整体经济如何运行）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;前两个问题属于&lt;em&gt;&lt;strong&gt;微观经济学&lt;/strong&gt;&lt;/em&gt;，第三个问题属于&lt;em&gt;&lt;strong&gt;宏观经济学&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典CC1链构造</title>
				<link>https://blog.dansec.vip/p/javaclassiccc1/</link>
				<pubDate>Sat, 03 Aug 2024 13:11:25 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaclassiccc1/</guid>
				<description>&lt;p&gt;假设读者已经了解&lt;code&gt;HashMap&lt;/code&gt;版非经典CC1链的构造原理。&lt;/p&gt;&#xA;&lt;p&gt;如此提到了非经典版的CC1链，代表经典版CC1链和&lt;code&gt;HashMap&lt;/code&gt;版有一定出入。&lt;/p&gt;&#xA;&lt;p&gt;经典版CC1链使用的&lt;code&gt;Map&lt;/code&gt;类为&lt;code&gt;LazyMap&lt;/code&gt;而非&lt;code&gt;HashMap&lt;/code&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Java代理模式</title>
				<link>https://blog.dansec.vip/p/javaproxystudy/</link>
				<pubDate>Sun, 28 Jul 2024 01:05:01 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/javaproxystudy/</guid>
				<description>&lt;h1 id=&#34;代理模式&#34;&gt;代理模式&lt;/h1&gt;&#xA;&lt;p&gt;代理模式是常用的java设计模式。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;代理模式是常用的java设计模式，他的特征是代理类与委托类有同样的接口，代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类，以及事后处理消息等。代理类与委托类之间通常会存在关联关系，一个代理类的对象与一个委托类的对象关联，代理类的对象本身并不真正实现服务，而是通过调用委托类的对象的相关方法，来提供特定的服务。简单的说就是，我们在访问实际对象时，是通过代理对象来访问的，代理模式就是在访问实际对象时引入一定程度的间接性，因为这种间接性，可以附加多种用途。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>程序的设计模式</title>
				<link>https://blog.dansec.vip/p/designmode/</link>
				<pubDate>Sun, 28 Jul 2024 00:05:01 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/designmode/</guid>
				<description>&lt;h1 id=&#34;设计模式&#34;&gt;设计模式&lt;/h1&gt;&#xA;&lt;h2 id=&#34;设计模式简介&#34;&gt;设计模式简介&lt;/h2&gt;&#xA;&lt;p&gt;设计模式（Design pattern）代表了最佳的实践，通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。&lt;/p&gt;</description>
			</item>
			<item>
				<title>How to Ask Questions The Smart Way</title>
				<link>https://blog.dansec.vip/p/how2ask/</link>
				<pubDate>Sat, 27 Jul 2024 01:19:29 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/how2ask/</guid>
				<description>&lt;p&gt;如侵秒删&lt;/p&gt;&#xA;&lt;h1 id=&#34;提问的智慧&#34;&gt;提问的智慧&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/pulls&#34;&gt;&lt;img src=&#34;https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square&#34; alt=&#34;PRs Welcome&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How To Ask Questions The Smart Way&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen&lt;/p&gt;&#xA;&lt;p&gt;本指南英文版版权为 Eric S. Raymond, Rick Moen 所有。&lt;/p&gt;&#xA;&lt;p&gt;原文网址：&lt;a href=&#34;http://www.catb.org/~esr/faqs/smart-questions.html&#34;&gt;http://www.catb.org/~esr/faqs/smart-questions.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu&lt;/p&gt;&#xA;&lt;p&gt;本中文指南是基于原文 3.10 版以及 2010 年由 &lt;a href=&#34;https://github.com/gasolin&#34;&gt;Gasolin&lt;/a&gt; 所翻译版本的最新翻译；&lt;/p&gt;</description>
			</item>
			<item>
				<title>CC1Demo</title>
				<link>https://blog.dansec.vip/p/cc1demo/</link>
				<pubDate>Sun, 21 Jul 2024 15:58:24 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/cc1demo/</guid>
				<description>&lt;p&gt;假设读者已经掌握（笔者博客里的前置文章内涉及技术的）基础知识&lt;/p&gt;&#xA;&lt;p&gt;本文章目的是分析CC链之1 Demo，以及补充相关前置知识，&lt;del&gt;并尝试解决CC1链必要性问题，即CC1的必要路径和可选路径&lt;/del&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>二次URL解码小技巧</title>
				<link>https://blog.dansec.vip/p/doubleurldecodetrick/</link>
				<pubDate>Mon, 17 Jun 2024 17:17:19 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/doubleurldecodetrick/</guid>
				<description>&lt;p&gt;FYI.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;file_put_content()&lt;/code&gt;会默认进行一次&lt;code&gt;urldecode&lt;/code&gt;，&lt;code&gt;php&lt;/code&gt;接收时也会默认进行一次&lt;/p&gt;&#xA;&lt;p&gt;此为默认的二次&lt;code&gt;URLdecode&lt;/code&gt;场景&lt;/p&gt;&#xA;&lt;h2 id=&#34;常规二次urldecode&#34;&gt;常规二次UrlDecode&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;%2569 -&amp;gt; %69 -&amp;gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;小技巧&#34;&gt;小技巧&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;%6%39 -&amp;gt; %69 -&amp;gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;使用场景&#34;&gt;使用场景&lt;/h2&gt;&#xA;&lt;p&gt;bypass WAF 对于 &lt;code&gt;%25&lt;/code&gt; 的过滤&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rmi Study</title>
				<link>https://blog.dansec.vip/p/rmi-study/</link>
				<pubDate>Mon, 08 Apr 2024 17:29:24 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/rmi-study/</guid>
				<description>&lt;h1 id=&#34;什么是rmi&#34;&gt;什么是RMI&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;RMI (Remote Method Invocation) 模型是一种分布式对象应用，使用 RMI 技术可以使一个 JVM 中的对象，调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。因此，RMI 意味着需要一个 Server 端和一个 Client 端。&lt;/p&gt;&#xA;&lt;p&gt;Server 端通常会创建一个对象，并使之可以被远程访问。&lt;/p&gt;&#xA;&lt;p&gt;这个对象被称为远程对象。Server 端需要注册这个对象可以被 Client 远程访问。&lt;/p&gt;&#xA;&lt;p&gt;Client 端调用可以被远程访问的对象上的方法，Client 端就可以和 Server 端进行通信并相互传递信息。&lt;/p&gt;&#xA;&lt;p&gt;RMI 在构建一个分布式应用时十分方便，它和 RPC 一样可以实现分布式应用之间的互相通信，甚至和现在的微服务思想都十分类似。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>About_u3p</title>
				<link>https://blog.dansec.vip/p/about_u3p/</link>
				<pubDate>Sun, 07 Apr 2024 11:03:04 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/about_u3p/</guid>
				<description>&lt;h2 id=&#34;什么是u3p文件&#34;&gt;什么是u3p文件&lt;/h2&gt;&#xA;&lt;p&gt;.u3p 文件是存储在U3智能驱动器（一种特殊类型的USB闪存驱动器，包括U3 Launchpad平台）上的便携式应用程序。它包含程序可执行文件和配置数据。如果需要在计算机上运行某些文件，请在计算机上运行一些文件。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Vscode Windows 远程连接</title>
				<link>https://blog.dansec.vip/p/vscode/</link>
				<pubDate>Wed, 06 Mar 2024 17:38:40 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/vscode/</guid>
				<description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;笔者目前有两个电脑，一个A在家（高性能），一个B在公司（较低性能），如何同步两个电脑的环境一直是一个问题，较低性能的笔记本写文档完全没问题，但是如果涉及一些工具编译，多台虚拟机同时使用，不可。上传github需要push，但是笔者并没有良好的push习惯。相反，只需要git作为存储单元的笔者深受其git版本控制的困扰，git方案失败，有向日葵这样的远控软件但是远控在免费使用的情况下，并不能做到合二为一的感受（延迟）&lt;/p&gt;</description>
			</item>
			<item>
				<title>BlogToHugo</title>
				<link>https://blog.dansec.vip/p/blogtohugo/</link>
				<pubDate>Wed, 06 Mar 2024 16:26:40 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/blogtohugo/</guid>
				<description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;Hugo 搭建其实和hexo差不多，但是介于作者有幸尝试过hexo编译大量文章的经历，可以说hexo的性能已经无法满足我对个人博客的向往，于是乎转Hugo，Hugo 基于Go开发，效率方面毋庸置疑，但是由于该工具出现时间短暂，目前参考资料少，所以笔者在这通过搭建做一些总结&lt;/p&gt;</description>
			</item>
			<item>
				<title>Go Study</title>
				<link>https://blog.dansec.vip/p/go-study/</link>
				<pubDate>Wed, 06 Mar 2024 14:45:23 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/go-study/</guid>
				<description>&lt;p&gt;Go学习难点记录与解决（希望能解决）&lt;/p&gt;&#xA;&lt;h1 id=&#34;混淆点&#34;&gt;混淆点&lt;/h1&gt;&#xA;&lt;p&gt;1.Go的包导入&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;导入本质，导入顺序，依赖顺序以及导入优先级，默认路径，为什么是这个默认路径，如何结合默认路径设计项目结构&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>VScode&#43;Docker&#43;Python&#43;Debug安装指南</title>
				<link>https://blog.dansec.vip/p/vscode-docker-python-debug%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/</link>
				<pubDate>Tue, 09 Jan 2024 00:00:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/vscode-docker-python-debug%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97/</guid>
				<description>&lt;p&gt;本文记录VScode Docker Python Debug 相关设置已经遇见的问题&lt;/p&gt;&#xA;&lt;h2 id=&#34;为何&#34;&gt;为何&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;日益增多的框架和漏洞学习中，VulDB一键搭建成为安全研究福音。为更好地跟踪Payload利用路径，调试成为必不可少的一步，但VulDB以Docker为基石，随之而来只能选择非本地搭建而使用现有的Docker进行远程调试，本文记录VScode Docker Python Debug 相关设置已经遇见的问题&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>PTE知识记录</title>
				<link>https://blog.dansec.vip/p/pte%E7%9F%A5%E8%AF%86%E8%AE%B0%E5%BD%95/</link>
				<pubDate>Thu, 07 Sep 2023 00:00:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/pte%E7%9F%A5%E8%AF%86%E8%AE%B0%E5%BD%95/</guid>
				<description>&lt;p&gt;一些详细知识点的备忘&lt;/p&gt;</description>
			</item>
			<item>
				<title>D4n的Java安全路</title>
				<link>https://blog.dansec.vip/p/d4n%E7%9A%84java%E5%AE%89%E5%85%A8%E8%B7%AF/</link>
				<pubDate>Thu, 06 Apr 2023 00:00:00 +0800</pubDate>
				<guid>https://blog.dansec.vip/p/d4n%E7%9A%84java%E5%AE%89%E5%85%A8%E8%B7%AF/</guid>
				<description>&lt;p&gt;本章是 D4n的Java安全入门 第一篇，望大佬指正，小白避坑&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
