Ich erstelle eine Anwendung, die dem Benutzer POST
HTML5-Canvas-Daten ermöglicht, die dann in base64 codiert und allen Benutzern angezeigt werden. Ich überlege, die Daten in eine tatsächliche PNG-Datei zu analysieren und auf dem Server zu speichern, aber die base64-Route ermöglicht es mir, die Bilder in einer Datenbank zu speichern und Anfragen zu minimieren. Die Bilder sind einzigartig, wenige und die Seite wird nicht oft aktualisiert.Validierung von Base64-kodierten Bildern
Ein bisschen jQuery wird die Leinwand Daten nehmen, data:image/png;base64,iVBORw...
und leitet sie zusammen an ein PHP-Skript, das es wie so hüllt: <img src="$data"></img>
Sicherheit ist jedoch Stein und müssen die base64 Leinwand Daten validieren Weitergabe zu verhindern bösartige Daten in der POST
Anfrage. Mein wichtigstes Anliegen ist es, zu verhindern, dass externe URLs in das -Tag eingefügt und beim Laden der Seite angefordert werden.
Im Moment habe ich ein Setup wie folgt aus:
$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;
Ich möchte meine aktuelle Setup stellen Sie sicher, sicher genug ist, externe URLs zu verhindern, dass in den <img>
Tag eingefügt werden, und wenn nicht, was getan werden kann, um die Bilddaten weiter zu validieren?
Das funktionierte großartig! Akzeptiert. 'imagepng' wird' übergebenes Argument ist keine gültige Bildressource', wenn die Bilddaten nicht gültig sind, also habe ich diese Funktion in eine 'if' Anweisung eingeschlossen, um sie zu fangen, falls sie fehlschlägt. – ssh2ksh
Sie können 'imagecreatefrompng ($ base64)' verwenden, wenn false zurückgegeben wird, bedeutet nicht Image – mghhgm