我可以安全地通过命令行传递凭证吗?

我可以安全地通过命令行传递凭证吗?

在您认为我应该将其发布到其他论坛之前 - 这是与 Windows 操作系统相关的问题,而不是编程。

我正在创建需要用户通过 Kerberos 授权的内联网网站。经过几天的研究,我认为使用 PHP 来实现这一点并不是最好的方法,我需要找到其他解决方案。所以我有了这个主意,效果非常好:我可以利用我在 C# 方面的知识来使用 .NET Framework 为我工作。所以我编写了(目前)小应用程序,它使用 Kerberos 检查用户凭据。我从 PHP 运行应用程序来检查其返回代码,如下所示:

我的应用程序用户名 密码1!

(不久的将来它将通过命令行获取更多信息)

它根据授权检查返回代码,因此我的 PHP 应用程序知道它是否成功。Kerberos 授权是加密的(使用 .NET 非常容易),因此我可以“一石二鸟”。当然,整个过程更复杂,因此我不需要每次用户登录时都使用它,但这不是重点。

我问问题是因为我可能会学到一些有用的东西,而且我想确定:

这种方法真的安全吗?有人能获取我传递给命令行的密码吗?它可以被记录在某处吗?如果可以 - 我可以阻止这种情况吗?如果这不安全 - 我可以更安全地传递凭据吗?

这其实只是一个问题“这安全吗?”但我想让你知道我要求的是什么。除非我确定这是个好主意,否则我不想做得太过分。此外,到目前为止一切都运行良好。

我在 Windows Server 上使用带有 MySQL 数据库的 Apache 服务器(可能会更改为 MSSQL Express)。

[编辑] 我应该指出,我正在使用执行()命令。我问的是,您是否能以某种方式在 Apache 服务启动/运行之间进行通信我的应用程序,因为密码在那里以纯文本形式传递一次即可。

答案1

不,这种方法不安全。在 Windows 上,命令行参数受用户权限保护(从技术上讲,这是关于对进程对象的访问),但这还不够。您的 Web 应用程序中可能存在允许任意代码/命令执行的错误。

相反,使用 stdin “输入”密码。当然,这要求您调用的应用程序知道以这种方式接收密码。

此外,您需要非常小心传递用户提供的命令行参数,否则我只会输入; rm -rf /用户名。;)


顺便说一句:除非您积极缓存返回值,否则此方法将对性能产生重大影响。

相关内容