You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Java Selenium多站点登录自动化的密码安全与加密方案咨询

Web自动化系统密码安全解决方案

一、本地密码文件加密方案

1. 采用强加密算法存储密码文件

使用AES-256-GCM这类带认证的加密算法,避免ECB模式或弱加密实现。加密密钥不能硬编码,可通过两种安全方式生成:

  • 由用户输入主密码,通过PBKDF2或Argon2(推荐,抗暴力破解能力更强)进行密钥派生,搭配随机盐值,迭代次数设为至少100000次,提升破解难度。
  • 绑定系统原生密钥管理服务:Windows用win32crypt访问凭据管理器,macOS用security命令访问钥匙串,Linux用secret-tool调用libsecret,将加密密钥存储在系统安全容器中,无需用户重复输入主密码。

示例代码(Python):

import base64
import os
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
import gc

# 从主密码派生加密密钥
def derive_key(master_pwd: str, salt: bytes) -> bytes:
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
    )
    return base64.urlsafe_b64encode(kdf.derive(master_pwd.encode()))

# 加密明文密码文件
def encrypt_pwd_file(raw_file: str, master_pwd: str):
    salt = os.urandom(16)
    key = derive_key(master_pwd, salt)
    fernet = Fernet(key)
    with open(raw_file, 'rb') as f:
        raw_data = f.read()
    encrypted_data = fernet.encrypt(raw_data)
    # 盐值无需保密,和加密数据一起存储
    with open(f"{raw_file}.encrypted", 'wb') as f:
        f.write(salt + encrypted_data)

# 解密加密文件
def decrypt_pwd_file(encrypted_file: str, master_pwd: str) -> bytes:
    with open(encrypted_file, 'rb') as f:
        salt = f.read(16)
        encrypted_data = f.read()
    key = derive_key(master_pwd, salt)
    fernet = Fernet(key)
    decrypted_data = fernet.decrypt(encrypted_data)
    return decrypted_data

2. 加密文件的额外防护

  • 限制文件权限:Linux/macOS设置chmod 600,Windows仅允许当前用户读取,避免其他用户访问。
  • 不要将加密文件同步到未端到端加密的云盘,防止云端数据泄露。

二、Selenium运行时密码泄露防护

1. 缩短明文密码在内存的暴露时间

  • 解密后的密码不要存入全局变量,使用后立即用del删除变量,并调用gc.collect()触发垃圾回收,减少内存中明文留存时长。
  • 禁止在日志、控制台输出任何明文密码,确保敏感信息不被意外记录。

2. 优化密码输入方式

  • 避免直接用send_keys()传递明文密码,改用JavaScript注入模拟输入,减少密码在Selenium进程中的暴露路径:
pwd_element = driver.find_element(By.ID, "password")
driver.execute_script("arguments[0].value = arguments[1];", pwd_element, decrypted_pwd)
  • 若目标网站支持,可配置浏览器自动填充已保存的密码,完全避免代码层面处理明文密码。

3. 加固运行环境

  • 不要以管理员/root权限运行脚本,降低恶意进程注入的风险。
  • 禁用Selenium调试模式(不要添加--remote-debugging-port参数),调试模式下内存数据更容易被读取。
  • 保持Selenium、浏览器为最新版本,及时修复已知安全漏洞。

三、替代设计思路(更高安全等级)

如果上述防护仍无法满足需求,可调整系统设计方向:

1. 改用官方API调用

多数资金平台提供官方查询API,使用API密钥(而非账号密码)进行身份验证,可限定密钥仅拥有查询权限,即使泄露风险也远低于账号密码,且无需处理密码加密逻辑。

2. 用浏览器扩展替代Selenium

开发轻量浏览器扩展,在浏览器沙箱内完成登录和数据获取,扩展权限受浏览器限制,密码不会暴露到外部进程。可通过扩展后台脚本与本地程序通信传递查询结果。

3. 容器化隔离运行

用Docker容器封装自动化脚本,限制容器网络权限(仅允许访问目标平台域名),即使容器被攻破,也不会影响主机系统的其他数据。

内容的提问来源于stack exchange,提问作者Neruzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:30:44