
类型:CMS系统
简介:一款开源的内容管理系统(CMS),用于构建和管理网站。
让自动发布脚本、移动应用或企业工具连接WordPress时,最不安全的做法之一,是直接把管理员主密码写进程序。代码仓库、日志或服务器配置一旦泄露,攻击者可能获得完整后台登录权限。
WordPress应用密码为外部程序提供独立凭据。每个工具可以使用不同密码,管理员能够查看最近使用情况,并在不修改主账号密码的情况下单独撤销。它适合REST API和XML-RPC等程序化访问,不用于普通后台登录。
一、WordPress应用密码是什么
应用密码是与某个WordPress用户关联的独立认证凭据。它由系统生成,供脚本、应用和服务通过API访问网站。
主要特点包括:
- 不需要向工具提供主账号密码;
- 可以为不同应用创建不同凭据;
- 可以单独撤销;
- 可查看最近使用时间和IP;
- 权限继承自所属WordPress用户;
- 通常通过HTTPS上的Basic Authentication使用;
- 不能用来登录普通后台表单。
1、应用密码不是单独用户
创建应用密码不会自动建立新用户。它仍然代表当前WordPress账号执行操作。
如果为管理员创建应用密码,持有者可能通过API执行管理员允许的操作。因此,最小权限用户比“管理员加独立密码”更重要。
2、应用密码和API Key有什么区别
应用密码由WordPress核心管理,并与用户权限体系结合。第三方插件或云平台提供的API Key可能有自己的权限和撤销方式。
不能把所有密钥统称为应用密码。
二、哪些场景适合使用应用密码
- 外部程序发布文章;
- 更新页面和媒体;
- WordPress移动应用;
- 自动化工作流;
- 数据同步脚本;
- 无头WordPress前端;
- 监控和管理工具;
- 经过授权的第三方服务。
不适合的场景包括:
- 普通用户登录后台;
- 前端JavaScript直接调用敏感接口;
- 公共代码示例;
- 不支持HTTPS的网站;
- 无法安全保存凭据的第三方工具。
三、创建应用密码前需要检查什么
1、确认网站启用HTTPS
应用密码通常通过HTTP Basic Authentication发送。凭据会经过编码,但编码不等于加密。
只有HTTPS才能保护传输内容。不要在HTTP网站使用应用密码。
2、为工具创建最小权限用户
如果工具只负责发布文章,可以为其创建编辑或作者账号,而不是直接使用管理员。
选择角色前需要确认工具是否要:
- 发布文章;
- 上传媒体;
- 编辑他人内容;
- 管理用户;
- 修改插件;
- 操作WooCommerce订单;
- 读取私有数据。
权限不够时,应调整业务流程或设计专用能力,不应习惯性使用管理员。
3、确认REST API可用
访问:
https://example.com/wp-json/
如果安全插件、WAF或服务器完全阻止REST API,外部工具可能无法连接。
4、确认WordPress版本和用户权限
应用密码属于WordPress核心功能。用户资料页面是否显示该区域,还会受到HTTPS、过滤器和安全插件影响。
四、如何创建WordPress应用密码
1、登录WordPress后台
使用将要授权给外部工具的账号登录。
2、进入个人资料
打开:
用户 → 个人资料
管理员为其他用户创建时,可以进入对应用户编辑页面,但是否允许操作取决于权限和网站配置。
3、找到应用密码
在个人资料页面找到“应用密码”或“Application Passwords”区域。
4、填写应用名称
名称应反映实际用途,例如:
内容发布脚本
CRM同步
移动应用
Make自动化
内部数据服务
不要使用“测试”“新密码”等无法识别来源的名称。
5、生成密码
点击添加或生成按钮。WordPress只会完整显示密码一次,应立即保存到安全的密钥管理工具中。
显示形式可能带有空格:
abcd EFGH 1234 IJKL 5678 MNOP
部分客户端输入时可保留或移除空格,具体以工具要求为准。
6、不要截图或发送到群聊
应用密码一旦被他人获得,就可能代表该用户访问API。不要通过公开聊天、工单截图或普通文档共享。
五、如何使用应用密码调用REST API
假设:
网站:https://example.com
用户名:api_editor
应用密码:xxxx xxxx xxxx xxxx xxxx xxxx
1、读取当前用户信息
curl --user 'api_editor:应用密码' \
'https://example.com/wp-json/wp/v2/users/me'
成功后会返回当前认证用户的信息。
2、创建草稿文章
curl --request POST \
--user 'api_editor:应用密码' \
--header 'Content-Type: application/json' \
--data '{
"title": "API创建的测试文章",
"content": "这是通过WordPress REST API创建的草稿。",
"status": "draft"
}' \
'https://example.com/wp-json/wp/v2/posts'
建议测试时使用draft,不要直接设为publish。
3、避免密码进入Shell历史
直接把密码写进命令行,可能被Shell历史记录保存。
可以临时读取环境变量:
read -s WP_APP_PASSWORD
export WP_APP_PASSWORD
再调用:
curl --user "api_editor:${WP_APP_PASSWORD}" \
'https://example.com/wp-json/wp/v2/users/me'
任务结束后清除:
unset WP_APP_PASSWORD
更完善的生产方案应使用密钥管理服务,而不是长期保存在普通环境文件中。
六、如何在程序中保存应用密码
1、使用环境变量
服务器端应用可从环境变量读取:
WORDPRESS_URL=https://example.com
WORDPRESS_USER=api_editor
WORDPRESS_APP_PASSWORD=敏感凭据
环境文件应限制权限,并排除在Git提交之外。
.gitignore示例:
.env
.env.*
2、使用密钥管理服务
生产环境可以使用云平台Secrets Manager、容器Secrets或部署平台的加密变量功能。
3、不要放入前端代码
以下位置都不安全:
- 浏览器JavaScript;
- HTML源代码;
- 公开Git仓库;
- 移动应用安装包;
- WordPress公开页面;
- 可下载配置文件;
- 日志和错误信息。
如果浏览器需要操作WordPress,应通过自己的后端代理请求,并验证用户身份与权限。
七、应用密码继承哪些权限
应用密码拥有所属用户通过API可执行的权限。
例如:
- 作者通常只能管理自己的文章;
- 编辑可以管理更多内容;
- 管理员可能访问高权限接口;
- WooCommerce角色拥有与商店相关的能力;
- 插件可以注册额外接口和权限。
应用密码本身不能单独设置“只允许读取文章”或“只允许创建草稿”。如果需要更细粒度控制,可以:
- 创建专用用户角色;
- 调整用户Capabilities;
- 在自定义REST接口中设置权限回调;
- 通过API网关限制路由;
- 使用业务中间层代理请求。
八、如何撤销应用密码
进入对应用户的个人资料页面,在应用密码列表中找到目标凭据,点击撤销。
撤销后,使用该密码的程序会立即失去认证能力,而用户主密码和其他应用密码不受影响。
1、哪些情况应立即撤销
- 工具不再使用;
- 员工离职或职责变化;
- 密码进入公开仓库;
- 日志中意外显示凭据;
- 第三方服务发生安全事件;
- 出现陌生使用IP;
- 无法确认凭据保存位置;
- 怀疑账号被滥用。
2、定期轮换
WordPress应用密码通常不会自动到期。重要集成应建立轮换计划:
- 创建新应用密码;
- 更新工具配置;
- 验证连接正常;
- 撤销旧密码;
- 检查旧密码是否仍有请求。
九、如何检查应用密码使用情况
应用密码列表通常会显示:
- 应用名称;
- 创建时间;
- 最近使用时间;
- 最近使用IP。
发现异常时,应结合服务器访问日志检查:
- 请求路由;
- 请求时间;
- 来源IP;
- HTTP方法;
- 响应状态;
- 操作对象。
来源IP可能是云平台、代理或自动化服务出口地址,不能只凭陌生IP判定攻击,但应核对是否符合工具部署位置。
十、应用密码无法使用怎么排查
1、检查HTTPS
非HTTPS环境中,应用密码功能可能不可用或不应启用。
2、检查用户名
认证通常使用WordPress登录用户名,而不是公开显示名称。
3、检查密码格式
复制时不要遗漏字符。若工具不接受空格,可以按其说明移除显示用空格。
4、检查服务器认证头
部分反向代理或FastCGI配置没有把Authorization头传递给PHP,可能导致401错误。
需要检查Nginx、Apache、CDN或代理配置,确认认证头没有被移除。
5、检查安全插件和WAF
安全工具可能阻止Basic Authentication、REST API或特定路由。应查看拦截日志,不要直接关闭全部安全功能。
6、检查用户权限
认证成功但返回403,通常说明账号没有执行该操作的能力。
401更多与认证失败有关,403则常见于权限不足或安全策略阻止。
7、检查REST API
测试:
curl -i 'https://example.com/wp-json/'
再使用应用密码测试当前用户接口,逐步判断是网络、认证还是权限问题。
十一、应用密码安全清单
- 只在HTTPS网站使用;
- 为每个工具创建独立密码;
- 使用最小权限用户;
- 不使用管理员作为默认集成账号;
- 应用名称写明真实用途;
- 密码只保存到安全位置;
- 不写入前端和公开仓库;
- 不在命令行历史中长期保留;
- 定期检查最近使用时间和IP;
- 工具停用后立即撤销;
- 高风险集成定期轮换;
- 监控REST API异常请求。
常见问题
WordPress应用密码可以登录后台吗?
不能。应用密码用于程序化认证,不用于普通wp-login.php登录。
应用密码和主账号密码有什么关系?
它们相互独立。撤销应用密码不会修改主账号密码,修改主密码也不应被当作应用密码管理方式。
一个用户可以创建多个应用密码吗?
可以。建议每个工具使用独立密码,便于识别、轮换和撤销。
应用密码可以限制只访问某个接口吗?
核心应用密码主要继承用户权限,不能直接按单个路由授权。需要通过用户角色、自定义接口权限或API网关实现更细控制。
为什么API返回401错误?
常见原因包括用户名或应用密码错误、Authorization请求头未传递、HTTPS或代理配置异常,以及安全工具拦截。
第三方工具停用后需要删除应用密码吗?
需要。工具不再使用时应撤销对应密码,减少长期有效凭据带来的风险。

