Теперь я прочитал несколько тем SO о том, как проверить, являются ли закачки PHP безопасными от вирусов, и суть в том, что я не могу на 100% гарантировать, что закачки не содержат вирусов — независимо от их расширения. Одно из предложенных решений — удалить расширение во время загрузки, а затем собрать его, когда люди захотят его скачать.
Однако я хочу, чтобы пользователи могли просматривать файлы прямо на сайте. Как мне это сделать? Например, создание iframe с загруженным файлом PDF — это безопасно или это похоже на его выполнение, которое даст потенциальным вирусам возможность распространения? С DOCs я хотел использовать Google Docs, поэтому я вставил бы iframe Google Docs, который ПОЛУЧИЛ URL URL DOC на моем сервере. Это безопасно тогда?
Или просто нет другого способа, кроме как разрешить загрузку, чтобы предотвратить распространение потенциальных вирусов на сервер? Если это так, как проходит сборка расширения? Я предполагаю, что когда кто-то загружает test.exe, я удаляю часть .exe, но сохраняю в базе данных. Затем, когда кто-то запрашивает загрузку, я переименовываю тестовый файл в test.exe и запускаю загрузку. После этого я переименую его обратно, чтобы проверить. Это верно?
Кроме того: как такие сервисы, как Trello, делают это? Когда я загружаю туда файл изображения, он показывается напрямую — без заметной задержки при сканировании на вирусы или чем-то еще. Я думал об использовании virustotal.com API, но это, безусловно, занимает довольно много времени, не так ли? Будет ли нормально разрешить людям загружать файлы, а не показывать их публично, пока не будет выполнено сканирование virustotal.com, а затем считать файл безопасным?
Спасибо и всем за помощь и извините, если я что-то пропустил.
Есть несколько подходов, которые я видел на практике за эти годы:
Я не уверен, что рекомендовать, потому что я не знаю вашу модель угрозы или эксплуатационные ограничения.
Тем не менее, более общая проблема не обслуживать браузерные эксплойты (например, XSS) или разрешать обратные оболочки на сервере на самом деле довольно легко, но не тривиально.
Других решений пока нет …