Проверка кодированных изображений base64

м создание приложения, которое позволяет пользователюPOST Данные холста HTML5, которые затем кодируются в base64 и отображаются для всех пользователей. Я рассматриваю возможность анализа данных в реальном файле .png и хранения на сервере, но маршрут base64 позволяет мне сохранять изображения в базе данных и минимизировать запросы. Изображения уникальны, мало, и страница выигралачасто обновляется.

Немного JQuery будет принимать данные холста,data:image/png;base64,iVBORw... и передает его в PHP-скрипт, который упаковывает его так:<img src="$data">

Однако безопасность является краеугольным камнем, и необходимо проверять данные холста base64, чтобы предотвратить передачу вредоносных данных вPOST запрос. Моя главная задача состоит в том, чтобы предотвратить попадание внешних URL-адресов в<img> тег и запрашивается при загрузке страницы.

В настоящее время у меня есть такая настройка:

$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;

Я хочу убедиться, что мои текущие настройки достаточно безопасны, чтобы предотвратить вставку внешних URL-адресов в<img> тег, и если нет, что можно сделать для дальнейшей проверки данных изображения?

Ответы на вопрос(6)

Ваш ответ на вопрос