Действительно ли я могу замаскировать входной текст в bat-файле

Я полностью изменил ваш код, потому что он нестабилен, и этот код решает все ваши проблемы.

HTML

<div class="card mb-2">
    <div class="card-body">
        <div class="card-text w-100 border rounded p-1 my-1">
            <div class="form-actions">
                <span class="control-label ml-2">Answer(s):</span>
                <a class="btn btn-primary add_fields" href="#">Add Answer</a>
            </div>
            <div class="input-group mb-3">
                <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="addon">
                <div class="input-group-append">
                    <a class="btn btn-primary" href="#">
                        <svg id="addon" class="octicon octicon-trashcan svg-white" aria-label="remove" viewBox="0 0 12 16" version="1.1" width="12" height="16" role="img"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
                    </a>
                </div>
            </div>
        </div>
    </div>
</div>

CSS

.svg-white{
    fill:#fff;
}

Живой фрагмент

[ 114]

.svg-white{
  fill:#fff;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">

<div class="card mb-2">
  <div class="card-body">
    <div class="card-text w-100 border rounded p-1 my-1">
      <div class="form-actions">
        <span class="control-label ml-2">Answer(s):</span>
        <a class="btn btn-primary add_fields" href="#">Add Answer</a>
      </div>
      <div class="input-group mb-3">
        <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="addon">
        <div class="input-group-append">
          <a class="btn btn-primary" href="#">
            <svg id="addon" class="octicon octicon-trashcan svg-white" aria-label="remove" viewBox="0 0 12 16" version="1.1" width="12" height="16" role="img"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
          </a>
        </div>
      </div>
    </div>
  </div>
</div>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>

95
задан a_horse_with_no_name 21 July 2015 в 17:54
поделиться

4 ответа

До XP и Сервера 2003, можно использовать другой включенный инструмент (VBScript) - следующие два сценария делают задание, которое Вы хотите.

Первый, getpwd.cmd:

@echo off
<nul: set /p passwd=Password: 
for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i
echo.

Затем getpwd.vbs:

Set oScriptPW = CreateObject("ScriptPW.Password")
strPassword = oScriptPW.GetPassword()
Wscript.StdOut.WriteLine strPassword

getpwd.vbs просто использование объект пароля ввести пароль от пользователя и затем распечатать его к стандартному выводу (следующий абзац объяснит, почему это не обнаруживается в терминале).

getpwd.cmd командный сценарий немного более хитер, но он в основном работает следующим образом.

эффект эти "<nul: set /p passwd=Password: " команда должна произвести подсказку без запаздывающего символа новой строки - это - подлый способ эмулировать эти "echo -n" команда от эти bash оболочка. Это устанавливает passwd на пустую строку как несоответствующий побочный эффект и не ожидает входа, так как это берет свой вход от nul: устройство.

"for /f "delims=" %%i in ('cscript /nologo getpwd.vbs') do set passwd=%%i" оператор является самым хитрым битом. Это выполняет VBScript без Microsoft "реклама", так, чтобы единственный вывод строки был паролем (от VBscript "Wscript.StdOut.WriteLine strPassword".

Установка разделителей ни к чему требуется, чтобы получать всю входную строку с пробелами, иначе Вы просто получаете первое слово. Эти "for ... do set ..." наборы битов passwd, чтобы быть фактическим выводом пароля от VBScript.

Тогда мы повторяем пустую строку (для завершения "Password: " строка), и пароль будет в passwd переменная среды после того, как код работал.

<час>

Теперь, как упомянуто, scriptpw.dll доступно только до XP/2003. Для исправления этого можно просто скопировать scriptpw.dll файл от Windows\System32 папка системы XP/2003 к Winnt\System32 или Windows\System32 папка в собственной системе. Как только DLL был скопирован, необходимо будет зарегистрировать его путем выполнения:

regsvr32 scriptpw.dll

Для успешной регистрации DLL на Vista и позже Вам будут нужны права администратора. Я не исследовал законность такого перемещения как чтец пещеры.

<час>

, Если Вы не чрезмерно увлечены попыткой разыскать и зарегистрировать более старые файлы DLL (для удобства или легальных причин), существует иначе. Более поздние версии Windows (у тех, которые не делают , есть необходимый DLL) должны иметь Powershell в наличии для Вас.

И, на самом деле, действительно необходимо полагать, что обновление сценариев использует его полностью, так как это - намного более способный язык сценариев, чем [1 126]. Однако, если Вы хотите сохранить объем своего кода как [1 127] сценарии (такой, как будто Вы имеете партия из кода, который Вы не хотите преобразовывать), можно использовать тот же прием.

Первый, измените cmd сценарий, таким образом, он называет Powershell, а не CScript:

@echo off
for /f "delims=" %%i in ('powershell -file getpwd.ps1') do set passwd=%%i

сценарий Powershell одинаково прост:

$password = Read-Host "Enter password" -AsSecureString
$password = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto($password)
echo $password

, хотя с некоторым маршалингом для получения фактического текста пароля.

Помнят, что, для выполнения локальных неподписанных сценариев Powershell на машине Вы, возможно, должны изменить политику выполнения от (драконовский, хотя очень безопасный) значение по умолчанию, с чем-то как:

set-executionpolicy remotesigned

из самого Powershell.

49
ответ дан paxdiablo 24 November 2019 в 05:46
поделиться

Я, вероятно, просто сделал бы:

..
echo Before you enter your password, make sure no-one is looking!
set /P password=Password:  
cls
echo Thanks, got that.
.. 

, Таким образом, Вы получаете подсказку, тогда экран очищается после того, как он вводится.

Примечание, что введенный пароль будет сохранен в истории CMD, если пакетный файл будет выполняться от командной строки (Спасибо @Mark K Кауэн ).

, Если бы это не было достаточно хорошо, я или переключился бы на Python или записал бы исполняемый файл вместо сценария.

я знаю, что ни один из них не идеальный soutions, но возможно каждый достаточно хорош для Вас:)

12
ответ дан Community 24 November 2019 в 05:46
поделиться

другой альтернативой являются мои инструменты командной строки EditV32 (x86) или EditV64 (x64) . Например:

editv32 -m -p "Password: " PWD

-m означает «маскированный ввод», а -p - это приглашение. Ввод пользователя сохраняется в переменной среды PWD. Вы можете получить его здесь:

https://westmesatech.com/?page_id=19

6
ответ дан 24 November 2019 в 05:46
поделиться

Я прочитал в сети все неуклюжие решения о том, как маскировать пароли в пакетном файле, от решения hide.com и даже о тех, которые делают текст и фон одинаковыми по цвету. Решение hide.com работает прилично, не очень безопасно и не работает в 64-битной Windows. Так или иначе, используя 100% утилиты Microsoft, выход есть!

Во-первых, позвольте мне объяснить, как я использую. У меня около 20 рабочих станций с автоматическим входом в Windows. У них на рабочем столе есть один ярлык - к клиническому приложению. Машины заблокированы, они не могут щелкнуть правой кнопкой мыши, они не могут ничего делать, кроме доступа к одному ярлыку на своем рабочем столе. Иногда техническому специалисту необходимо запустить некоторые отладочные приложения, просмотреть проводник Windows и просмотреть файлы журнала без выхода из учетной записи пользователя autolog.

Итак, вот что я сделал.

Делайте это как хотите, но я поместил два своих командных файла в общий сетевой ресурс, к которому у заблокированного компьютера есть доступ.

В моем решении используется 1 главный компонент Windows - runas. Поместите ярлык на клиентах для runas.bat, который вы собираетесь создать. К вашему сведению, на своих клиентах я переименовал ярлык для лучшего просмотра и изменил значок.

Вам нужно будет создать два командных файла.

Я назвал командные файлы runas.bat и Debug Support.bat

runas.bat содержит следующий код:

cls
@echo off
TITLE CHECK CREDENTIALS 
goto menu

:menu
cls
echo.
echo           ....................................
echo            ~Written by Cajun Wonder 4/1/2010~
echo           ....................................
echo.
@set /p un=What is your domain username? 
if "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto debugsupport
if not "%un%"=="PUT-YOUR-DOMAIN-USERNAME-HERE" goto noaccess
echo.
:debugsupport
"%SYSTEMROOT%\system32\runas" /netonly /user:PUT-YOUR-DOMAIN-NAME-HERE\%un% "\\PUT-YOUR-NETWORK-SHARE-PATH-HERE\Debug Support.bat"
@echo ACCESS GRANTED! LAUNCHING THE DEBUG UTILITIES....
@ping -n 4 127.0.0.1 > NUL
goto quit
:noaccess
cls
@echo.
@echo.
@echo.
@echo.
@echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@echo   \\                                   \\
@echo   \\    Insufficient privileges         \\  
@echo   \\                                    \\
@echo   \\      Call Cajun Wonder             \\
@echo   \\                                    \\
@echo   \\              At                    \\
@echo   \\                                    \\
@echo   \\        555-555-5555                \\
@echo   \\                                    \\
@echo   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
@ping -n 4 127.0.0.1 > NUL
goto quit
@pause
:quit
@exit

Вы можете добавить столько же , если "% un% ", а если не"% un% "для всех пользователей, которым вы хотите предоставить доступ. @ping - это мой способ создания секундного таймера.

Итак, это позаботится о первом пакетном файле - довольно просто, а?

Вот код для Debug Support.bat:

cls
@echo off
TITLE SUPPORT UTILITIES
goto menu

:menu
cls
@echo %username%
echo.
echo           .....................................
echo            ~Written by Cajun Wonder 4/1/2010~
echo           .....................................
echo.
echo What do you want to do? 
echo.
echo [1]  Launch notepad
echo.

:choice
set /P C=[Option]? 
if "%C%"=="1" goto notepad
goto choice

:notepad
echo.
@echo starting notepad....
@ping -n 3 127.0.0.1 > NUL
start notepad
cls
goto menu

Я не программист и действительно только начал заниматься пакетным скриптингом около года назад, и этот обходной путь, который я обнаружил для маскировки пароля в пакетном файле, довольно крутой!

Я надеюсь услышать, что кто-то, кроме меня, сможет извлечь из этого пользу!

-2
ответ дан 24 November 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: