PHP Проверять кодированные изображения base64

Мне нужно найти способ проверки изображения, которое base64 закодировано в PHP.

Подтверждаю, что я думаю о XSS и других подобных вещах.

Поток:

У пользователя есть некоторые параметры, в которых один и больше в базе64 кодируют строку изображения и публикуют их на моем сайте. Когда я получаю параметр fx, называемый img1, с строкой изображения с кодировкой base64 в качестве значения.

Затем я хотел бы убедиться, что эта закодированная строка base64 состоит только из изображения и не имеет никаких тегов и любых других вещей, которые будут пытаться использовать хакеры.

Кто-нибудь знает какие-либо функции PHP или плагины, которые могут мне помочь?

Вы можете попытаться создать изображение из строки, используя функцию imagecreatefromstring .

Затем вы можете проверить размеры и тип изображения.

Если вы хотите сделать еще один шаг, вы можете создать новое изображение, а затем попытаться скопировать изображение пользователя на него и использовать его в качестве окончательного изображения. Поскольку окончательное изображение было изначально создано вами, есть очень тонкий шанс, который любой хакер может получить.

Я бы взял только кодировку base64 и поместил ее в тег изображения. Но безопасность – очень важная вещь в системе, которую я строю, поэтому мне просто нужно быть уверенным, что что-то вроде XSS не может использоваться в кодированных изображениях base64 🙂

Затем вы делаете это как с любым другим пользовательским вводом: вы htmlspecialchars -encode предоставленный пользователем текст перед тем, как поместить его в свой HTML, чтобы сохранить целостность вашего HTML. Строки изображения Base64 не являются исключением. См . Великий эскапизм (или: что вам нужно знать, чтобы работать с текстом внутри текста) .

Разумеется, капли данных изображения могут открыть вас до совершенно разных векторов атаки через уязвимые парсители изображений. Таким образом, вы можете сначала декодировать эту строку изображения в ресурс изображения и сохранить ее снова, используя функции gd или Imagick, то есть открытие и повторное сохранение / повторное кодирование изображения.

Попробуйте эту библиотеку

https://github.com/imaimai86/Intervention-Base64Image

Он использует библиотеку изображений Intervention для проверки изображений с кодировкой base64

 $str = 'your base64 code' ; if (base64_encode(base64_decode($str, true)) === $str && imagecreatefromstring(base64_decode($img))) { echo 'Success! The String entered match base64_decode and is Image'; }