웹 개발에서 사용자 입력은 가장 일반적이고 가장 쉽게 공격 할 수있는 항목입니다. 사용자 입력 처리의 보안을 향상시키기 위해 PHP는 많은 실용적인 기능을 제공하며, 그중 Filter_Input () 및 Crypt () 는 두 가지 매우 중요한 보안 도구입니다. 이 기사에서는이 두 기능을 조합하여 XSS (크로스 사이트 스크립팅 공격) 및 암호 누출과 같은 일반적인 공격 방법을 효과적으로 방지하는 방법을 소개합니다.
Filter_Input () 은 PHP의 내장 기능으로, 포스트 또는 GET 데이터와 같은 외부 입력을 가져오고 필터링하는 기능입니다. 악성 데이터가 응용 프로그램 로직 계층에 입력하는 것을 방지하기 위해 사용자가 제출 한 데이터를 효과적으로 전처리 할 수 있습니다. 예를 들어:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
이 코드 라인의 목적은 게시물 요청에서 사용자 이름 매개 변수를 얻고 HTML 태그 및 특수 문자를 제거하여 크로스 사이트 스크립팅 공격을 방지하는 것입니다.
사용자 비밀번호를 안전하게 보관하는 것은 개발자가 심각하게 취해야하는 문제입니다. PHP가 제공하는 Crypt () 함수는 다양한 암호화 알고리즘과 Blowfish 알고리즘 ( $ 2y $ 로 시작하는 소금 값으로 식별)의 권장 사용을 지원합니다. 암호화 된 암호는 크랙하기가 어렵고 데이터베이스가 유출 되더라도 공격자는 원래 비밀번호를 쉽게 복원 할 수 없습니다.
예제 사용 :
$salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(22))), 0, 22);
$hashedPassword = crypt($password, $salt);
위의 코드에서 Random_Bytes ()는 각 사용자의 암호가 동일하더라도 생성 된 암호 텍스트가 다르기 위해 고강도 랜덤 문자열을 생성하는 데 사용됩니다.
Filter_Input () 및 crypt ()를 사용하면 안전한 데이터 처리 프로세스를 설정할 수 있습니다.
먼저 XSS 및 코드 주입을 방지하기 위해 사용자 입력을 필터링합니다.
그런 다음 crypt ()를 사용하여 비밀번호를 암호화하고 저장하여 일반 텍스트 비밀번호가 유출되지 않도록합니다.
마지막으로 암호화 된 비밀번호와 사용자 이름 만 데이터베이스에 저장됩니다.
이 처리 프로세스는 일련의 일반적인 웹 공격을 효과적으로 방지하고 웹 사이트를위한 견고한 보안 기반을 제공 할 수 있습니다.
로그인 할 때는 데이터베이스의 암호화 된 비밀번호와 사용자가 제출 한 암호를 비교하기 위해 Crypt () 만 사용하면됩니다.
$inputPassword = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$storedHash = '비밀번호 해시 값 데이터베이스에서 가져온 값';
if (crypt($inputPassword, $storedHash) === $storedHash) {
echo "비밀번호 확인이 통과되었습니다";
} else {
echo "오류 비밀번호";
}
이 검증 방법은 안전하고 표준이며 비밀번호를 일반 텍스트로 복원 할 필요는 없습니다.
Filter_Input () 및 Crypt ()를 결합하여 웹 사이트의 사용자 입력 처리의 보안을 크게 향상시킬 수 있습니다. Filter_Input () 는 악성 입력을 방지하기 위해 필터링을 담당합니다. Crypt ()는 암호 누출을 방지하기 위해 암호화를 담당합니다. 이 두 기능은 보안 로그인 시스템과 사용자 관리 시스템을 구축 할 때 필수적입니다. 개발자는 사용자와 시스템의 안전을 보호하기 위해 이러한 기능을 사용하는 좋은 습관을 개발해야합니다.