发布时间:2026/8/26 14:13:35
atcoder-cli 登录机制揭秘:acc login 如何安全保存会话而不泄露密码 atcoder-cli 登录机制揭秘acc login 如何安全保存会话而不泄露密码【免费下载链接】atcoder-cliAtCoder command line tools项目地址: https://gitcode.com/gh_mirrors/at/atcoder-cliatcoder-cli命令行工具acc是一个面向 AtCoder 算法竞赛的命令行工具可一键创建项目目录、拉取题目与样例测试、提交代码。本文带你完整看懂它的登录机制acc login为什么能把会话安全保存在本地同时绝不存储你的密码。一、什么是 atcoder-cli对于 AtCoder 竞赛选手来说atcoder-cli提供的acc命令把重复劳动压缩成一行acc login # 登录 AtCoder acc new ABC300 # 创建竞赛项目目录 acc add # 拉取题目和样例测试 acc submit # 提交代码 acc session # 检查登录状态 acc logout # 清除本地会话其中登录相关功能由 src/commands.ts 中的login/logout/session三个命令实现命令行入口定义在 src/cli/index.ts。那么问题来了一个命令行程序凭什么记住你已登录它存的是密码吗答案是不是。二、acc login 的完整流程三步走整个登录流程集中在 src/atcoder.ts 的login()方法中可以拆成三步第 1 步先确认是否已登录登录前会调用checkSession()。它的技巧很巧妙请求abc001竞赛的提交页并禁用自动重定向。如果你已登录页面正常返回未登录时 AtCoder 会把你 302 重定向回竞赛首页——收到 302 就判定为未登录。第 2 步获取 CSRF 令牌为防止伪造登录请求AtCoder 的登录表单要求携带csrf_token。getCSRFToken()方法用 JSDOM 在内存中打开登录页 HTML从隐藏表单里取出令牌——这一步刻意不使用任何已保存的 cookie确保拿到全新的一次性令牌。第 3 步输入凭证并一次性提交这是密码唯一露面的地方程序通过inquirer在终端交互提示中读取用户名和密码密码输入时显示为掩码而不是出现在命令行参数里命令行参数会被系统进程列表看到这是常见的泄露途径密码仅被拼进一次POST 请求发给 AtCoder请求立即结束字符串即被丢弃提交时同样禁用重定向若跳转目标不是/login页面即判定登录成功。源码中的注释直接点明了设计意图あまりパスワード文字列を引き回したくない——不想让密码字符串到处传递见 src/atcoder.ts。三、密码不落地只保存会话 cookie 登录成功后程序调用response.saveSession()把AtCoder 响应头Set-Cookie中下发的会话 cookie提取出来src/session.ts的makeSessionResponse交给 cookie 管理器持久化。关键设计在 src/cookie.ts它只认keyvalue形式的 cookie 字符串数组接口里根本没有存放密码的位置通过conf库把 cookie 写入标准配置目录下的session.json文件configName: session跨平台自动适配 Linux / macOS / Windows 的规范路径运行acc config-dir即可查看配置文件实际所在的目录命令定义见 src/commands.ts。换句话说本地文件里只有 cookie 这一把房间钥匙密码这把身份证从未离开过内存。后续所有请求查题、拉样例、提交都由 src/session.ts 的Session类自动把 cookie 附在请求头上无需再次输入凭证。四、事务机制登录失败不会弄坏现有会话 ✨Session.transaction()src/session.ts为整个登录过程套了一层事务开始登录时先克隆一份当前 cookie 副本登录过程中的一切 cookie 变更只发生在副本上只有登录成功副本才被提升为正式会话并写入配置文件若凭证错误、网络中断副本直接丢弃——旧会话完好无损。这和数据库事务的成功提交、失败回滚思想如出一辙保证任何一步出错都不会污染你已有的登录状态。五、日常使用检查与退出操作命令发生了什么检查登录状态acc session重访提交页判断是否被 302 重定向退出登录acc logout调用removeSession()清空 cookie 并覆写配置文件其他命令自动登录如acc contest未登录时自动触发一次login()交互流程logout的实现src/atcoder.ts只是把本地session.json清空——注意它清除的是本地钥匙不会让 AtCoder 服务端失效会话若想彻底安全还需在网页端退出登录。六、安全设计小结回顾acc login的整条链路它的不泄露密码靠的是四道防线交互式掩码输入——密码不进命令行参数、不进日志一次性使用——密码仅用于单次 POST用完即弃全程不落盘只存 cookie——持久化层的数据结构里根本没有密码字段事务保护——失败即回滚本地会话状态永远有效。配合 CSRF 令牌防伪造、302 重定向探测登录态atcoder-cli在命令行场景下实现了一套简洁而可靠的会话安全方案。想深入阅读可以直接查看这三个核心文件登录逻辑 src/atcoder.ts、会话事务 src/session.ts、cookie 持久化 src/cookie.ts以及组件组装方式 src/di/index.ts。【免费下载链接】atcoder-cliAtCoder command line tools项目地址: https://gitcode.com/gh_mirrors/at/atcoder-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/26 14:13:35

从404到完美文档:rspec_api_documentation实战问题解决方案

从404到完美文档:rspec_api_documentation实战问题解决方案 【免费下载链接】rspec_api_documentation Automatically generate API documentation from RSpec 项目地址: https://gitcode.com/gh_mirrors/rs/rspec_api_documentation 你是否还在为API文档与代…

2026/8/26 14:08:19

vscode 设置护眼色和字体

这款主题是在亮色 Atom One Light Theme 主题上的基础进行修改的,需先安装这个主题,搜索即可:一、点击左下角的设置图标,然后点击”设置“,跳转到设置界面。二、工作台->外观->settings.json三、保存以下代码便可…

2026/8/26 15:08:51

豆包 LeetCode 3 无重复字符的最长子串 JavaScript实现

LeetCode 3 无重复字符的最长子串 JavaScript函数签名:/**- param {string} s - return {number} */ 滑动窗口,数组记录字符最近下标,时间 O(n)javascript /*** param {string} s* return {number}*/ var lengthOfLongestSubstring funct…

2026/8/26 15:08:51

豆包 LeetCode 3 无重复字符的最长子串 Rust实现

LeetCode 3 无重复字符的最长子串函数签名: pub fn length_of_longest_substring(s: String) -> i32 最优解法:滑动窗口,用数组记录字符最近一次下标,O(n)时间,O(1)空间,适配ASCII字符。rust pub fn…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…