Tôi đang tạo ứng dụng cho phép người dùng POST
dữ liệu canvas HTML5 sau đó được mã hóa trong base64 và được hiển thị cho tất cả người dùng. Tôi đang xem xét phân tích cú pháp dữ liệu thành tệp .png thực tế và lưu trữ trên máy chủ, nhưng tuyến đường cơ sở cho phép tôi lưu trữ hình ảnh trong cơ sở dữ liệu và giảm thiểu yêu cầu. Các hình ảnh là duy nhất, ít và trang sẽ không được làm mới thường xuyên.Xác thực hình ảnh được mã hóa base64
Một chút jQuery sẽ mất dữ liệu canvas, data:image/png;base64,iVBORw...
và vượt qua nó cùng với một kịch bản PHP mà kết thúc tốt đẹp nó như vậy: <img src="$data"></img>
Tuy nhiên, an ninh là nền tảng và cần phải xác nhận các dữ liệu base64 vải để ngăn chặn qua 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 các URL bên ngoài được tiêm vào thẻ <img>
và được yêu cầu khi 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 chắc chắn thiết lập hiện tại của tôi là đủ an toàn để ngăn chặn các URL bên ngoài không bị chèn vào thẻ <img>
, và nếu không, những gì có thể được thực hiện để xác nhận thêm dữ liệu hình ảnh?
này làm việc tuyệt vời! Đã chấp nhận. 'imagepng' sẽ ném' đối số được cung cấp không phải là tài nguyên hình ảnh hợp lệ' nếu dữ liệu hình ảnh không hợp lệ, vì vậy tôi đã bọc hàm đó trong câu lệnh 'if' để nắm bắt nó nếu nó không thành công. – ssh2ksh
Bạn có thể sử dụng 'imagecreatefrompng ($ base64)' nếu trả về false, có nghĩa là không phải hình ảnh – mghhgm