У меня есть простой скрипт (скопирован с сайта chatGPT), который проверяет расширение.
Код: Выделить всё
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
$check = getimagesize($_FILES["file"]["tmp_name"]);
$allowedTypes = ['jpg', 'jpeg', 'gif', 'png'];
print_r($imageFileType);
echo "Response: ". in_array($imageFileType, $allowedTypes);
if (in_array($imageFileType, $allowedTypes)) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
echo "file=" . urlencode($target_file);
} else {
http_response_code(500);
echo "Sorry, there was an error uploading your file.";
}
} else {
http_response_code(400);
echo "File is not an image or not allowed.";
}
}
- Теперь, если я попытаюсь загрузить PNG, все будет работать нормально. Однако, если я создам простой файл PHP и попытаюсь загрузить его, он не будет загружен должным образом.
- Теперь, если вы измените магические байты файла PHP и попытаетесь загрузить он все еще не загружен, поскольку мы проверяем не магические байты, а расширение.
- Если я попытаюсь изменить магические байты и изменить файл PHP с hello.php
- Если я попытаюсь изменить магические байты и изменить файл PHP с hello.php
- code> в hello.php.png, он загружается нормально.
Чего здесь не хватает? Я вижу онлайн-руководства, в которых, если мы загрузим файл, изменив hello.php.png, он будет рассматриваться как PHP, поскольку магические байты — это PNG, но на самом деле файл — это PHP. Я что-то упустил?
Подробнее здесь: https://stackoverflow.com/questions/787 ... sms-in-php