현재 위치: > 최신 기사 목록> MD5_File ()을 사용하여 PHP 프로젝트의 구성 파일이 비밀리에 변경되었는지 여부를 감지하는 방법은 무엇입니까?

MD5_File ()을 사용하여 PHP 프로젝트의 구성 파일이 비밀리에 변경되었는지 여부를 감지하는 방법은 무엇입니까?

M66 2025-06-23

PHP 프로젝트를 개발할 때, 구성 파일은 일반적으로 데이터베이스 연결 정보, API 키 등과 같은 중요한 데이터를 저장합니다. 일단 부여되지 않은 인력이 구성 파일을 조작하면 보안 위험, 데이터 유출 또는 프로그램 이상으로 이어질 수 있습니다. 따라서 구성 파일이 변조되었는지 여부를 즉시 감지하는 것이 특히 중요합니다.

이 기사는 PHP 내장 기능 MD5_File () 을 사용하여 구성 파일의 무결성을 감지하여 비밀리에 변경되었는지 여부를 결정하는 방법을 소개합니다.

md5_file () 소개

md5_file ()은 PHP가 지정된 파일의 MD5 해시 값 (HASH)을 계산하기 위해 제공 한 함수입니다. MD5는 널리 사용되는 해시 함수로 출력은 32 자 66 진수 문자열입니다.

파일의 MD5 값을 사용하여 이전에 저장된 MD5가 현재 파일 MD5와 일치하는지 여부를 비교 한 다음 파일이 수정되었는지 여부를 결정할 수 있습니다.

구성 파일 수정을 감지하기위한 기본 아이디어

  1. 초기화 단계 : 구성 파일이 정상적이고 안전한 경우 먼저 구성 파일의 MD5 값을 계산하고 예를 들어 특수 파일 또는 데이터베이스에 쓰기와 같은 저장하십시오.

  2. 감지 단계 : 프로그램이 실행될 때마다 구성 파일의 MD5 값을 다시 계산하고 이전에 저장된 값과 비교하십시오.

  3. 결과 판단 :

    • MD5가 일관된 경우 구성 파일이 수정되지 않았습니다.

    • MD5가 일치하지 않으면 구성 파일을 조작하고 알람이 필요하거나 해당 처리가 필요하다는 것을 의미합니다.

샘플 코드

구성 파일 경로가 config.php 라고 가정하면 다음 코드를 사용하여 감지를 구현할 수 있습니다.

 <?php
// 구성 파일 경로
$configFile = __DIR__ . '/config.php';

// 알려진 보안 프로파일을 저장하십시오MD5값(실제로 데이터베이스 나 파일에서 읽을 수 있습니다.)
$knownMd5 = 'e99a18c428cb38d5f260853678922e03'; // 示例값,请替换为实际값

// 현재 구성 파일을 계산합니다MD5
$currentMd5 = md5_file($configFile);

if ($currentMd5 === false) {
    echo "구성 파일을 읽을 수 없습니다!";
    exit;
}

// 차이MD5값
if ($currentMd5 === $knownMd5) {
    echo "구성 파일이 수정되지 않았습니다,MD5검증이 통과되었습니다。";
} else {
    echo "경고하다!구성 파일이 수정되었습니다,MD5확인이 실패했습니다!";
    // 여기에 로그를 쓸 수 있습니다,이메일 또는 기타 알람을 보내십시오
}
?>

설명

  • 프로젝트를 배포 할 때 먼저 md5_file ()를 실행하고 초기 MD5 값을 얻고 저장할 수 있습니다.

  • 이 예에서 $ 알려진 MD5는 직접 하드 코딩되며 실제 프로젝트의 보안 스토리지 (예 : 데이터베이스 또는 보안 파일)에 작성하는 것이 좋습니다.

  • 구성 파일 경로가 변경되면 코드의 경로를 동기화해야합니다.

초기 MD5 값을 얻는 방법?

임시 스크립트를 작성하고 한 번 실행하여 구성 파일의 MD5 값을 얻을 수 있습니다.

 <?php
echo md5_file(__DIR__ . '/config.php');
?>

출력 문자열을 후속 비교의 표준으로 저장하십시오.

아이디어를 확장하십시오

  • 시간이 정해진 감지 : 예정된 작업 (예 : Linux Crontab)을 사용하여 정기적으로 탐지 스크립트를 실행하여 적시에 변조를 감지합니다.

  • 로그와 결합 : 파일이 수정되었음을 발견 한 후 쉽게 조사 할 수 있도록 관련 정보 (시간, IP 등)를 기록하십시오.

  • 멀티 파일 감지 : 프로젝트에 여러 가지 중요한 구성 파일이있는 경우 배열 및 루프 감지에서 배치로 저장할 수 있습니다.

참조 링크