Files
peoplelib/site/privacy.html
T

293 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>隐私与安全 - PeopleLib</title>
<meta name="description" content="PeopleLib 的隐私与安全设计:书库笔记批注全部留在本地,AI 助手完全自带密钥且密钥经系统 safeStorage 加密,正文只在用户确认后外发,渲染进程无法读取任意路径,不解除 DRM。">
<meta name="theme-color" content="#fbfaf7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#12141a" media="(prefers-color-scheme: dark)">
<link rel="canonical" href="https://reader.mesalogo.com/privacy.html">
<link rel="icon" type="image/png" sizes="32x32" href="assets/icon-light-32.png" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="32x32" href="assets/icon-dark-32.png" media="(prefers-color-scheme: dark)">
<link rel="apple-touch-icon" href="assets/icon-light-256.png">
<meta property="og:type" content="website">
<meta property="og:site_name" content="PeopleLib">
<meta property="og:locale" content="zh_CN">
<meta property="og:title" content="隐私与安全 - PeopleLib">
<meta property="og:description" content="数据留在本地,AI 自带密钥,正文不自动外发,渲染层无法读取任意路径。这些是架构约束,不是可选开关。">
<meta property="og:url" content="https://reader.mesalogo.com/privacy.html">
<meta property="og:image" content="https://reader.mesalogo.com/assets/og-cover.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="PeopleLib 书库界面截图与应用图标">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://reader.mesalogo.com/assets/og-cover.jpg">
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<a class="skip-link" href="#main">跳到主要内容</a>
<header class="site-header">
<div class="wrap">
<a class="brand" href="index.html">
<img class="brand-light" src="assets/icon-light-256.png" alt="" width="30" height="30">
<img class="brand-dark" src="assets/icon-dark-256.png" alt="" width="30" height="30">
<span>PeopleLib</span>
</a>
<nav class="site-nav" aria-label="站点主导航">
<ul>
<li><a href="index.html">首页</a></li>
<li><a href="features.html">功能</a></li>
<li><a href="privacy.html" aria-current="page">隐私</a></li>
<li><a href="download.html">下载</a></li>
<li><a href="faq.html">常见问题</a></li>
</ul>
</nav>
</div>
</header>
<main id="main">
<section>
<div class="wrap">
<div class="section-head">
<span class="eyebrow">隐私与安全</span>
<h1>你的书库只属于你</h1>
<p>
下面这些不是隐私政策的模板文字,而是应用实际的架构约束。它们决定了某些事情在这个程序里做不到,
哪怕以后想加也要先推翻现有设计。
</p>
</div>
<div class="prose">
<div class="callout">
<h3>一句话总结</h3>
<p>
PeopleLib 没有服务端。它唯一会主动联网的场合是你按下搜索或下载,以及你启用检查更新。
AI 请求发往你自己填的接口地址。除此之外没有任何数据外发。
</p>
</div>
</div>
</div>
</section>
<section id="local-first">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">本地优先</span>
<h2>数据存在哪里</h2>
</div>
<div class="prose">
<p>书库条目、下载的文件、封面缓存、读书笔记、画布笔记、批注与阅读进度,全部写在本机的数据目录里。没有账号,没有同步服务端,没有遥测上报。</p>
<p>AI 对话记录同样只存在本机,按会话分别存成文件,随书籍删除一并清理。发给视觉模型的图像也留在本地,供你回看历史时显示,后续追问不会重复上传。</p>
<dl class="kv">
<dt>Windows</dt>
<dd>程序目录同级的 <code>data/</code>,便携布局。整个程序目录可以整体搬走或备份。</dd>
<dt>macOS</dt>
<dd><code>~/Library/Application Support/PeopleLib</code>。应用包在 DMG 里是只读的,数据不能放里面,升级覆盖也不会碰到这个目录。</dd>
</dl>
<p>想彻底删除数据,删掉上面对应的目录即可,不需要在任何地方注销账号。</p>
</div>
</div>
</section>
<section id="ai-key">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">AI 密钥</span>
<h2>完全自带密钥,没有中间人</h2>
</div>
<div class="prose">
<p>
应用没有内置任何厂商服务,也没有代理转发层。你在设置里填自己的接口地址与 API Key,
请求从你的机器直接发到你填的那个地址。项目方看不到你的用量,也收不到你的费用。
</p>
<ul>
<li><strong>密钥加密落盘</strong>:API Key 经操作系统提供的 safeStorage 加密后保存,不是明文配置文件。</li>
<li><strong>密钥不进渲染进程</strong>:界面进程拿不到密钥原文,实际请求由主进程发出。</li>
<li><strong>密钥不写日志</strong>:日志与错误信息里不会出现密钥或 token。</li>
<li><strong>Responses 协议不留存</strong>:走 OpenAI Responses 协议时请求带 <code>store: false</code>,不让服务端留存对话记录。</li>
</ul>
<p class="hint">注意:你选择的模型提供方会按它自己的政策处理收到的内容。PeopleLib 能控制的是不多发、不留副本、不经第三方转发。</p>
</div>
</div>
</section>
<section id="explicit-send">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">明确确认</span>
<h2>正文不会自动外发</h2>
</div>
<div class="prose">
<p>
打开一本书不会触发任何 AI 请求。只有你选定上下文范围并点击发送,内容才会离开本机。
</p>
<ul>
<li>选择「全文」范围时,无论文档多短都会强制弹出确认框,并提示可能超出模型的上下文限制。</li>
<li>确认框里显示的字数就是真正外发的字数。应用不做本地截断,界面数字与实际请求一致。</li>
<li>如果内容超出模型限制,应用把接口返回的报错转成中文提示,而不是悄悄少发一部分。</li>
</ul>
<p>
这条规则有过教训。早期版本按固定字数上限挖掉正文中间部分,结果 40 页的文档实际只发出 8 页,
而界面仍显示全文字数。那属于静默的数据丢失,用户还会把答非所问归因于模型,所以该行为已经移除。
</p>
</div>
<figure class="shot">
<img src="assets/shot-ai-confirm.jpg" width="1600" height="1076" alt="发送前的确认对话框,显示即将外发的字数与超出上下文限制的提示" loading="lazy">
<figcaption>发送确认框</figcaption>
</figure>
</div>
</section>
<section id="sandbox">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">进程边界</span>
<h2>界面进程读不到任意文件</h2>
</div>
<div class="prose">
<p>
Electron 应用最常见的风险是渲染进程能拿着任意路径去读盘。PeopleLib 把这条路堵住了:
渲染层不能传任意路径,所有文件访问都要经主进程的白名单校验,只放行书库中真实登记的条目。
</p>
<ul>
<li><strong>路径白名单</strong>:不在书库里的路径一律拒绝,无论渲染层怎么构造参数。</li>
<li><strong>会话与发送方绑定</strong>:超大 PDF 的分段读取会话与请求方绑定,句柄不透明,界面窗口销毁后立即回收。</li>
<li><strong>Markdown 双重净化</strong>Markdown 渲染禁用裸 HTML,再过一层 DOMPurify,防止文件内容里的脚本被执行。</li>
</ul>
</div>
</div>
</section>
<section id="drm">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">合规</span>
<h2>不绕过 DRM</h2>
</div>
<div class="prose">
<p>
带 DRM 的 MOBI、AZW、AZW3、KFX 与 Topaz 文件,以及损坏或不兼容的文件,应用不会尝试解除保护。
遇到这类文件会直接给出提示,建议改用系统关联的应用打开。
</p>
<p>
同样地,PeopleLib 只是对公开网络接口的客户端封装,不托管也不分发任何内容。
各数据源所提供作品的版权状态因司法辖区而异,使用者需自行确保用法符合当地法律与各站点的服务条款。
</p>
</div>
</div>
</section>
<section id="network-scope">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">联网范围</span>
<h2>什么时候会联网</h2>
</div>
<div class="prose">
<div class="table-scroll">
<table>
<caption>应用发起网络请求的全部场合</caption>
<thead>
<tr>
<th scope="col">场合</th>
<th scope="col">目标</th>
<th scope="col">触发方式</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">检索与下载</th>
<td>你选择的数据源站点</td>
<td>你点击搜索或下载</td>
</tr>
<tr>
<th scope="row">封面加载</th>
<td>条目对应的封面地址</td>
<td>展示书库或检索结果</td>
</tr>
<tr>
<th scope="row">AI 请求</th>
<td>你自己填写的接口地址</td>
<td>你确认发送</td>
</tr>
<tr>
<th scope="row">检查更新</th>
<td>项目的 GitHub Releases</td>
<td>手动检查,或你启用了启动时检查</td>
</tr>
</tbody>
</table>
</div>
<p>所有这些请求都走你在设置里配置的全局代理,包括封面请求。</p>
</div>
</div>
</section>
<section id="site-privacy">
<div class="wrap">
<div class="section-head">
<span class="eyebrow">本站点</span>
<h2>这个网站本身</h2>
</div>
<div class="prose">
<p>
本站是托管在 GitHub Pages 上的静态页面,没有分析脚本,没有 Cookie,没有第三方字体或 CDN 资源,
页面用的是你系统里已有的字体。作为托管方,GitHub 会按其自身政策记录访问日志,这一点本站无法控制。
</p>
</div>
</div>
</section>
<section class="cta">
<div class="wrap">
<div>
<h2>还有疑问</h2>
<p>常见问题里覆盖了费用、数据位置、格式支持与 macOS 首次打开。</p>
</div>
<p class="btn-row">
<a class="btn btn-primary" href="faq.html">查看常见问题</a>
<a class="btn btn-secondary" href="download.html">下载与安装</a>
</p>
</div>
</section>
</main>
<footer class="site-footer">
<div class="wrap">
<div>
<h2>站点</h2>
<ul>
<li><a href="index.html">首页</a></li>
<li><a href="features.html">功能</a></li>
<li><a href="download.html">下载与安装</a></li>
<li><a href="faq.html">常见问题</a></li>
</ul>
</div>
<div>
<h2>项目</h2>
<ul>
<li><a href="https://github.com/lofyer/peoplelib" rel="noopener">GitHub 仓库</a></li>
<li><a href="https://github.com/lofyer/peoplelib/releases" rel="noopener">版本发布</a></li>
<li><a href="https://github.com/lofyer/peoplelib/issues" rel="noopener">问题反馈</a></li>
</ul>
</div>
<div>
<h2>版本</h2>
<ul>
<li>PeopleLib 2.0.0</li>
<li>MIT 许可</li>
</ul>
</div>
<p class="legal">
本项目仅是对公开网络接口的客户端封装,不托管、不分发任何内容。部分数据源所提供作品的版权状态因司法辖区而异,
使用者需自行确保其使用方式符合当地法律与各站点的服务条款。
</p>
</div>
</footer>
</body>
</html>