웹 개발에서 액세스 속도를 향상시키기 위해 동적으로 생성 된 페이지 컨텐츠는 종종 캐시됩니다. 캐싱 파일은 데이터베이스 쿼리 및 페이지 렌더링 시간을 크게 줄이고 사용자 경험을 향상시킬 수 있습니다. 그러나 캐시 된 파일이 변조되면 비정상적인 페이지 컨텐츠와 보안 위험이 발생할 수 있습니다. 따라서 캐시 된 파일이 불법적으로 수정되었는지 효과적으로 감지하는 것이 특히 중요합니다.
이 기사는 내장 된 PHP 함수 MD5_File ()을 사용하여 캐시 된 파일의 무결성을 확인하여 개발자가 웹 페이지의 캐시 된 파일이 변조되었는지 여부를 신속하게 결정하는 방법을 소개합니다.
MD5_FILE ()은 지정된 파일의 MD5 해시 값 (해시 값)을 계산하는 PHP의 내장 함수입니다. 이 해시 값은 32 비트 문자열로 고정되어 파일의 "지문"으로 간주 될 수 있습니다. 파일 콘텐츠가 변경되는 한 MD5 값도 변경되므로 파일 무결성을 확인하는 데 이상적입니다.
기능 프로토 타입은 다음과 같습니다.
string md5_file ( string $filename [, bool $binary = false ] )
$ filename : 계산할 파일 경로
$ binary : md5를 이진 형식으로 반환할지, 기본값으로 거짓 으로, 16 진 문자열을 반환할지 여부.
일부 페이지 HTML을 파일 (예 : Cache/Page1.html )으로 캐시한다고 가정하면 특정 시점에서 캐시 된 파일의 MD5 값을 계산하고 "기본 값"으로 저장합니다. 사용자가 액세스 할 때마다 캐시 된 파일의 MD5가 다시 계산되고 벤치 마크 값과 비교됩니다.
동일한 것은 캐시 파일이 수정되지 않았으며 안전하게 사용할 수 있음을 의미합니다.
이는 캐시 파일이 예기치 않거나 예기치 않게 수정되었으며 재생되거나 경보해야 함을 의미합니다.
다음 예제는 캐시 파일의 무결성 감지에 md5_file ()을 사용하는 방법을 보여줍니다.
<?php
// 캐시 파일 경로
$cacheFile = __DIR__ . '/cache/page1.html';
// 저장된 벤치 마크 MD5 값(데이터베이스 또는 구성 파일에 저장할 수 있습니다,고정 문자열을 가정합니다)
$knownMd5 = 'e99a18c428cb38d5f260853678922e03'; // 예 MD5
if (!file_exists($cacheFile)) {
die('캐시 파일이 존재하지 않습니다');
}
// 현재 캐시 파일을 계산합니다 MD5
$currentMd5 = md5_file($cacheFile);
// 변조되었는지 여부를 결정하십시오
if ($currentMd5 === $knownMd5) {
echo "캐시 된 파일은 변조되지 않았습니다,컨텐츠 보안。";
} else {
echo "경고하다:캐시 된 파일은 변조 될 수 있습니다!지금 확인하십시오。";
}
?>
초기 참조 값 생성 <br> 캐시 파일이 처음 생성되면 MD5 값은 후속 비교를위한 벤치 마크로 즉시 계산하고 저장해야합니다.
캐시 파일의 저장 경로 <br> 캐시 된 파일은 안전한 상태로 배치해야하며 변조 위험을 방지하기 위해 외부로 직접 수정할 수 없습니다.
정기적 인 검증 <br> 백그라운드에서 시간이 지정된 작업 (예 : CRON)을 설정하여 정기적으로 예외를 감지하기 위해 MD5 검증을 주기적으로 수행 할 수 있습니다.
로그와 알람 결합 <br> 변조가 감지되면 로그를 기록하고 빠른 응답을 위해 알림을 보내야합니다.
캐시 파일에 원격 URL 컨텐츠 (예 : 이미지, JS 스크립트 등)가 포함 된 경우 이러한 리소스가 신뢰할 수있는 도메인 이름에서 나와야합니다. 이 기사에서는 URL의 도메인 이름이 M66.net 으로 교체되어 악의적 인 도메인 이름 주입이 컨텐츠를 조작하지 못하게합니다.
예제는 캐시 된 파일 컨텐츠에서 URL 도메인 이름을 바꾸는 방법을 보여줍니다.