本文件以多种语言发布。如各语言版本存在差异,以波兰语版本为准。
版本 1.1 · 最后更新:2026年10月22日
LW IT Solutions Company Lukas Wójcik(al. Tadeusza Kościuszki 80/82, lok. 301, 90-437 Łódź, Poland)依据 GDPR 第 32 条为保护 formexposed 服务所采取的措施。本页面作为附件 2 构成数据处理协议的组成部分。
1. 范围和原则
这些措施适用于本服务处理的所有数据:既适用于我们代表客户处理的数据(见数据处理协议),也适用于由我们自己担任控制者的数据,例如客户账户和日志。两者之间没有单独的保护等级;保护账户的措施同样保护作为处理者处理的数据。
依据 GDPR 第 32 条第 1 款的结构。假名化和加密((a) 项)见第 4 节;系统持续的保密性、完整性、可用性和韧性((b) 项)见第 3、5、6 和 7 节;发生事件后及时恢复可用性的能力((c) 项)见第 7.1 节;定期测试、评估和评价有效性的程序((d) 项)见第 9 节。我们根据数据保护影响评估中所述的风险,并考虑到现有技术水平和实施成本,选定了这些措施。
原则:以实测为准,而非以意图为准。此处仅列出已在代码或运营中实际实施的内容。计划中但尚未实施的内容在第 10 节中明确列为“计划中”。此处未列出的措施,不会被默认视为已经存在。
我们有意不列出机器名称、内部地址、端口、用户名和软件版本。这些信息无助于任何人评估措施,却会帮助企图规避措施的人。根据数据处理协议进行审计而需要这些信息的人,将在该审计过程中在保密条件下获得审计所必需的信息。
2. 服务的结构
本服务运行在提供者位于波兰的两台自有服务器上,两台服务器处于同一内部网络中:
- 带数据库的 Web 服务器。它交付应用程序、存放数据库、发送通知并备份数据。只有它被设置为接受来自互联网的请求。
- 扫描服务器。它在浏览器中对第三方网站和自有网站进行检查,并运行语言模型,用于对个别表单进行分类、为付费账户将扫描检测结果汇总为按优先级排列的行动计划,以及在“Fix it for me”中添加代码。它未被设置为接受来自互联网的请求,而是自行从 Web 服务器获取任务,并将结果返回给 Web 服务器。
运营中不涉及任何托管、数据中心或云服务提供商,也不会向任何外部 AI 服务发送任何数据。哪些第三方会接收数据,请参阅次级处理者页面。
3. 保密性
3.1 物理访问控制
服务器位于提供者在波兰的不对公众开放的场所内。只有所有者有权进入(据运营者声明)。此处有意不提供该地点的确切地址。
3.2 访问控制:登录本服务
- 密码仅以 PHP 标准方法(bcrypt)生成的哈希值存储。如果标准方法发生变化,将在下次登录时更新哈希值。对于使用未知地址的登录尝试,服务器仍会计算哈希值,以免响应时间透露账户是否存在。同样,对密码重置请求的响应在措辞和耗时上均不会透露账户是否存在;重置邮件每小时最多向同一地址发送三次。新密码长度必须至少为十个字符,且不得超过 72 字节(UTF-8),因为 bcrypt 不会考虑更多字节。更改密码会使所有其他设备退出登录;通过链接重置密码会使所有设备退出登录,且该链接仅可使用一次。
- 失败尝试后锁定。失败的登录按 IP 地址计数;在短时间内失败次数过多(目前为 15 分钟内八次)后,将暂时阻止从该地址登录。成功登录会重置该计数器。尝试记录在七天后删除。此外,在每次检查密码之前,都会按账户(对于未知地址,按所输入的地址)和按 IP 地址各计一次尝试,包括成功的尝试:目前同一 IP 地址对每个账户在 15 分钟内最多八次,每个 IP 地址在 15 分钟内最多 80 次;为防范分布式猜测,对每个账户在所有地址合计的情况下适用一个明显更高的限制。因此,来自其他地址的失败尝试不会再将所有者锁定在其账户之外。这些计数器仅包含 HMAC 密钥,不含明文电子邮件地址或 IP 地址,并随其时间窗口到期。如果计数器存储不可用,则拒绝登录,而非放行。同类限制也适用于以下情形:在更改密码或地址、开启或关闭第二因素、转让工作区、数据导出和删除账户之前确认密码(每个账户 15 分钟内五次尝试)、注册(每个 IP 地址每小时十次)以及客户门户的密码(每个门户和 IP 地址十次尝试,每个门户 15 分钟内 50 次)。
- 第二因素。每个账户都可以启用依据 RFC 6238(TOTP)的一次性验证码登录。为此所用的密钥以加密形式存储在数据库中;加密密钥不存储在数据库中,因此仅凭数据库提取内容是不够的。已被接受的验证码不能再次使用。十个恢复码仅以哈希值存储。一次性验证码和恢复码限制为每个账户 15 分钟内十次尝试,包括设置期间。
- 管理区域仅限启用第二因素的账户。运营者的管理区域仅对已启用第二因素的账户开放。设置检查清单会报告每个未启用第二因素的管理员账户。
- 会话。会话 Cookie 无法被脚本读取(HttpOnly),仅通过 HTTPS 发送(Secure),并且不会随来自第三方网站、可能更改内容的请求一起发送(SameSite=Lax)。登录时会创建新的会话 ID,因此事先植入的 ID 将失效;服务器不接受非其自行签发的会话 ID。每个账户都可以查看其已登录的设备,并可逐个将其退出登录。
- “保持登录状态”为可选项,有效期为 30 天,但不适用于具有管理权限的账户;此类账户始终须使用密码和第二因素登录。令牌由两部分组成;用于验证的部分仅以哈希值存储在数据库中。每次使用都会将其替换为新令牌,即使是同时发出的请求,每个令牌也仅有效一次,因此被盗令牌最迟会在下一次真实访问时被发现。
- 电子邮件中的链接。用于确认地址和重置密码的链接仅以哈希值存储在数据库中。重置链接有效期为一小时,确认注册的链接有效期为 72 小时,确认已更改地址的链接有效期为 24 小时。如果电子邮件地址被更改,未使用的重置链接将失效。
- 接口。API 密钥、扩展的连接码和部署码仅以哈希值存储。API 密钥每分钟只能使用有限次数;扩展的连接码有效期为 15 分钟,且仅可使用一次。
- 机器人防护适用于公开表单(注册、登录、密码、检查、安全响应头工具、退出申请、支持和联系):使用仅在提交时加载的 Google reCAPTCHA。只有 Google 针对该表单的确切操作给出的、得分足够的有效响应才会被接受;如果 Google 在三秒内未响应,则拒绝该提交。详情请参阅隐私政策。
3.3 访问控制:服务器管理
- 可从互联网访问的服务器使用数据包过滤器,仅允许其提供的服务通过,并在服务器管理登录多次失败后自动封锁相关地址。
- 服务器之间的自动化流程使用各自的密钥,其权限受到严格限制。Web 服务器用于交付扫描器新版本的密钥只能在扫描服务器上执行固定列表中的命令,并且只能以只写方式复制到扫描器的目录中;无法使用该密钥进行交互式登录,每条被拒绝的命令都会被记录。同样,扫描服务器只能将截图写入 Web 服务器上的特定目录。
- 提供网站服务的进程既没有对生产安装的写入权限,也没有扫描服务器的密钥。在管理区域中触发的部署只会登记一个任务,由单独的运行程序执行。
- 数据库凭据和密钥等机密信息保存在所服务目录之外的配置文件中,部署时不会一并复制。Web 服务器配置不会通过 Web 界面分发。
3.4 授权控制:本服务内的权限
- 角色。每个工作区设有所有者、管理员和只读成员三种角色。更改、删除、邀请和存储凭据仅限所有者和管理员;只有所有者可以更改角色和移除成员。邀请仅在发出邀请的人仍为所有者或管理员时有效。只读成员只能看到截短至主机名的 webhook 和聊天频道地址,因为仅凭该地址即可向频道发帖。检查在服务器上进行,而不仅仅在界面中进行。
- 与工作区绑定。域名和设置仅对工作区成员开放。对于每次检查,本服务都会在一个无法猜测的随机链接下生成报告;通过该链接无需登录即可访问检查的结果和截图,截图只能连同其所属报告的链接一起访问。该链接会出现在账户和提醒中;转发该链接的任何人即转发了该报告。
- 更改状态的请求需要每个会话的安全令牌(CSRF 防护),该令牌以恒定时间进行比较。
- “以客户身份查看”。为提供支持,运营者可以以客户所见的方式查看应用程序。该视图在一小时后结束,禁止更改密码、地址、第二因素、设备和订阅,也禁止导出和删除,在此期间关闭管理区域,并会被记录。结束该视图会使运营者完全退出登录;运营者只有使用密码和第二因素重新登录后才能返回管理区域。客户可在其数据导出中看到该记录。
- 管理。只有少数经明确授权的账户拥有管理权限;管理方每次重置第二因素都会被记录。
3.5 分离控制
- 客户的数据按工作区进行逻辑分离。已登录区域中的每条读写路径都带有这种绑定;此外,报告还可通过其链接访问(第 3.4 节)。
- 开发和运营在不同的安装中进行,使用不同的数据库和不同的数据库用户。开发用户无权访问生产数据库。真实客户数据不会被复制到开发环境中;我们在开发环境中使用生成的示例数据。
- 扫描器在每个环境中都有自己的凭据,其权限仅限于执行任务所需的数据。它无法读取账户、计费或日志。
- 同一提供者的其他服务也运行在该 Web 服务器上。这些服务有各自的数据库和数据库用户,无权访问本服务的数据。
4. 加密、假名化和数据最小化
4.1 登录后扫描所用的凭据
对于该功能,客户需存储测试账户的用户名和密码。这些是本服务中最敏感的数据,因此采用与其他所有数据不同的保护方式:
- 存储时,Web 服务器使用扫描服务器的公钥对其加密(ECIES:X25519,每条记录使用一次性密钥,HKDF-SHA256,AES-256-GCM)。私钥仅存在于扫描服务器上。Web 服务器、数据库和备份中仅包含密文;我们在这些地方也无法读取。
- 每条记录都以密码学方式与其域名绑定。如果被移至其他域名,解密将失败。
- 进行扫描时,密文会附加到任务上。扫描服务器将其解密,并仅通过标准输入将凭据传递给检查容器,绝不作为会在进程列表中可见的命令行参数传递。扫描服务器读取后,密文即从任务中删除;任何残留最迟在一小时后由运行程序清除。
- 凭据绝不显示、绝不记录、绝不通过 API 输出,也不会被导出。界面仅显示用户名的第一个字符和长度。移除凭据时将覆盖密文。
- 在登录后,扫描器只进行读取:不提交、不进行主动测试、不截图,不访问注销、删除或取消页面。
4.2 其他加密和哈希
- 密码、恢复码、客户门户密码、API 密钥、连接码和部署码、“保持登录状态”令牌、设备列表中的会话 ID 以及用于确认和重置的链接仅以哈希值存储。
- 第二因素的密钥以加密形式存储(第 3.2 节)。
- 我们不声称对整个数据库进行静态加密。敏感值按上文所述单独加以保护。
4.3 通过设计实现数据最小化
- 送达检查:仅读取邮件标头以及正文最多前 8 KB 的内容。只有时间、归属关系、(如适用)测试提交的 ID 以及真实性检查(SPF、DKIM、DMARC)的结果会进入数据库,内容或完整的发件人地址绝不会进入数据库。最近一封电子邮件的真实性检查结果与域名一起保留,并被下一封电子邮件的结果覆盖;其中包含投递邮件服务器的 IP 地址和发件人的电子邮件域名。电子邮件在成功处理后从邮箱中删除;如果读取或删除失败,则在下一次成功运行时删除。
- 检查:表单结构以字段名称、类型和标签、必填和可见性属性的形式存储,不含字段值;扫描器仅在检查期间读取预填隐藏字段的开头部分(最多 24 个字符)和 data 属性的开头部分(最多 60 个字符),且不予存储。完整检查的截图未经遮盖处理;只有浏览器检查会遮盖输入字段。表单的收件人地址仅以域名形式存储。主动测试提交仅包含带有标识的测试文本,不含个人数据。
- WordPress 和 TYPO3 扩展仅传输每日数据以及插件清单等特征信息,对于已连接的 WordPress 插件,还传输用于群体防护(默认开启)的被拦截消息中链接的域名;不传输其他内容,也不传输访客的姓名、地址或 IP 地址。可选的表单和字段错误计数默认关闭。
- “Fix it for me”:所粘贴的代码仅在请求期间处理,不予存储。
- 徽章:客户网站上的徽章图片不设置 Cookie,也不启动会话。
- 发送到运营者手机的运营通知为不含变量的固定文本,即不含姓名、地址或内容。通过电子邮件发送给运营者的错误通知包含错误消息的原始文本,未经清理,截断为 400 个字符;在个别情况下可能包含地址或链接。
- 群体防护:客户的扩展之间仅共享被拦截垃圾信息中链接的域名;IP 网段的交换已关闭。
- 位置:IP 地址所属国家根据本地数据库文件确定;不会向任何地理定位服务发送地址。
5. 防止扫描器被滥用
扫描器使用真实浏览器加载第三方页面。如果没有防护,它可能成为外部人员借以访问我们内部网络或其他非公开目标的工具(服务器端请求伪造)。因此,我们设置了两个相互独立的防护层,并对每一次运行进行隔离。
5.1 隔离运行
- 每次检查都在其自己的容器中运行,运行结束后容器即被移除。容器在没有管理员权限、没有额外操作系统能力且无法提升权限的情况下运行。除少量易失性区域外,其文件系统为只读。
- 内存、进程数和运行时间均受限制;超时的运行将被终止。
5.2 网络:两个防护层
- 第一层,位于扫描器中:在扫描前以及之后浏览器发出的每一个请求(包括重定向和嵌入内容)之前,都会检查地址解析到何处。私有、本地、保留和文档用网段(IPv4 和 IPv6)都会被拒绝,Web 常用端口以外的端口同样会被拒绝。浏览器不允许 Service Worker,WebSocket 连接会被关闭,因为两者都可能绕过此项检查。
- 第二层,位于网络中:容器在其自己的网络中运行。防火墙规则仅允许从该网络通过 Web 端口连接互联网;连接私有网络(包括我们放置 Web 服务器和数据库的内部网络)会被阻止。检查运行本身所需的例外仅限于必要范围,并在我们的内部文档中加以说明。即使某个名称在第一次检查之后才解析到不同地址,这一层同样有效。
5.3 Web 服务器发出的请求
当 Web 服务器自行请求第三方地址时——用于域名控制权证明、安全响应头工具、暴露文件搜索、脉冲请求、RDAP 查询和证书检查、webhook 和聊天提醒以及可选的第二检查点——适用相同的规则:仅限 Web 协议,仅限 Web 常用端口(webhook 和聊天提醒仅限通过 HTTPS 使用标准端口),仅限公网地址,仅连接到事先检查过的确切地址,从而使名称无法事后被重定向到内部目标;重定向要么完全不跟随,要么仅手动跟随且每次重新检查;时间限制较短;对于域名控制权证明、脉冲请求以及浏览器检查中的第二检查点,还限制响应大小。
5.4 扫描器不会在第三方网站上做的事
- 对于客户,主动测试提交(每次检查最多五次)仅针对已提供控制权证明(DNS、meta 标签、文件或扩展)的域名进行;唯一的例外是对我们自有测试和演示域名进行的内部检查。已提供控制权证明的域名的主机名无法更改,以免证明转移到其他主机。其他一切都是被动的:像访客一样读取页面。
- 浏览器检查进行到提交前的步骤为止,不会触发任何订单、付款或提交。
- 排除检查列表中的域名不会被检查;正在进行的监控在下一次计划检查时结束。
6. 完整性:传输和输入
6.1 传输
- 应用程序只能通过 HTTPS 从互联网访问;浏览器被指示在一年内仅使用 HTTPS(HSTS)。证书会自动续期。
- 其他响应头限制将应用程序嵌入第三方页面、猜测文件类型以及将表单提交到第三方目标。内容安全策略只允许服务器在相应响应中放行的脚本在应用程序中运行;当前的浏览器不会执行注入到 HTML 中的脚本或事件处理程序。
- 送达检查邮箱通过带证书验证的加密连接读取。
- Webhook 可以使用客户的密钥进行签名(带时间戳的 HMAC-SHA256),以便接收方验证来源和完整性。发送到可选第二检查点的请求均经过签名,对于浏览器检查,其响应也经过签名。
- 公开说明:我们内部网络中的连接并非全程加密。登录后扫描所用的凭据则全程保持加密(第 4.1 节)。
6.2 输入控制和日志
- 账户和工作区中的重要操作(例如登录、域名变更、提醒目标和权限变更、删除、支持访问)会连同账户、时间、IP 地址和国家记录在活动日志中,并在 365 天后删除。
- 为安全和防止滥用而保留的页面访问记录在 60 天后删除,错误日志在 90 天后删除,已发送电子邮件的内容在 30 天后删除。所请求地址和来源页面中的访问令牌(例如报告或门户链接中的令牌)在页面访问记录中仅以掩码形式出现。
- 对合同文件的接受会连同所显示的版本、其校验和、时间、IP 地址和浏览器标识一并存储。
- 证据日志可以加盖外部时间戳机构的时间戳;发送给该机构的仅为内容的校验和,而非内容本身。
7. 可用性和韧性
7.1 备份
- 数据库每晚备份。备份只有在其内容经过检查后才会获得最终名称:备份程序成功完成、至少包含一条记录、表的数量与数据库相同,并且包含完整运行的结束行。只有在新备份成功后才会移除较早的备份。
- 每份备份在 14 天后删除。存储位置在所有对外服务的目录之外;项目内部的位置会被拒绝。
- 恢复测试:每周一次,将最新备份加载到一个一次性数据库中,与生产数据库逐表比较,然后再将其删除。测试结果会被存储。
- 如果备份或测试失败,将通过电子邮件并向运营者的手机发出通知。
- 事件后的恢复:如果数据库发生故障或数据损坏,我们将恢复最新的经过测试的备份。在此过程中,自该备份以来所作的更改(通常最多为一天的更改)可能会丢失;如果某次备份失败,丢失的更改相应更多。随后,我们会重新执行已知的较晚提出的删除请求(第 8 节)。我们不承诺任何特定的恢复时间。
- 公开说明的限制:备份目前与数据库存放在同一地点,且未单独加密。它们可以防范操作错误、错误更改和数据损坏,但不能防范服务器本身的丢失。计划在第二地点保存一份加密副本(第 10 节)。
- 登录后扫描所用的凭据在备份中仅以密文形式存在;第二因素密钥仅以加密形式存在,其加密密钥位于数据库之外。
7.2 监控
- 状态检查程序每五分钟检查一次本服务的各个组件,包括数据库、队列以及扫描器的心跳信号——扫描器即使在空闲时也会定期写入心跳信号。如果某个组件发生故障,将发出通知;恢复后,将发出解除提醒通知。
- 交叉监控:状态检查程序无法报告其所在机器的故障。因此,扫描服务器每分钟检查一次应用程序是否响应,在连续多次失败后,向运营者的手机发送固定文本的报告。反过来,Web 服务器监控扫描器的心跳信号;设置检查清单会显示交叉监控是否正在运行。
- 错误提醒:此前从未出现过的错误类型会立即报告一次;错误累积只会向运营者的手机发出一个信号;每天发送一次概览。这样,我们不会首先从客户那里得知错误。
- 公开说明的限制:两台服务器位于同一地点。整个地点的故障(例如断电或互联网连接中断)不会由任何提醒机制报告,而是由人工发现。
7.3 变更和部署
- 新版本首先在单独的开发环境中构建和测试。部署在写入第一个文件之前检查所有前提条件,执行数据库结构的变更,并在扫描器重新启动之前让正在运行的检查有序完成。
- 对于新客户的使用路径,有一项通过真实 HTTP 进行的冒烟测试,在切换后运行。我们不声称在每一次部署之前都会运行自动化测试套件。
8. 删除和保存期限
- 每晚运行的删除程序执行隐私政策和数据处理协议中规定的期限。它读取的设置与文本中数字所依据的设置相同;因此,就这些期限而言,文本与实际行为不会出现偏差。
- 检查结果(包括截图)在 13 个月后删除(每个域名保留最新一次),扩展数据在 13 个月后删除,提醒投递日志在 90 天后删除,支持请求在 24 个月后删除。
- 移除域名将删除该域名的数据,包括检查、表单、发现项、截图、报告、任务、提醒目标和日志、事件、送达数据、登录后扫描所用的凭据以及证据。
- 账户删除立即进行;没有其他成员的工作区连同其数据一并删除,有其他成员的工作区转给另一名成员,管理员优先,在管理员中则转给加入时间最长者。在其各自的期限届满之前,以下数据仍会保留:日志(其条目保留原账户编号,该编号不再指向任何现有账户,包括删除记录)、已发送的电子邮件、合同订立证明、支持请求、潜在客户检查的报告(最长 90 天)以及 Stripe 处的计费数据;详情请参阅隐私政策。
- 已删除的数据会保留在备份中,直至备份在 14 天后到期。我们不会在备份中进行定向删除;如果恢复某份备份,将再次手动执行已知的较晚提出的删除请求。
9. 组织和审查
- 人员:本服务目前由所有者本人运营。其他人员只有在作出保密承诺后才能获得访问权限,且仅限于必要范围,并且仅根据我们的指示处理数据(GDPR 第 29 条和第 32 条第 4 款)。
- 次级处理者:我们仅在审查其保证后,并根据 GDPR 第 28 条第 4 款订立合同后才会聘用次级处理者,并在次级处理者页面列出;详情适用数据处理协议。
- 个人数据泄露:如果个人数据泄露影响到作为处理者处理的数据,我们将及时(如可能,在 48 小时内)通知客户;详情适用数据处理协议。
- 漏洞报告:我们通过安全页面以及
/.well-known/security.txt文件接收报告。 - 设置和上线检查清单:在管理区域中,检查清单会测量与安全相关的设置状态,例如备份、未启用第二因素的管理员、邮件设置和心跳信号,并显示偏差。
- 对这些措施的审查(GDPR 第 32 条第 1 款 (d) 项):在本服务发生每一次重大变更时、在每一次安全事件后,以及在其他情况下每年至少一次。在审查中,我们评估这些措施是否有效以及是否仍与风险相适应,并将结果记录在本页面的新版本中;如无变化,则在第 11 节中注明审查日期。设置和上线检查清单持续测量其所涵盖设置的状态。
- 外部审计:目前未委托进行外部渗透测试,也没有安全认证。我们在此说明,以免任何人误以为存在。
10. 计划中,尚未实施
以下各项在新版本中被列为已实施之前,不属于我们承诺的措施:
- 第二地点备份:在服务器之外保存每晚备份的加密副本,使服务器即使完全丢失也不会导致数据丢失。
- 第二检查点:本服务已为从第二地点独立确认浏览器检查做好准备,但尚未设置。没有它,就无法从第二地点进行确认。
- 服务器管理的加固:此项工作仍在进行中。出于第 1 节所述的原因,我们不公布细节。
11. 状态和版本
- 版本 1.1 · 最后更新:2026年10月22日 · 各语言版本之间如存在差异,现以波兰语版本而非德语版本为准;无其他变更。
- 版本 1.0 · 最后更新:2026年10月11日 · 首个单独页面版本;此前为数据处理协议的附件 2。相较于原附件的更正:恢复测试每周运行,备份位于同一服务器上,并非每次部署前都运行自动化测试套件,内部网络中的连接并非全程加密。新增说明:登录后扫描所用凭据的加密、扫描器的隔离、交叉监控和错误提醒。
- 变更将以新的版本号在此处以及合同文件变更概览中公布;任何措施的削弱均适用数据处理协议规定的通知期限。
- 各语言版本之间如存在差异,以波兰语版本为准。