Hướng dẫn php check if base64 is image - php kiểm tra xem base64 có phải là hình ảnh không

Tôi đang xây dựng một ứng dụng cho phép người dùng POST HTML5 Dữ liệu Canvas sau đó được mã hóa trong Base64 và hiển thị cho tất cả người dùng. Tôi đang xem xét phân tích dữ liệu vào một tệp .png thực tế và lưu trữ trên máy chủ, nhưng tuyến Base64 cho phép tôi lưu trữ hình ảnh trong cơ sở dữ liệu và giảm thiểu các yêu cầu. Các hình ảnh là duy nhất, rất ít và trang sẽ không được làm mới thường xuyên.

Một chút jQuery sẽ lấy dữ liệu canvas, data:image/png;base64,iVBORw... và chuyển nó theo tập lệnh PHP kết thúc nó như vậy:

function is_base64[$str]{
    if [ base64_encode[base64_decode[$str, true]] === $str]{
       return true;
    } else {
       return false;
    }
}
0

Tuy nhiên, bảo mật là nền tảng và cần xác nhận dữ liệu Canvas Base64 để ngăn chặn dữ liệu độc hại trong yêu cầu POST. Mối quan tâm chính của tôi là ngăn chặn các URL bên ngoài được tiêm vào thẻ

function is_base64[$str]{
    if [ base64_encode[base64_decode[$str, true]] === $str]{
       return true;
    } else {
       return false;
    }
}
2 và được yêu cầu trên tải trang.

Tôi hiện đang có một thiết lập như thế này:

$data = [isset[$_POST['canvas']] && is_string[$_POST['canvas']]] ? $_POST['canvas'] : null;
$base = str_replace['data:image/png;base64,', '', $data];
$regx = '~^[[A-Za-z0-9+/]{4}]*[[A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==]$~'

if [[substr[$data, 0, 22]] !== 'data:image/png;base64,']
{
  // Obviously fake, doesn't contain the expected first 22 characters.
  return false;
}

if [[base64_encode[base64_decode[$base64, true]]] !== $base64]
{
  // Decoding and re-encoding the data fails, something is wrong
  return false;
}

if [[preg_match[$regx, $base64]] !== 1] 
{
  // The data doesn't match the regular expression, discard
  return false;
}

return true;

Tôi muốn đảm bảo thiết lập hiện tại của tôi đủ an toàn để ngăn các URL bên ngoài được chèn vào thẻ

function is_base64[$str]{
    if [ base64_encode[base64_decode[$str, true]] === $str]{
       return true;
    } else {
       return false;
    }
}
2 và nếu không, có thể làm gì để xác thực dữ liệu hình ảnh?

function is_base64[$str]{
    if [ base64_encode[base64_decode[$str, true]] === $str]{
       return true;
    } else {
       return false;
    }
}

function is_base64[$str]{
    if [ base64_encode[base64_decode[$str, true]] === $str]{
       return true;
    } else {
       return false;
    }
}
4

Đây là tên thật và chức năng thất bại !!!!

@desaikalpesh34 Tôi tin rằng điều này giải quyết vấn đề của bạn và của tôi!

private function isBase64Encoded[string $s] : bool
    {
        if [[bool] preg_match['/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s] === false] {
            return false;
        }
        $decoded = base64_decode[$s, true];
        if [$decoded === false] {
            return false;
        }
        $encoding = mb_detect_encoding[$decoded];
        if [! in_array[$encoding, ['UTF-8', 'ASCII'], true]] {
            return false;
        }
        return $decoded !== false && base64_encode[$decoded] === $s;
    }

PHP có hai chức năng tích hợp để làm việc với Base64: base64_encode và base64_decode. Dường như điều này là đủ để làm việc với thuật toán này, nhưng thực tế chứng minh rằng nó không phải lúc nào cũng đơn giản. Ví dụ, một số người dùng gặp phải vấn đề khi cố gắng xác thực các giá trị Base64.

Trước hết tôi muốn chỉ cho bạn gần như cách hoàn hảo để kiểm tra xem chuỗi có được mã hóa Base64 không.

Bài Viết Liên Quan

Chủ Đề