PHP 프로젝트를 개발할 때, 구성 파일은 일반적으로 데이터베이스 연결 정보, API 키 등과 같은 중요한 데이터를 저장합니다. 일단 부여되지 않은 인력이 구성 파일을 조작하면 보안 위험, 데이터 유출 또는 프로그램 이상으로 이어질 수 있습니다. 따라서 구성 파일이 변조되었는지 여부를 즉시 감지하는 것이 특히 중요합니다.
이 기사는 PHP 내장 기능 MD5_File () 을 사용하여 구성 파일의 무결성을 감지하여 비밀리에 변경되었는지 여부를 결정하는 방법을 소개합니다.
md5_file ()은 PHP가 지정된 파일의 MD5 해시 값 (HASH)을 계산하기 위해 제공 한 함수입니다. MD5는 널리 사용되는 해시 함수로 출력은 32 자 66 진수 문자열입니다.
파일의 MD5 값을 사용하여 이전에 저장된 MD5가 현재 파일 MD5와 일치하는지 여부를 비교 한 다음 파일이 수정되었는지 여부를 결정할 수 있습니다.
초기화 단계 : 구성 파일이 정상적이고 안전한 경우 먼저 구성 파일의 MD5 값을 계산하고 예를 들어 특수 파일 또는 데이터베이스에 쓰기와 같은 저장하십시오.
감지 단계 : 프로그램이 실행될 때마다 구성 파일의 MD5 값을 다시 계산하고 이전에 저장된 값과 비교하십시오.
결과 판단 :
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 값을 얻을 수 있습니다.
<?php
echo md5_file(__DIR__ . '/config.php');
?>
출력 문자열을 후속 비교의 표준으로 저장하십시오.
시간이 정해진 감지 : 예정된 작업 (예 : Linux Crontab)을 사용하여 정기적으로 탐지 스크립트를 실행하여 적시에 변조를 감지합니다.
로그와 결합 : 파일이 수정되었음을 발견 한 후 쉽게 조사 할 수 있도록 관련 정보 (시간, IP 등)를 기록하십시오.
멀티 파일 감지 : 프로젝트에 여러 가지 중요한 구성 파일이있는 경우 배열 및 루프 감지에서 배치로 저장할 수 있습니다.
PHP 공식 문서 : md5_file ()