이것은 로그인 관리자를 실행하는 서버에 대한 코드입니다.이 서버는 악의적 인 액세스를 파일에 기록하고 잘못된 로그인 결과를 인쇄합니다. chars 사용자 및 패스는 소켓을 사용하여 사용자 입력에서 왔습니다.C++에서 puts 함수가 소켓의 입력 문자와 작동하지 않는 이유는 무엇입니까?
if ((memcmp(user, "admin", strlen("admin")) == 0)) {
/*code... */
}
else {
char msg[600];
strcpy (msg,"Login error with ");
strcat (msg,"user: ");
strcat (msg,user);
strcat (msg," password: ");
strcat (msg,pass);
strcat (msg," from: ");
strcat (msg, client_ip);
puts (msg);
logfile->Write(msg);
return false;
}
출력 콘솔과 로그 파일 모두에 문제가 있습니다. 이처럼
:
Login error with user: lol
password: asd
:��ܔ��P{w� from: 127.0.0.1
왜 이상한 ASCI의 문자가있다? 새 줄은 소켓에 의한 사용자 입력에서 오는 것이므로 어떻게 피할 수 있습니까?
당신이 자신에게 다음 번에 서식 수정 유효하시기 바랍니다 있습니다! –
관련 없음/제안 :'strcmp (user, "admin") == 0'을 사용하지 않는 것이 어떨까요? – Marlon
이 C++라고 태그했습니다. C++의 std :: string을 왜 사용하지 않는지 궁금합니다. 코드에서 세 가지 가능한 버퍼 오버 플로우 상황이있는 것처럼 보이며'std :: string'을 사용하면 거기에 없을 것입니다. * Morris 웜 *, Code Red Worm *, * SQL Slammer * 웜은 버퍼 오버 플로우를 이용한 유명한 악성 프로그램입니다. –