项目地址:https://github.com/Python-island/Python-island
项目名称:Pyisland - 现代 Windows 灵动岛控制中心
本文件定义了 Python-island 项目的安全策略、漏洞报告流程以及安全开发规范,所有项目维护者和贡献者均须遵守。
Python-island 项目非常重视安全问题。若你发现任何安全漏洞或安全隐患,请不要在公开的 Issue 或社区讨论中提及,请通过以下方式私下报告:
- 发送邮件至项目维护者邮箱(详见项目主页)
- 在 GitHub 项目页面提交 Private Security Advisory(推荐)
-
进入项目 GitHub 页面,点击 Security 标签页;
-
点击 Report a vulnerability;
-
填写漏洞详情,包括:
- 漏洞描述与影响
- 复现步骤与攻击场景
- 受影响的版本范围
- 建议的修复方案(可选)
-
提交后,项目维护者会在 48 小时内 确认收到报告,并在一周内提供初步评估和修复计划。
有效的漏洞报告应包含以下信息:
| 信息项 | 说明 |
|---|---|
| 漏洞类型 | 如命令注入、权限提升、信息泄露、拒绝服务等 |
| 漏洞位置 | 受影响的具体文件、函数或模块 |
| 复现步骤 | 清晰、可操作的复现步骤 |
| 影响评估 | 对用户系统、数据或隐私的潜在危害 |
| 修复建议 | 建议的修复方案(可选) |
- 48 小时内:确认收到报告并开始评估;
- 1 周内:提供初步评估结果和预计修复时间;
- 修复发布前:与报告者保持沟通,同步修复进度;
- 修复发布后:在安全公告中致谢报告者(经其同意)。
Python-island 会对以下版本提供安全更新:
| 版本 | 支持状态 | 安全更新 |
|---|---|---|
| 最新 Release 版本 | 积极维护 | 提供安全补丁 |
| 历史 Release 版本 | 有限维护 | 仅在必要时提供关键安全补丁 |
| 更早版本 | 不维护 | 不提供安全更新 |
建议:始终使用项目的最新 Release 版本,以获得最新的安全修复和稳定性改进。
为确保项目代码的安全性,所有贡献者在开发和提交代码时,必须严格遵循以下安全规范。
Python-island 需要调用 Windows PowerShell 命令与系统交互,命令执行是项目的高风险区域,必须遵守以下要求:
-
禁止直接执行用户输入的字符串:所有来自外部输入(如 URL 检测、配置文件、剪贴板内容)的数据,在作为命令或参数传递给 PowerShell/subprocess 之前,必须进行严格校验和转义;
-
使用参数化执行:调用 PowerShell 时,优先使用列表形式传递参数,避免字符串拼接:
# 错误示例(禁止):直接拼接用户输入 import subprocess user_input = user_url subprocess.run(f'powershell -Command "echo {user_input}"', shell=True) # 正确示例:使用参数化列表 subprocess.run(['powershell', '-Command', 'echo', user_input], check=True)
-
避免 shell=True:除非绝对必要,禁止使用
subprocess.run(..., shell=True),shell=True 会增加命令注入风险; -
命令白名单:对于需要调用 PowerShell 的场景,建议维护一个命令白名单,仅允许执行预定义的、经过安全审查的 PowerShell 命令。
-
路径规范化:处理文件路径时,使用
os.path.normpath()或pathlib.Path.resolve()规范化路径,防止路径遍历攻击(如../../../etc/passwd); -
禁止使用用户输入直接拼接路径:所有来自外部的文件路径输入,必须进行严格校验,禁止直接拼接到文件操作函数中;
-
资源文件完整性:图标、样式文件等资源仅从项目内置路径加载,禁止动态加载用户指定路径的文件。
-
URL 检测与请求:仅对用户主动输入或剪贴板中的 URL 进行检测,请求前必须校验 URL 格式,禁止向未经验证的地址发送请求;
-
无网络权限声明:项目作为轻量化本地工具,不应主动发起网络请求,所有网络行为仅限于 URL 格式校验;
-
禁止硬编码凭据:代码中禁止硬编码任何 API Key、Token、密码或其他凭据。
-
最小权限原则:项目运行时请求的 Windows 系统权限应限于功能所需的最小范围;
-
避免持久化提权:不以持久化方式(如注册表、服务)提升权限,避免对系统安全策略造成长期影响;
-
管理员权限说明:部分功能(如亮度调节)需要管理员权限运行,应在文档中明确说明,并在 UI 层提示用户。
-
禁止记录敏感信息:日志中禁止记录用户密码、API Key、Token、文件路径以外的个人数据;
-
异常信息脱敏:在向用户展示错误信息或控制台输出时,对可能包含敏感信息的部分进行脱敏处理;
-
日志级别管理:生产环境下,应关闭调试级日志输出。
项目所有 Python 依赖必须从官方渠道安装:
- PyPI(Python Package Index):
pip install - GitHub 官方仓库:源码安装
禁止使用来源不明的第三方包,禁止从非 HTTPS 渠道下载安装包。
-
固定版本号:在
requirements.txt中明确指定依赖版本范围,避免使用>=等宽泛版本约束导致自动升级引入安全风险; -
定期检查依赖安全:项目维护者应定期使用以下工具检查依赖的安全性:
# 安装 pip-audit(依赖安全扫描工具) pip install pip-audit # 扫描项目依赖中的已知漏洞 pip-audit
-
及时更新依赖:当依赖包发布安全补丁时,应尽快评估并更新,优先选择安全版本。
项目使用 PyInstaller 打包为可执行文件,打包过程中需注意:
-
官方 PyInstaller:仅使用官方发布的 PyInstaller,不使用来路不明的修改版本;
-
打包后验证:打包完成后,验证生成的可执行文件无异常行为,无额外的网络连接或文件操作;
-
upx 压缩:若使用 UPX 压缩工具,确保 UPX 工具本身来源可信。
以下列出项目核心依赖的安全备注:
| 依赖 | 用途 | 安全注意事项 |
|---|---|---|
| PySide6 | GUI 框架 | 仅从 PyPI 安装,防范供应链攻击 |
| comtypes | Windows COM 调用 | 仅处理预定义系统调用,禁止动态加载任意 COM 组件 |
| screen_brightness_control | 亮度控制 | 仅用于亮度读取和设置,禁止用于其他系统操作 |
Python-island 作为本地桌面工具,遵循以下数据处理原则:
-
本地优先:所有数据处理均在用户本地计算机完成,不上传任何用户数据到远程服务器;
-
无追踪无遥测:项目代码中不包含任何用户行为追踪、数据采集或遥测上报功能;
-
最小数据收集:仅收集运行功能所必需的数据,不收集与功能无关的用户信息。
| 数据类型 | 处理方式 |
|---|---|
| 用户配置文件 | 仅存储在本地,不上传 |
| 系统状态信息 | 仅在本地内存中使用,不持久化 |
| URL 检测内容 | 仅在内存中临时处理,不存储 |
| 用户文件路径 | 仅作为配置参数使用,不上传 |
-
托盘图标仅用于显示应用状态,不执行任何隐蔽的系统操作;
-
不在系统启动项中强制注册(如需开机启动,应由用户主动配置);
-
不在用户不知情的情况下创建计划任务或服务。
-
项目依赖 PowerShell 执行系统命令,应在文档中说明所需的 PowerShell 执行策略(建议为
RemoteSigned或Restricted); -
不尝试绕过或修改系统的 PowerShell 执行策略。
-
项目作为非知名软件,首次运行时可能被 Windows Defender 或第三方防病毒软件标记;
-
若项目被误报为恶意软件,项目维护者应:
- 提供软件的源代码供安全审查;
- 向相关防病毒厂商提交申诉;
- 在文档中提供防病毒白名单添加指南。
-
需要管理员权限的功能(如亮度调节、系统状态读取),应在 UI 层明确提示用户;
-
禁止在用户不知情的情况下以管理员权限执行任何操作。
当发生安全事件(如漏洞被公开、依赖包发现安全缺陷、发布版本存在安全问题)时,项目维护者将按以下流程响应:
- 收到安全报告后,在 48 小时内确认并启动评估;
- 确定漏洞影响范围和严重程度(参照 CVSS 评分标准);
- 制定修复方案并实施补丁开发;
- 在修复完成后,发布包含安全补丁的新版本。
- 修复版本发布时,同步发布安全公告,说明:
- 漏洞描述与影响
- 受影响的版本
- 修复措施
- 升级建议
- 安全公告发布在 GitHub Releases 和项目主页。
- 关键/高危漏洞:尽快发布补丁版本,通知用户尽快升级;
- 中危漏洞:在下一个计划版本中修复;
- 低危漏洞:在常规版本迭代中修复。
- 在修复版本发布之前,不公开漏洞细节;
- 修复发布后,与报告者协商公开细节的时机和方式;
- 始终保护报告者的隐私,未经其同意不公开报告者身份。
感谢以下安全研究者对 Python-island 项目安全作出的贡献:
若你报告了安全漏洞并希望被致谢,请在报告中说明是否愿意公开你的姓名或昵称。
Python-island 社区
2026