Estoy creando una aplicación que permite al usuario POST
datos de lienzo HTML5 que luego se codifican en base64 y se muestran a todos los usuarios. Estoy considerando analizar los datos en un archivo .png real y almacenarlos en el servidor, pero la ruta base64 me permite almacenar las imágenes en una base de datos y minimizar las solicitudes. Las imágenes son únicas, pocas, y la página no se actualizará a menudo.Validación de imágenes codificadas en base64
Un poco de jQuery tomará los datos de lona, data:image/png;base64,iVBORw...
y lo pasa junto a un script PHP que lo envuelve, así: <img src="$data"></img>
Sin embargo, la seguridad es la piedra angular y la necesidad de validar los datos de lona de base 64 para prevenir la transmisión datos maliciosos en la solicitud POST
. Mi principal preocupación es evitar que las URL externas se inyecten en la etiqueta <img>
y se soliciten en la carga de la página.
actualmente tienen una configuración como esta:
$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;
quiero para asegurarse de que mi configuración actual es lo suficientemente seguro para evitar que la URL externa sea insertado en la etiqueta <img>
, y si no, qué se puede hacer para validar aún más los datos de imagen?
Esto funcionó muy bien! Aceptado. 'imagepng' arrojará' el argumento proporcionado no es un recurso de Imagen válido' si los datos de la imagen no son válidos, así que envolví esa función en una instrucción 'if' para atraparla si falla. – ssh2ksh
Puede usar 'imagecreatefrompng ($ base64)' si devuelve falso, no significa imagen – mghhgm