Facebook Proxy Loader Security - PullRequest
1 голос
/ 19 мая 2011

Я использую прокси-скрипт PHP для загрузки изображений из Facebook во Flash без каких-либо нарушений в песочнице.Это взято из руководства здесь: http://www.permadi.com/blog/2010/12/loading-facebook-profile-picture-into-flash-swf-using-open-graph-api/. Соответствующий код PHP:

<?php
    $path=$_GET['path'];
    if (stristr($path, "fbcdn.")==FALSE && stristr($path, "facebook.")==FALSE)
    {
        echo "ERROR";
        exit;
    }
    header("Content-Description: Facebook Proxied File");
    header("Content-Type: image");
    header("Content-Disposition: attachment; filename=".$path);
    @readfile($path);
?>

В руководстве упоминается, что для реальных приложений рекомендуются дополнительные меры безопасности.Какие дополнительные меры будут применимы к этому?Может быть, какой-то ключ передается из Flash в PHP?

Я понимаю, что ничего не могу сделать, чтобы полностью защитить Flash от декомпиляции, но могу ли я предотвратить использование скрипта злонамеренно?

1 Ответ

3 голосов
/ 19 мая 2011

Вы должны ограничить прокси для загрузки файлов изображений из Facebook. Ваша текущая «защита» разрешит, например, этот URL: http://virus.provider.com/fbcdn./virus.exe

  • Выполните более точные проверки домена bname, возможно, используя функцию parse_url .
  • Убедитесь, что вы действительно обслуживаете только изображения. Убедитесь, что имя файла заканчивается расширением изображения (это очень помогает для клиентов Windows), но также подумайте о более тщательной проверке фактического содержимого файла.
  • Попробуйте добавить проверку $_SERVER['HTTP_REFERER'], чтобы снизить стимулы использовать ваш скрипт для хотлинкинга. Если HTTP_REFERER не пуст, убедитесь, что это действительно ваш сайт. В основном это защитит вас от воров пропускной способности.
  • Убедитесь, что это действительно удаленный путь. Ваш текущий скрипт может быть обманут, чтобы отправлять, например, ваши PHP-файлы без разбора, включая пароли и другие секреты!
  • Для имени файла в заголовке Content-Disposition должно быть задано имя файла, а не полный путь.

Также рассмотрите возможность кэширования данных файла на прокси-сервере для ускорения нескольких вызовов одного и того же файла.

Это несколько вещей, которые нужно иметь в виду. Вы можете раскрыть больше, если подумаете.

...