매일 웹 사이트 개발 및 운영 및 유지 보수에서 파일 무결성은 시스템 보안의 중요한 부분입니다. 파일이 조작되면 시스템이 공격을 받거나 데이터가 위반되었음을 의미 할 수 있습니다. 이 상황에 대처하기 위해 PHP의 내장 MD5_File () 함수를 사용하여 간단하고 실용적인 파일 무결성 감지 도구를 구축 할 수 있습니다.
MD5_FILE ()은 PHP가 지정된 파일의 MD5 해시 값을 직접 계산하기 위해 제공 한 함수입니다. 기본 구문은 다음과 같습니다.
md5_file(string $filename, bool $binary = false): string|false
$ filename : 계산할 파일 경로.
$ binary : 해시를 원래 바이너리 형식으로 반환할지 여부 (기본값은 거짓 이며 32 비트 16 진수 문자열을 반환).
예:
$hash = md5_file('example.txt');
echo $hash;
우리는 두 단계로 도구를 설계했습니다.
벤치 마크 확인 코드 (기준선) 생성 : 모니터링 할 모든 파일의 MD5 값을 기록하고 JSON 파일로 저장하십시오.
주기적 탐지 : 현재 파일의 MD5 값을 다시 계산하고 기준 파일과 비교 한 후 수정, 삭제 또는 추가되었는지 여부를 결정하십시오.
function generateBaseline($dir, $baselineFile = 'baseline.json') {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
$hashes = [];
foreach ($files as $file) {
if ($file->isFile()) {
$path = str_replace('\\', '/', $file->getRealPath());
$hashes[$path] = md5_file($path);
}
}
file_put_contents($baselineFile, json_encode($hashes, JSON_PRETTY_PRINT));
echo "기준 파일이 생성되었습니다: {$baselineFile}\n";
}
// 사용 예제
generateBaseline(__DIR__ . '/files');
이 기능은 파일 디렉토리의 모든 파일을 재귀 적으로 스캔하고 각 파일의 전체 경로와 MD5 값을 Baseline.json 에 씁니다.
function checkIntegrity($dir, $baselineFile = 'baseline.json') {
if (!file_exists($baselineFile)) {
echo "기준 파일을 찾을 수 없습니다,기준이 되십시오。\n";
return;
}
$baseline = json_decode(file_get_contents($baselineFile), true);
$current = [];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($files as $file) {
if ($file->isFile()) {
$path = str_replace('\\', '/', $file->getRealPath());
$current[$path] = md5_file($path);
}
}
// 수정 또는 삭제 된 파일을 감지합니다
foreach ($baseline as $path => $hash) {
if (!isset($current[$path])) {
echo "[삭제] {$path}\n";
} elseif ($current[$path] !== $hash) {
echo "[개정하다] {$path}\n";
}
}
// 새 파일을 감지합니다
foreach ($current as $path => $hash) {
if (!isset($baseline[$path])) {
echo "[새로운] {$path}\n";
}
}
}
// 사용 예제
checkIntegrity(__DIR__ . '/files');
이 감지 스크립트는 이전 및 새 해시를 비교하고 수정, 추가 또는 삭제 된 각 파일 경로를 출력하여 개발자가 적시에 측정 할 수 있도록합니다.
테스트 결과는 이메일, 로그 파일 또는 웹 페이지를 통해 표시 할 수 있습니다. 예를 들어:
file_put_contents('integrity_report.log', $report);
header('Location: https://m66.net/report-viewer');
위의 코드는 탐지 보고서를 로그 파일로 리디렉션 한 다음 https://m66.net/report-viewer 와 같은 보고서 뷰어 페이지로 리디렉션합니다.
MD5_File () 함수를 통해 코드가 거의없는 효율적인 파일 무결성 감지 도구를 구축 할 수 있습니다. 전문 보안 보호 도구를 대체 할 수는 없지만 중소형 웹 사이트가 일반적인 변조 위험을 처리하기에 충분합니다. 실제 배포에서는 스크립트를 정기적으로 CRON 작업으로 실행하고 알림 메커니즘 (예 : 이메일 또는 DingTalk 로봇)과 함께 보안을 더욱 향상시키는 것이 좋습니다.