2012-09-13 8 views
0

나는 "사용자 이름/비밀 번호 + 등록을 묻는 배치 파일"(이미 stackoverflow에있는 주제)에서 스크립트를 사용했습니다 ... 여기에 내 질문입니다 : 거기에 추가 할 수있는 방법이 있습니까? 배치 파일에 대한 잠금 또는 5 번의 잘못된 시도 후에 종료 명령 실행? bobTESTattempt1 비밀 : 자명 : 상황의 예 (하단의 타임 아웃은 24 시간이다) 1,234 [Enter] 키 암호 나머지 4 개 시도 잘못!배치 파일 비밀 번호 "잠금"

(다음 3 개 시도가 사용된다)

아이디 : bobTestattempt5 비밀번호 123,342 [입력] 비밀번호 나머지 0 시도 올바르지 않습니다! [입력]

계정 잠금 TIMEOUT 여기에 86400

+4

이 솔루션에 명백한 문제가 있습니다 이동합니다. 사용자는 'Ctrl + C'또는 'Ctrl + Break'를 사용하여 언제든지 배치 파일을 종료하고 다시 시작할 수 있습니다. 그러면 모든 카운터가 재설정됩니다. 그래서 5 번 시도에서 첫 번째 잠금 후, 사용자는 4 번 시도하고, 'Ctrl + C'를 누르고, 4 번 더 시도하기 위해 배치 파일을 다시 시작하고 원하는만큼 반복 할 수 있습니다. –

+0

또 다른 문제는 배치 파일이 일반 텍스트 비밀번호에 액세스해야한다는 것입니다. 즉, 일반 텍스트 비밀번호가 파일이나 변수에 존재하여 누구나 찾을 수 있어야합니다. 매우 열악한 보안 관행. –

+0

"BREAK OFF"명령을 사용하여 사용자가 CTRL + C를 사용할 수있는 능력을 차단할 수 있었지만 오래 전에 변경되었습니다. 더군다나'BREAK' 명령은 고대 도스 배치 파일이 오류를 던지는 것을 막기위한 것입니다. 도스에서는 'BREAK OFF'를 사용하고 배치 파일과 데이터 파일을 모두 숨겨서이 문제를 해결할 수 있습니다. 그렇다면 일반 사용자는 여전히'CTRL + BREAK'로 탈옥 할 수는 있지만 실행하거나 들여다 볼 파일의 이름을 알지는 못합니다. '* 좋은 옛날을 보러 간다 *' –

답변

0

당신은

@echo off 
set counter=5 
:CREDS 
cls 
if %counter% equ 0 goto :LOCKOUT 
if %counter% lss 5 echo Password incorrect, %counter% attempts left 
set /p un=Enter your username: 
set /p pw=Enter your password: 
if %un%==correctusername (
if %pw%==correctpassword goto :ALLOK 
) 
goto :WRONG 

:WRONG 
set /a counter-=1 
goto :CREDS 

:ALLOK 
echo Creds ok, do whatever 
pause >nul 
exit >nul 

:LOCKOUT 
echo ACCOUNT LOCKED OUT TIMEOUT 86400 
timeout /t 86400 
goto :CREDS 
+0

감사합니다! 그것은 작동합니다! –