2009-06-12 3 views
3

htpasswd를 실행하여 암호를 업데이트 할 수있는 PHP 페이지가 있습니다. 그들의 의견을 가장 잘 살릴 수있는 방법은 무엇입니까? 보안 암호를 허용하기 위해 입력을 많이 제한하고 싶지 않습니다. 이것이 내가 가진 것입니다. 어떻게 개선 될 수 있습니까?PHP 암호 문자열을 살균하십시오

$newPasswd = preg_replace('/[^a-z0-9~!()_+=[]{}<>.\\\/?:@#$%^&*]/is', '', $inputPasswd); 
$cmdline = $htpasswd . " " . $passwd_file . " " . escapeshellarg($username) . " " .escapeshellarg($newpasswd); 
exec($cmdline, $output, $return_var); 

답변

8

ecscapeshellarg 함수는 PHP에 내장되어 있으며 "안전하지 않은"문자를 exec에 전달할 수 없도록 셸을 기반으로 시스템마다 다르므로 텍스트를 살균합니다.

http://us2.php.net/manual/en/function.escapeshellarg.php

+0

escapeshellarg를 사용하면 불량 문자 제거를 신경 쓰지 않아도됩니까? – JonDrnek

+0

Escapeshellarg는 쉘이 해석 할 수있는 모든 것을 제거합니다. (또는 예를 들어 '=> \'와 같이 변경하십시오.) htpasswd에 익숙하지 않지만 쉘 인젝션 공격을 막을 수 있습니다. – MiffTheFox

1
그는 뭔가에 암호를 변경 믿는다는 사용자를 만들 것입니다,하지만 당신 간부 뭔가 .. 그래서 사용자가 암호를 설정하기 때문에 나는, "위험한 문자"빈 문자열 preg_replace이다를 사용하지 않을

그가 넣은 것과 다른 것 ... 사용자에게 피드백을주는 것이 좋을 것입니다. 일부 문자 (좋지 ​​않은 문자를 캡처하고 표시하는 것)가 유효성 검사를 통과하지 못했다는 것을 알려주는 것이 좋습니다.

그 외에도 꽤 괜찮은 것 같습니다. 나는 그것이 가능한 문자의 넓은 범위와 사용자를 제공하고, 그 이상의 보안 암호를 만들 필요가 없다고 생각합니다. 또한 암호에 허용 된 문자를 사용자에게 알려서 추측 할 필요가 없도록하는 것이 유용 할 수 있습니다.

+0

이 사실에 플러그의 일부, 그리고 사용자와 상호 작용하는 능력을 제한했다. 실제 사용자가 불량 문자를 입력 할 확률이 낮아 지원 요청을 기꺼이 처리 할 의향이 있습니다. – JonDrnek

+0

비록 이전에 암호 변경이 실패 할 수도 있지만 ... 그 것으로 보겠습니다 – JonDrnek

관련 문제