如何从命令行安全向Chrome传递含会话令牌的URL?
安全向Chrome传递含敏感令牌的URL的方法
有几种可行的方式可以避免带会话令牌的URL出现在Chrome的进程命令行参数中,以下是具体实现方案:
方法1:利用Chrome远程调试协议(DevTools Protocol)
通过开启Chrome的远程调试端口,再用HTTP请求发送导航指令,URL会包含在请求体内,不会暴露在进程参数里。
- 启动Chrome并开启远程调试:
chrome --remote-debugging-port=9222 --no-first-run --no-default-browser-check
- 创建新标签页并获取目标ID:
TARGET_ID=$(curl -s http://localhost:9222/json/new | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
- 发送导航指令,将带令牌的URL放在请求体中:
curl -X POST -H "Content-Type: application/json" -d '{ "id": 1, "method": "Page.navigate", "params": { "url": "https://example.com/service?token=FOOBARBAZ" } }' http://localhost:9222/json/target/$TARGET_ID
此时执行ps ax | grep chrome,进程参数里只会显示调试端口相关配置,看不到敏感URL。
方法2:通过管道传递URL配合脚本
编写简单Shell脚本,从标准输入读取URL后通过远程调试协议打开,避免直接在命令行暴露敏感内容。
- 创建脚本
chrome-safe-open.sh:
#!/bin/bash read -r TARGET_URL # 检查Chrome是否已开启远程调试,未开启则启动 if ! pgrep -f "chrome --remote-debugging-port=9222" > /dev/null; then chrome --remote-debugging-port=9222 --no-first-run --no-default-browser-check & sleep 2 # 等待Chrome启动完成 fi TARGET_ID=$(curl -s http://localhost:9222/json/new | grep -o '"id":"[^"]*"' | cut -d'"' -f4) curl -X POST -H "Content-Type: application/json" -d '{ "id": 1, "method": "Page.navigate", "params": { "url": "'"$TARGET_URL"'" } }' http://localhost:9222/json/target/$TARGET_ID
- 赋予脚本执行权限:
chmod +x chrome-safe-open.sh
- 通过管道传递URL:
echo "https://example.com/service?token=FOOBARBAZ" | ./chrome-safe-open.sh
也可以从文件读取敏感URL(更安全):
cat secret_url.txt | ./chrome-safe-open.sh
方法3:环境变量传递(需配合脚本)
Chrome本身不支持直接读取环境变量打开URL,但可以通过脚本读取环境变量后执行导航:
- 临时设置环境变量(避免写入shell历史,可在终端会话中临时执行):
set +o history export CHROME_SAFE_URL="https://example.com/service?token=FOOBARBAZ" set -o history
- 修改
chrome-safe-open.sh脚本,从环境变量读取URL:
#!/bin/bash TARGET_URL="$CHROME_SAFE_URL" # 后续启动调试、创建标签页、导航逻辑同方法2
- 执行脚本后清除环境变量:
./chrome-safe-open.sh unset CHROME_SAFE_URL
注意事项
- 开启远程调试端口后,本地所有进程均可访问,多用户环境下使用后建议关闭Chrome或杀掉相关进程。
- 操作敏感URL时,可临时关闭shell历史记录(
set +o history),避免令牌被留存。
内容的提问来源于stack exchange,提问作者Rich Remer
相关产品推荐
相关产品推荐

