安全模式下的登录提示框

时间:2019-04-23 12:41:26

标签: c# powershell

是否有可能像Windows在UAC提示窗口中要求输入用户名和密码一样,制作一个安全的登录提示框(powershell或C#),并且除非您在字段中输入凭据,否则不能将其最小化。

以下是一个简单的ps1脚本,要求提供凭据,但不能以安全的方式完成,因为您知道会强制用户提供凭据并锁定所有其他窗口(如UAC登录提示)。

我知道可以通过$form.TopMost = $True完成此操作,但是我不希望使用此属性。

[int]$cnt = 1
while ( $cnt -lt '1000000000' ) {

    $user    = [Environment]::UserName
    $domain  = [Environment]::UserDomainName

    $credentials = $Host.UI.PromptForCredential('windows update','',$user,[Environment]::UserDomainName)
    $pass = $credentials.getnetworkcredential().password

    Add-Type -assemblyname system.DirectoryServices.AccountManagement 
    $localMachine = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)
    $credtest = $localMachine.ValidateCredentials($user,$pass)


    if ( $credtest -eq $false ) {

    Add-Type -assemblyname System.Windows.Forms
    $choice = [System.Windows.Forms.MessageBox]::Show("Authentication failed! Please enter correct password", "Reconnection Attempt Failed!", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)     
    } 

else { 

    break 
    }

    $cnt++
}

1 个答案:

答案 0 :(得分:0)

UAC提示不只是“锁定所有其他窗口”,它实际上显示在其他桌面上,在该桌面上没有其他用户代码可以运行。这样可以防止恶意脚本/应用程序向提示发送Windows消息,例如可能违反用户的意愿接受提示。

可以将UAC强制设置为use the user's normal desktop,但这比默认设置安全性低,通常仅在由于切换而导致图形出现问题时使用。

因此,尽管您可以在自定义登录提示中“锁定”其他窗口,但不会像UAC一样丢失“安全登录提示框”,因为它缺少了桌面的关键要素切换。