在 Windows 命令中使用密码参数安全吗?

2023-11-25

想象一下,我们有一个程序或脚本可以接受密码(或其他敏感信息)参数:

> program.exe /password:secret

对于 Linux,最佳实践通常建议against出于潜在的安全考虑,直接在命令行上指定密码(密码可能出现在 shell 的历史文件和系统的进程表中):

$ ./program.sh --password 'secret' &
[1] 4152

$ cat /proc/4152/cmdline 
/bin/sh./program.sh--passwordsecret

然而,在四处搜索时,我没有看到针对 Windows 的同样有力的推荐。

编写程序和脚本时Windows,除了命令行选项的参数之外,我们是否应该提供另一种输入密码的方法,以避免无意中泄露密码?

答案是这个问题建议专门的密码输入提示通过防止肩窥来提高安全性。是否有其他方法可以利用命令字符串中的可见密码来证明编写备用输入方法的合理性,无论是在 shell 上下文中还是在 Windows 管理进程的方式中?

从批处理文件或将密码作为参数传递给程序的 PowerShell 脚本启动程序时,安全隐患是否会发生变化?

$password = # prompt for password 
program.exe /password:$password

Edit- 我知道我们可能会将此问题误解为基于意见,因为我提到“最佳实践”和“建议”来提供背景。然而,我寻求具体的证据来证明密码如何在命令参数中容易受到攻击,并且如果这个假设有效的话,我会寻找描述安全替代方案的具体示例或参考资料。


Windows 历史上不保存会话之间的命令历史记录,仅保存会话内的命令历史记录。对于命令提示符和 PowerShell 来说都是如此。

As 比尔·斯图尔特指出,Windows 10 和 Windows 2016 上的 Windows PowerShell 默认包含 PSReadline,它确实会保存会话之间的命令历史记录。您可以通过查看此处的文件来看到这一点:(Get-PSReadLineOption).HistorySavePath.

但即使它被设置为关闭,或者在不提供该选项的操作系统版本上,这并不意味着输入明文密码作为参数是一个好主意。

如果你必须提供这个,你should还有一种方法可以让程序在运行时提示。

对于 PowerShell 和其他 .Net 应用程序,接受明文密码时还会遇到另一个问题:它们会保留在内存中,并且没有好的方法可以显式清除它们。

这个问题有两个方面:字符串在 .Net 中是不可变的,这意味着您不能只用空值或随机字符修改字符串以将其清除在内存中(您实际上将创建一个全新的字符串),最重要的是您无法控制垃圾回收何时处理特定对象,因此您无法显式删除它。

这就是为什么SecureString class存在,但并不是所有东西都可以使用它。

在PowerShell中,有一个PSCredential object它以纯文本形式存储用户名和密码SecureString。这应该始终在 PowerShell 中使用,并且应该是首选参数类型(代替单独的用户名和密码)。

PowerShell 中需要凭据的大多数命令都将其视为此类对象。

您还可以使用此对象轻松检索密码的明文版本。这样做然后将其放入托管字符串中,您就会面临我上面提到的风险。

但在我看来,最好还是使用PSCredential对象在这些情况下,直到您需要纯文本版本。它有助于在内置/“官方”功能以及用户定义的命令中保持这种类型的标准化。

这种类型也很容易序列化Export-Clixml转换为加密的形式。这可以为您提供一种非常好的方法,提供在脚本中使用存储的凭据的自动化选项,无需任何明文内容,也无需提示或用户干预.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 命令中使用密码参数安全吗? 的相关文章

随机推荐

  • AngularJS $http 从失败的 CORS 请求返回状态代码 0

    好吧 我已经查遍了这个 基本上我们使用的是跨域请求的 http 请求 我们的服务器允许该域 当请求返回 200 时 一切正常 然而 每当我们的服务器返回错误 500 401 无论什么时候 Angular 都会认为这是 CORS 问题 我使用
  • 客户端和服务器端编程有什么区别?

    我有这个代码 为什么这不会将 bar 写入我的文本文件 而是警告 42 注意 这个问题的早期修订明确涉及服务器上的 PHP 和客户端上的 JavaScript 问题的本质和解决方案是相同的any当一种语言在客户端上运行而另一种语言在服务器上
  • 访问修饰符 - 目的是什么?

    一般来说 我对编程比较陌生 我想知道是否有人可以帮助我理解访问修饰符的目的 我知道他们为类和变量等设置了不同的访问级别 但为什么要限制对这些内容的访问权限 不允许访问不同的东西有什么意义 为什么不只允许访问所有内容呢 抱歉 如果这是一个愚蠢
  • 未使用的装配参考的成本是多少?

    我想知道在 NET 解决方案中引用程序集的各种成本是多少 我对技术和组织成本都感兴趣 一些例子 未使用的程序集包含需要传送的额外字节 下载时间更长 浪费空间 未使用的程序集可能包含可利用的安全漏洞 未使用的程序集可能会产生额外的启动成本 未
  • 使用 Selenium 和 Python 查找存在 data-tb-test-id 属性而不是 id 的元素

    我正在尝试使用 Selenium 查找元素 但没有找到 请遵循 HTML 代码 div style font size 12px font weight normal color 000000 display inline block pa
  • 如何使 D3 强制布局中的标签和节点可单击以导航到 URL?

    我正在使用 D3 使用基于力的布局 并且想知道当我单击节点或标签时是否可能会自动转到存储在该节点 标签中的 url 如果是的话 我怎样才能实现这一目标 这就是图表的实际外观 标签指示 URL 本身 我正在分享我用来生成 D3 图的 Java
  • 使用 CSS 子选择器会更快吗?

    如果我们想定位段落内的链接 哪个选择器会更有效 更快 p a or p gt a 第二个 极其 稍微快一些 CSS 由浏览器反向处理 因此您的两个规则都会在所有a页面上的元素 对于第二条规则 它只需要测试直接父级 对于另一条规则 它需要测试
  • setter 和 getter 方法是否会破坏封装? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 有人告诉我们应该避免 setter 和 getter 关于它有各种各样的想法 但根据我的说法 使用这些会破坏封装 为什么 因为它告诉世界一个物体的内部结构 例如 class Point p
  • 新的 React 应用程序安装后无法立即编译

    我已经使用 React Native 一段时间了 但我想我应该在网络上尝试 React 所以我遵循了这个指南 https reactjs org docs create a new react app html但使用后npx create
  • vi 的 splitview 上的 Linux shell (bash)

    我一直在寻找将 bash 集成到 vi 中的方法 但没有找到任何结果 如 emacs 中的功能 问题是 我用 vi 打开了 2 个视图 其中一个打开了 split命令 我想通过第二个视图使用 bash 而我正在第一个视图中编辑文件 如果我做
  • 众所周知的“进程因 StackOverflowException 而终止”屏幕是如何出现的?

    一个好奇的问题 如果当前进程的堆栈已满 如何出现众所周知的 进程因 StackOverflowException 而终止 屏幕 是运行时保存一些寄存器以使其正常降级 还是可能是一个内部技巧 可能会运行另一个临时进程来显示此屏幕 附 知道这个
  • Eclipse Spring Tools 缺少内容辅助/自动完成

    新的一年 新的问题 我正在一台 Linux 机器上工作 并且刚刚安装了一个新的 Eclipse Version Oxygen 2 Release 4 7 2 Build id 20171218 0600 JRE java version 1
  • 最佳实践:如何跟踪出站链接?

    由于请求记录在目标服务器上 而不是您的服务器上 因此如何跟踪网站的出站链接 您可以向页面添加一个快速 JQuery 脚本 该脚本将跟踪外部链接 并且可以将它们重定向到服务器上的一个文件 该文件将跟踪该链接 然后转发到该文件 或者添加一个 a
  • has_many :通过多个 has_one 关系?

    我正在为我们的教会编写一个 Rails 指导计划 我对 Rails 还很陌生 我需要对此进行建模 contact has one father class name gt Contact has one mother class name
  • 使用 CMake 构建外部项目时作业服务器不可用

    我正在尝试在 linux 上使用 CMake 构建一些外部项目ExternalProject add 然而 他们并不尊重make j12命令 并发出警告 warning jobserver unavailable using j1 Add
  • AngularJS - ng-repeat 中的顺序不正确

    我在我的控制器中定义了这样的章节 scope chaps id 1 chap no 1 name chap 1 id 2 chap no 2 name chap 2 id 14 chap no 14 name chap 14 id 15 c
  • 如何在django中使用group by对两列进行乘法和求和

    我需要在 Django 中执行以下查询 SELECT sum T width T height as amount FROM triangle T WHERE T type normal GROUP BY S color 我怎样才能使用你的
  • Mylyn Eclipse TODO 集成

    在 Eclipse 中 我使用 Mylyn 插件从存储库中查看我的开放票证 但是 在我们的代码中 我们也有一些可以查看 TODO 标记的地方 TODO 标记显示在 任务 窗格中 而 Mylyn 视图显示在 任务列表 窗格中 有没有办法将两者
  • 从字符串创建 DateTime 对象

    我目前正在从文本文件中读取各种数据 并解析所有内容 正在解析的项目之一是事件的开始时间 格式为 yyMMddHHmm 1306050232 然后我解析出以下内容 string year 20 time 0 ToString time 1 T
  • 在 Windows 命令中使用密码参数安全吗?

    想象一下 我们有一个程序或脚本可以接受密码 或其他敏感信息 参数 gt program exe password secret 对于 Linux 最佳实践通常建议against出于潜在的安全考虑 直接在命令行上指定密码 密码可能出现在 sh