找到
8
篇与
技术教程
相关的结果
-
基于Cloudflare Pro和 Snippets 的WAF防护规则 本文转载自nodeseek@IPLark 本文尝试分享一些基于Cloudflare Pro 以及 Snippets 的防护规则/配置/代码。在规则方面,尽可能做到精简。 世界上不可能有两个一模一样的站点(就算内容、程序一样,流量也不可能完全一样),所以也不可能有适配所有网站的通用WAF规则。本文例子中的站点为虚构站点(f47fb81b34.com,该网站是使用了开源程序typecho搭建的个人博客,日流量2000 IP左右),以下规则是针对该站点的。 注:以下内容仅供参考。 1. 对搜索引擎等友好爬虫进行过白 后续的WAF规则会对爬虫进行拦截,在这些规则之前,我们需要对友好的爬虫进行过白。假设我们需要将搜索引擎以及指定IP(13.3.3.3)纳入白名单。 点击安全性,选择WAF,创建规则。请注意,该规则需要放置在后续其他拦截规则之前。 1.png图片 2.png图片 3.png图片 注:Google Search Console的抓取工具属于Google Inspection Tool,该工具在Cloudflare Radar(https://radar.cloudflare.com/traffic/verified-bots )的分类中为安全性。 11.png图片 在极少数场景下,Cloudflare 可能对搜索引擎的判断有误,这会导致极少数情况下无法对搜索引擎自动过白,这时候我们需要手动将搜索引擎IP纳入ip list里。 谷歌ip list可参考: https://developers.google.com/search/apis/ipranges/googlebot.json https://developers.google.com/search/apis/ipranges/user-triggered-fetchers.json https://developers.google.com/search/apis/ipranges/user-triggered-fetchers-google.json必应ip list可参考 https://www.bing.com/toolbox/bingbot.json IPlist的创建方法如下: 1)点击管理账户。 2)点击配置。 21.png图片 3)点击列表,创建一个新的iplist。 31.png图片 4)将需要过白的ip或ip段导入。 如图所示 41.png图片 5)回到刚才的WAF规则,重新编辑whitelist规则。 51.png图片 2. 屏蔽恶意bot以及异常的请求 创建一条新规则,放置在whitelist之后,命名为block,采取措施为阻止。 61.png图片 表达式 (not len(http.request.headers["accept-language"]) > 0) or (not starts_with(http.user_agent, "Mozilla/5.0")) or (http.user_agent contains "bot") or (ip.src.country in {"T1"}) or (http.user_agent contains "Bot") or (http.user_agent contains "http") or (http.user_agent contains "rawler") or (http.user_agent contains "pider")注: CF防火墙的UA匹配是区分大小写的,部分bot UA会包含bot而部分会包含Bot,所以需要区分开来,而少部分UA可能会包含crawler或Crawler,所以上述规则用rawler匹配两种情况。 正常的浏览器访客的UA都是以Mozilla/5.0开头且accept-language必定不为空。 部分扫描程序的ua会包含http,但不包含bot,用UA包含http可以匹配并封禁掉众多公开扫描程序。比如 Censys部分Botnet来源于Tor节点,可根据实际情况觉得是否禁止tor用户访问。Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/) 3. 对部分异常流量进行质询 假设网站大部分用户都来自中文用户,那么可以accept-language进行进一步判断,比如大部分中文访客的accept-language都包含zh,如果请求中accept-language不包含zh,那么有可能为异常流量。且大多访客的http版本为http2和http3,就此我们可以设置一条新规则challenge,放在block规则之下。 71.png图片 注:启用该规则后,正常访客有可能(小概率事件)也被要求完成人机验证。 此外,CF有三种类型的人机验证,分别是交互式质询、托管质询和JS质询,JS质询无需用户点击,由浏览器自动执行脚本并完成验证,交互式质询需要用户点击确认框,而托管质询介于两者之间,根据用户环境,由CF选择对用户实行JS还是交互式质询。 4. 对部分疑似恶意的请求进行质询/阻止 该规则组匹配的内容较多,篇幅有限,就不一一说明了。 表达式如下 (http.user_agent contains "MSIE") or (not http.request.method in {"GET" "POST" "HEAD"}) or (http.request.full_uri contains "well-known") or (len(http.request.headers["via"]) > 0) or (http.user_agent contains "; +") or (http.request.uri.path contains "//") or (http.x_forwarded_for contains ".") or (len(http.request.headers["x-forwarded-host"]) > 0) or (len(http.request.headers["cdn-loop"]) > 0) or (len(http.request.headers["cf-ew-via"]) > 0) or (http.user_agent contains "\\x09") or (http.user_agent contains "Trident") or (http.user_agent contains "Headless") or (http.request.uri contains "--+") or (http.user_agent contains "{") or (http.user_agent contains "$") or (http.user_agent contains "<") or (http.user_agent contains "script") or (http.request.uri contains "\\x") or (any(http.request.headers["sec-fetch-site"][*] contains "cr") and any(http.request.headers["sec-fetch-mode"][*] contains "no"))此规则组误报率极低,视实际情况,选择质询或阻止。 5. 配置超级自动程序攻击模式(Super Bot Fight) 点击安全性,选择自动程序。 81.png图片 开启后,CF会对部分模拟浏览器的自动化请求进行拦截(大概率是基于tls指纹,屏蔽了curl、golang等常见的tls指纹)。对低级的自动化请求有一定效果,聊胜于无。Business及以上版本可以开启对 likely automated 的请求的识别和阻止。 6. 开启托管规则集,并进行微调 91.png图片 编辑该规则,参考下图,对部分默认规则进行覆盖。 92.png图片 93.png图片 7. 开启DDoS规则覆盖,微调默认规则 94.png图片 95.png图片 点击编辑规则,搜索impersonate,修改部分参数,如下图所示,然后保存。 96.png图片 8. 调整安全级别、开启浏览器完整性检查 点击安全性,选择设置,将安全级别由默认值改为高,并开启浏览器完整性检查。 注:该功能作用甚微。 9. 关闭IPv6、Pseudo IPv4以及洋葱路由 97.png图片 98.png图片 99.png图片 注:可根据实际情况决定是否关闭。关闭IPv6需借助api。 借助api关闭ipv6后,还需进一步在WAF规则里对::/0进行屏蔽。 10. 开启速率限制 在WAF中开启速率限制,具体配置需视情况而定。 100.png图片 11. 利用Snippets做一个简易的302 cookie验证 当我们请求path.net时,会发现网站会返回307状态码,且在响应头里有一个名为CRANE的cookie,正常浏览器访问会根据网站响应头,设置cookie,这样第二次访问的时浏览器就会携带cookie访问 path.net,而低级的自动化程序是无法自动获取并携带cookie去请求网站的,而这将会让程序陷入无尽的307循环,如下图所示。 101.png图片 据此,我们可以利用Cloudflare的Snippets做一个类似的简易人机验证,我们将访客的IP、访客UA以及自定义key进行组合,然后sha256对组合进行加密,并通过响应头发送给访客,访客访问网站时需携带snippets发送的cookie进行请求,才能顺利访问网站。 点击网站规则,选择Snippets,点击创建片段。 代码如下(仅供参考,自行修改secretKey的值) export default { async fetch(request) { const clientIp = request.headers.get('cf-connecting-ip') || ""; const ua = request.headers.get('user-agent') || ""; const secretKey = "h*dUm|mdS^6=QB)y"; // 组合并生成哈希值 const signatureBase = `${clientIp}${ua}${secretKey}`; const encoder = new TextEncoder(); const data = encoder.encode(signatureBase); const hashBuffer = await crypto.subtle.digest('SHA-256', data); const hashArray = Array.from(new Uint8Array(hashBuffer)); const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); let cookies = request.headers.get('Cookie') || ""; // 检查是否包含特定的 Cookie if (cookies.includes(hashHex)) { // 如果已经包含,直接返回原始请求 return await fetch(request); } else { // 否则生成重定向响应 const newResponse = new Response(null, { status: 302, headers: { "Set-Cookie": `_test=${hashHex}; Path=/; HttpOnly`, "Location": request.url, } }); return newResponse; } }, };根据实际情况,匹配snippets生效规则。 102.png图片 注: 1.该snippets没有对搜索引擎进行过白,如果需要过白部分请求,需要做额外的处理。 2.该snippets具有一定局限性,可以考虑纳入更多的请求参数,进一步完善snippets。 3.该snippets对高阶的自动化请求无效。 12. Snnippets拓展 例如可以利用snippets创建点击验证、验证码验证、hcaptcha验证等。 一些示例(需用海外IP访问) 点击验证 https://iplark.com/playground/captcha/click 103.png图片 图片验证码 https://iplark.com/playground/captcha/image 104.webp图片 Hcaptcha https://iplark.com/playground/captcha/hcaptcha 105.webp图片 Hcaptcha https://iplark.com/playground/captcha/hcaptcha image 首发于NodeSeek,本文转载。 -
甲骨文救砖ARM,无需重新挂载硬盘,netboot使用教程 本教程转(转LOC@千牛) 前言: 前些天,出给了一个大兄弟日本的甲骨文,当时差点玩死,就是因为系统装好了,但是密码忘了 还好大兄弟自己会技术,重新挂载硬盘,用另一个AMD去把ARM的给救回来了 但是问题来了:如果没有AMD,怎么修复已经挂掉的甲骨文呢? 这就要用到这个神器了:netboot 官网在 这里 。 之前有过经验的都知道netboot只要有启动文件,就能去修复,但是问题是如何来那个efi启动文件 步骤: 新建一个shell 终端 1.png图片 重启机器,一直按ESC键盘,然后进入Boot Manager / EFI Internal Shell 2.png图片 执行命令,初始化网络dhcp FS0: ifconfig -s eth0 dhcp ifconfig -l eth0 ping 8.8.8.8`3.png图片 执行tftp拉取文件 AMD机器 tftp 146.56.117.218 amd.efi amd.efi ARM机器 tftp 146.56.117.218 arm.efi arm.efi 4.png图片 使用拉取的efi文件修复、重装 exit命令退出,然后进入Boot Maintenance Manager/Boot From File 然后选择你下载的efi文件,进行重装 5.png图片 我主要说一下关于tftp的源,我这里放了一个我自己的,但是不保证啥时候忘了就删了,所以放一个自己的docker 有需要的自己直接用这个也能拉取了,对应改掉那个ip地址就行 docker run -itd --name tftpd \ -p 69:69/udp \ -e PUID=1111 \ -e PGID=1112 \ --restart unless-stopped \ langren1353/netboot-shell-tftp后话: 最后附一个启动成功的图,剩下的自己摸索吧,基本上没啥问题了(据说AMD的好像不行,内存太小了启动不起来,ARM无问题): 6.png图片 本次教程部分内容、思源来自这里 : -
在CoudFlare上进行SaaS设置的教程 CloudFlare是一个非常不错的SaaS平台,它可以帮助用户免费使用CNAME接入域名解析。通过CloudFlare的DNS服务,用户可以快速地将自己的域名解析到具体的IP地址上,从而实现云上部署。 一、准备工作 首先,假设我建站,用hostloc.com这个域名,DNS可以接入到dnspod(或者其他) 其次,我需要一个便宜的域名,123456.xyz 或者其他任意能接入CF的域名均可,一般选择比较便宜的就行了,甚至免费的,比如eu.org ————————————————————————————————— 接着,登录CF,正常接入123456.xyz这个域名(DNS接入CF官方) 接入完成后点进123456.xyz的设置界面,侧栏找到“SSL/TLS”,点进去 有个“custom-hostnames”,然后一路点,(第一次点开的话)需要你绑卡或者绑paypal 支付方式绑定完事之后,启用SAAS 2023-11-16_08-09-1536x772.png图片 二、具体设置 ———————————————————————————————— 第一步,在“custom-hostnames”页面,“Add Fallback Origin”添加回退源,就是要告诉CF你的源站 (二级域名)前缀随便用啥都行,不影响,我这里就用mjj,也就是mjj.123456.xyz 首先去“DNS”那里,添加一个A记录(或其他)指向你的源站,云朵开不开不影响,建议开着 然后回到“custom-hostnames”的“Add Fallback Origin”,输入你刚刚指向源站的那个二级域名 过1分钟左右,就显示Fallback Origin status: Active 以上(第一步)需要操作的只有123456.xyz这个域名 另补充一下,这个xyz域名只需在CloudFlare里操作,不需要在源站服务器的nginx/apache之类的服务绑定。不要混淆了。 —————————————————————————————————————— 第二步,还是在“custom-hostnames”页面,有个很明显的大按钮“Add Custom Hostname” 点开,输入建站的域名,假设是www.hostloc.com,其他不用改,tls1.0、txt验证 添加后会提示你,让你设置2个txt记录,分别是域名所有权的和SSL证书的验证,这个没什么好说的,不会的话我也没办法了 再设置一个cname记录到mjj.123456.xyz(前面设置回退源的那个二级域名)(另外如果有之前就A到CF的IP的记录也先暂停或者删掉) 为什么要这样设置的,因为如果你A记录解析到自选IP,有时会过不了验证 顺利的话,过几分钟就验证完了,有时会长一点 验证完成后,cname记录mjj.123456.xyz是可以删掉的,这样不会暴露这个xyz域名,再就是因为相当部分MJJ搞这个目的是自选IP对吧,然后就放飞自我吧,直接A你的自选IP 以上(第二步)需要操作的DNS只有hostloc.com这个域名 ———————————————————————————————————————— 结束 -
提高安全性VPS修改SSH端口及从密码改为密钥登录 6005d0a469ed9d8392dc5a3334f2bffe.jpeg图片 一、修改端口 Debian、Ubuntu等系统比较简单 (1)输入下列命令 nano /etc/ssh/sshd_config 在修改端口之前,先添加一个端口,找到 Port 进行修改 将Port 22 去掉# 并添加新端口 Port 10022 修改之后,进行保存 (2)重启 systemctl restart sshd 2.Centos稍微复杂点 (1)输入下列命令 nano /etc/ssh/sshd_config在修改端口之前,先添加一个端口,找到 Port 进行修改 将Port 22 去掉# 并添加新端口 Port 10022 修改之后,进行保存 (2) 向防火墙中添加修改的端口 假设端口修改为12345,向防火墙中添加端口的命令为: firewall-cmd --zone=public --add-port=12345/tcp --permanentreaload 防火墙规则: firewall-cmd --reload查看端口是否添加成功: firewall-cmd --zone=public --query-port=17186/tcp注意: 这里的设置是在 CentOS 7 版本下的操作 , 低于 CentOS 7的版本不支持 防火墙如果未启用,可通过下列命令打开: systemctl start firewalld查看防火墙状态: systemctl status firewalld(3)向SELinux中添加修改的SSH端口 在向SELinux中添加端口之前需要先安装SELinux的管理工具 semanage (如果已经安装了就直接到下一步) : yum provides semanage在这里我们看到运行 semanage 需要先安装其依赖工具包 policycoreutils-python : yum install policycoreutils-python安装好之后,可以直接使用 semanage 命令: 查询当前 ssh 服务端口: semanage port -l | grep ssh向 SELinux 中添加 ssh 端口: semanage port -a -t ssh_port_t -p tcp 12345验证 ssh 端口是否添加成功: semanage port -l | grep ssh添加成功之后就可以重启 ssh 服务了: serivce sshd restart———————— 二、改用密钥登录 以Debian为例: 1.首先打开xshell等工具创建密钥,如xshell->工具(T)->新建用户密钥生成向导(W) 密钥类型: ECDSA 密钥长度选择 521 位->下一步 再次下一步->名称可修改,这里默认 id_ecdsa_521 接着输入给密钥设的密码->下一步 保存为文件,默认在..Xshell\Sessions文件夹中,文件名 id_ecdsa_521.pub 2.上传以及测试 cd /root/.ssh/ 安装上传工具 apt-get install lrzsz 上传 rz -be 查看是否上传成功 ls authorized_keys id_ecdsa_521.pub 如果没有authorized_keys 需要先创建 touch authorized_keys && chmod 700 /root/.ssh/ && chmod 600 /root/.ssh/authorized_keys cat id_ecdsa_521.pub >> authorized_keys && chmod 600 authorized_keys 如果碰到.ssh文件夹不存在 ssh localhost -p 21755 如果没改过端口 就是ssh localhost 输入yes 输入root密码 如果提示密钥没在电脑上注册 root目录下键入以下命令 chmod 700 .ssh cd .ssh chmod 600 * service sshd restart断开ssh,重新连接,使用密钥登录 3.禁止密码登录 注意:验证了密钥能正常登陆之后,再执行以下步骤(避免无法远程连接服务器) 这三条可以一起复制在xshell中执行 sed -i 's/^#\?\(PubkeyAuthentication\s*\).*$/\1yes/' /etc/ssh/sshd_config; sed -i 's/^#\?\(PasswordAuthentication\s*\).*$/\1no/' /etc/ssh/sshd_config; sed -i 's/^#\?\(ChallengeResponseAuthentication\s*\).*$/\1no/' /etc/ssh/sshd_config Restart SSH service systemctl restart sshd 如果禁止密码登录失效(常见于ubuntu) 删除50-cloud-init.conf文件或者在50-cloud-init.conf配置文件中配置禁止密码登陆参数 vim /etc/ssh/sshd_config.d/50-cloud-init.conf (1)修改为 PasswordAuthentication no PubkeyAuthentication yes(2)保存退出 然后重启SSH systemctl restart ssh完毕。 -
甲骨文oracle找回二次验证的方法 转自LOC 官方认证的方法: 因为更换手机丢失了二次验证。 然后给客户沟通,获得了找到二次验证的办法,希望对你有用。2023-10-02_09-33.png图片 1、登录到账号登陆界面,查看地址栏当中自己的IDCE地址(yourIDCS_Stripe_here)部分,并复制。 https://idcs-yourIDCS_Stripe_here.identity.oraclecloud.com/比如“https://idcs-1228021fd2t34dca9981884078364f13.identity.oraclecloud.com/ui/v1/signin” 2、然后将自己的IDCS地址(yourIDCS_Stripe_here)复制到下方连接相应的位置,并在浏览器中重新打开新的地址。 https://idcs-yourIDCS_Stripe_here.identity.oraclecloud.com/ui/v1/myconsole?root=my-info&my-info=my_profile_security比如“https://idcs-1228021fd2t34dca9981884078364f13.identity.oraclecloud.com/ui/v1/myconsole?root=my-info&my-info=my_profile_security” 3.在新的地址当中登录你的账号 4.重新设置只验证设备 -
op 5O/online 3O C2350 安装Win10/win2012 教程 首先在面板上用救援模式启动,执行dd命令后退出,再以正常模式启动。 dd win10 ltsc wget -qO DebianNET.sh qiu.sh/dd && bash DebianNET.sh -dd "https://dl.lamp.sh/vhd/zh-cn_windows10_ltsc.xz"用户名: administrator 密码: Teddysun.com 9be8281b5de5222b73a38a828684f494.jpeg图片 Windows Server 2012 R2中文版: wget -O- --no-check-certificate https://down.xieyang.org/Windows/ISO/Win2012R2CN.gz |gunzip|dd of=/dev/sda用户名 :Administrator 密码:Laiboke.com -
free.fr免费空间搭建图床及小文件分享Jirafeau及利用Cloudflare进行反代设置 Jirafeau是更新到现在的一款简洁易用的临时在线PHP网盘程序,允许您“一键式文件共享”。它可以以一种简单的方式上传一个文件,并为其提供一个独特的链接。因此Jirafeau既可以作为图床也可以作为小文件分享。 1、首先实现对空间的文件传输,最简单是上传一个PHP webshell 方法1:利用法国代理访问官方的ftp,地址:ftpperso.free.fr 方法2:买个法国VPS自己做web ftp,也可用别人搭建好的,推荐一个:https://ftp.feixiang.eu.org/ 账户/密码:mjj/mjj(感谢LOC网友@feixiang) 上传一个PHP webshell,推荐filebox.php,详见:https://github.com/or2me/Filebox 深度截图_选择区域_20220601112204.png图片 2、启动Free.fr支持php5.6 free.fr空间目前还不支持php7,所以所有php都要支持5.6及兼容的才行。 在根目录新建一个文件 .htaccess ,然后把下面的代码粘贴进去。 <IfDefine Free> php56 1 </IfDefine> ErrorDocument 404 /404.html3、上传Jirafeau 假设你的空间名为abc.free.fr,那么你的filebox访问地址为:http://abc.free.fr/filebox.php 在https://gitlab.com/mojo42/Jirafeau上下载压缩包,zip结尾最好 利用filebox上传文件到根目录,上传时选择解压缩。 4.设置Jirafeau (1)手动新建一个sessions文件夹在根目录,记得给写入权限。 (2)上传好的文件一般解压缩成文件夹Jirafeau-master。 (3)访问http://abc.free.fr/Jirafeau-master/install.php进行安装。注意末尾带/,具体安装见Jirafeau主页。 (4)访问http://abc.free.fr/Jirafeau-master/index.php即可实现访问了,分享图或者文件即可。 5.CloudFlare Workers反代 (1)创建一个Workers,启动器选HTTP handler。 深度截图_选择区域_20220601091810.png图片 编辑上面的Workers,复制下面代码,修改下域名,支持二级以上目录,比如http://abc.free.fr/Jirafeau-master/,但同样的必须以/结尾。 addEventListener('fetch', event => { const request = event.request; const url = new URL(request.url); const response = fetch('http://abc.free.fr/Jirafeau-master/' + url.pathname + url.search, { method: request.method, headers: request.headers, body: request.body, }); event.respondWith(response); (2)添加域名,在域名里添加路由,假设你添加的域名为cba.xxx.xyz,解析A的IP可以随便填,例如1.2.3.4,然后在worker里添加: 深度截图_选择区域_20220601092545.png图片 (3)注意在Scrape Shield 里面 关闭 Hotlink 保护 深度截图_选择区域_20220601092754.png图片 (4)为防止免费空间因为滥用而被限制,设置下缓存。 深度截图_选择区域_20220601093045.png图片 深度截图_选择区域_20220601093238.png图片 6、如果以上设置正确,搭建就完成了 访问http://abc.xxx.xyz即可看到Jirafeau。 深度截图_选择区域_20220601093425.png图片 -
推荐一个好用的开源的思维导图md笔记软件 1.png图片 特色 使用方便:使用 Monaco 内核,专为 Markdown 优化,拥有和 VSCode 一样的编辑体验。 功能强大:支持历史版本回溯;可在文档中嵌入小工具、可运行的代码块、表格、PlantUML 图形、Drawio 图形、宏替换等;支持接入 OpenAI 自动补全。 兼容性强:数据保存为本地 Markdown 文件;拓展功能尽量用 Markdown 原有的语法实现。 插件拓展:支持用户编写自己的插件来拓展编辑器的功能。 支持加密:用来保存账号等隐私文件,文件可单独设置密码。 注意事项 为了更高的拓展性和方便性,Yank Note 牺牲了安全防护(命令执行,任意文件读写)。如果要用它打开外来 Markdown 文件,warning请务必仔细甄别文件内容是值得信任的warning。 加密文件的加密解密操作均在前端完成,请务必牢记自己的密码。一旦密码丢失,就只能暴力破解了。 特色功能 以下功能具体使用可参考特色功能说明 同步滚动: 编辑区和预览区同步滚动,预览区可独立滚动 目录大纲: 预览区目录大纲快速跳转 版本管理: 支持回溯文档历史版本 文件加密: 以 .c.md 结尾的文件视为加密文件 自动保存: 文件编辑后自动保存,未保存文件橙色标题栏提醒(加密文档不自动保存) 编辑优化: 列表自动补全 粘贴图片: 可快速粘贴剪切板里面的图片,可作为文件或 Base64 形式插入 嵌入附件: 可以添加附件到文档,点击在系统中打开 代码运行: 支持运行 JavaScript、PHP、nodejs、Python、bash 代码 待办列表: 支持显示文档中的待办进度,点击可快速切换待办状态 快速打开: 可使用快捷键打开文件切换面板,以便快捷打开文件,标记的文件,全文搜索文件内容 内置终端: 支持在编辑器打开终端,快速切换当前工作目录 公式解析: 支持输入 katex 公式代码 样式风格: Markdown 使用 GitHub 风格样式和特性 数据仓库: 可定义多个数据位置以便文档分类 外链转换: 将外链或 BASE64 图片转换为本地图片 HTML 解析: 可以直接在文档里面使用 HTML 代码,也可以使用快捷键粘贴复制 HTML 为 Markdown docx 导出: 后端使用 pandoc 做转换器 TOC 支持: 生成 TOC 在需要生成目录的地方写入 [toc]{type: "ol", level: [1,2,3]} 即可 编辑表格单元格: 双击表格单元格即可快速编辑 复制标题链接: 复制标题链接路径到剪切板,便于插入到其他文件 嵌入小工具: 文档支持内嵌 HTML 小工具 嵌入 PlantUML 图形: 在文档内内嵌 PlantUML 图形 嵌入 drawio 图形: 在文档中内嵌 drawio 图形 嵌入 ECharts 图形: 在文档中嵌入 Echarts 图形 嵌入 Mermaid 图形: 在文档中嵌入 Mermaid 图形 嵌入 Luckysheet 表格: 在文档中嵌入 Luckysheet 表格 嵌套列表转脑图展示: 可将嵌套列表用脑图的方式展示 元素属性书写: 可自定义元素的任意属性 表格解析增强: 表格支持表格标题多行文本,列表等特性 文档交叉链接跳转: 支持在文档中链接其他文档,互相跳转 脚注功能: 支持在文档中书写脚注 容器块: 支持类似 VuePress 默认主题的自定义容器 宏替换: 支持内嵌 JavaScript 表达式动态替换文档内容 图床: 支持 PicGo 图床 OpenAI: 支持接入 OpenAI 自动补全 自定义插件: 支持编写 JavaScript 插件拓展编辑器功能。插件放置在 主目录/plugins 中。 链接: github主页 全平台下载页面 截图: 6_ZH-CN.png图片 7_ZH-CN.png图片