> 백엔드 개발 > PHP 튜토리얼 > 보안 이미지 업로드 스크립트를 작성하는 방법은 무엇입니까?

보안 이미지 업로드 스크립트를 작성하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-05 12:03:10
원래의
788명이 탐색했습니다.

How to Build a Secure Image Upload Script?

전체 보안 이미지 업로드 스크립트

질문에서 논의된 광범위한 조치에도 불구하고 포괄적인 이미지 업로드 보안 스크립트는 다음 추가 측면을 해결해야 합니다. :

클라이언트 측 유효성 검사:

  • HTML5 입력 유형="파일" 속성을 사용하여 지원되지 않는 파일 형식을 필터링합니다.

파일 이름 바꾸기:

  • 파일 이름을 방지하기 위해 업로드된 파일의 이름을 고유하고 임의의 이름으로 바꿉니다. 추측.
  • 파일 이름에서 민감한 정보(예: 확장자)를 제거하세요.

파일 확장자 확인:

  • 만들기 허용된 파일 확장자의 화이트리스트 및 업로드된 파일 확장자의 유효성을 검사합니다.
  • 이중 파일 확장자(예: "image.jpg.exe")가 있는지 확인하세요.

이미지 분석:

  • 이미지 분석 기술을 사용하여 업로드된 파일이 유효한 이미지인지, 악성 파일로 위장한 파일이 아닌지 확인합니다. image.

파일 저장:

  • 업로드된 이미지를 웹사이트 루트 디렉터리 외부의 안전한 위치에 저장하세요.
  • 사용 승인된 파일에 대한 액세스를 제한하기 위해 액세스 제어 목록(ACL)을 지원하는 파일 시스템

데이터베이스 통합:

  • 원본 이름, 새 이름, MIME 유형 및 업로드된 이미지를 포함하여 업로드된 이미지를 추적하는 데이터베이스 테이블을 만듭니다. 업로드 날짜.
  • 데이터베이스를 사용하여 승인된 이미지를 검색하고 표시합니다. users.

예제 스크립트:

다음은 위의 보안 조치를 통합한 수정된 PHP 스크립트입니다.

<?php

if (!empty($_FILES['image'])) {
  // Validate file extension
  if (!in_array($_FILES['image']['type'], ['image/jpeg', 'image/png', 'image/gif'])) {
    echo 'Invalid file type';
    exit;
  }

  // Validate file size
  if ($_FILES['image']['size'] > 1 * 1024 * 1024) { // 1MB
    echo 'File too large';
    exit;
  }

  // Generate random filename
  $filename = uniqid() . '.' . pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);

  // Rename and move file
  if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/' . $filename)) {
    // Insert into database
    $sql = "INSERT INTO images (name, original_name, mime_type, upload_date) VALUES (:name, :original_name, :mime_type, :upload_date)";
    $stmt = $conn->prepare($sql);
    $stmt->execute([
      ':name' => $filename,
      ':original_name' => $_FILES['image']['name'],
      ':mime_type' => $_FILES['image']['type'],
      ':upload_date' => date('Y-m-d H:i:s')
    ]);

    echo 'Image uploaded successfully';
  } else {
    echo 'Error uploading image';
  }
}
?>
로그인 후 복사

이 스크립트는 파일 확장자, 크기 및 MIME 유형을 확인하고, 파일 이름을 바꾸고, 안전하게 저장하고, 데이터베이스.

추가 권장사항:

  • WAF(웹 애플리케이션 방화벽)를 사용하여 악의적인 요청과 공격을 차단하세요.
  • 업로드를 모니터링하세요. 의심스러운 활동에 대한 디렉토리입니다.
  • PHP 버전과 보안 라이브러리를 정기적으로 업데이트하여 문제를 해결하세요. 취약점.

위 내용은 보안 이미지 업로드 스크립트를 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿