Мне нужно найти способ проверки изображения, которое 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'; }