Überprüfen von Base64-codierten Bildern

Ich erstelle eine Anwendung, die es dem Benutzer ermöglichtPOST HTML5-Canvas-Daten, 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 Anforderungen zu minimieren. Die Bilder sind einzigartig, wenige, und die Seite wird nicht oft aktualisiert.

Ein bisschen jQuery nimmt die Canvas-Daten,data:image/png;base64,iVBORw... und übergibt es an ein PHP-Skript, das es folgendermaßen umschließt:<img src="$data"></img>

Die Sicherheit ist jedoch ein Eckpfeiler und muss die Base64-Zeichenbereichsdaten validieren, um zu verhindern, dass böswillige Daten in das System übertragen werdenPOST anfordern. Mein Hauptanliegen ist es, zu verhindern, dass externe URLs in die Website eingefügt werden<img> Tag und wird beim Laden der Seite angefordert.

Ich habe derzeit ein Setup wie folgt:

$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 sicherstellen, dass meine aktuelle Einrichtung sicher genug ist, um zu verhindern, dass externe URLs in die eingefügt werden<img> tag, und wenn nicht, was kann getan werden, um die Bilddaten weiter zu validieren?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage