Как предотвратить каждую злонамеренную загрузку файла на моем сервере? (проверьте тип файла)?

Я действительно находился в такой же ситуации, как и вы, и лучший совет, который я могу вам дать, это перенести всю бизнес-логику, которую вы можете, на другую систему / процесс, всю тяжелую работу следует выполнять за пределами Dynamics 365.

Вот как я решил проблему:

  1. Создал пользовательскую сущность SMS-сообщение , как вы сделали это в динамике, со всей информацией, необходимой для отправки текстового сообщения. (номер телефона, сообщение, статус и т. д.).

  2. Реализован плагин Async Post Create, который будет отправлять всю эту информацию в очередь Azure Service Bus. Асинхронность здесь действительно важна, так что динамика блокируется как можно меньше. Этот плагин должен быть максимально легким и не иметь никакой бизнес-логики.

  3. Создана функция Azure, которая запускается при получении нового сообщения в очереди. Эта функция Azure выполняла всю бизнес-логику, которая мне была нужна, в основном это была интеграция с SMS-шлюзом. В вашем случае он может вызвать сторонний API для сокращения URL-адреса, интеграции с внешней базой данных и т. Д. Наконец, обновите запись SMS-сообщения с помощью сокращенного URL-адреса и другой необходимой вам информации.

Еще несколько заметок

  • Вы можете легко масштабировать большинство служб Azure, если считаете, что вашему процессу требуется повышение производительности, что является основным преимуществом по сравнению с обработкой в ​​динамике.
  • На шаге 2 вы можете достичь этой логики с помощью Webhook .
  • Чем выше пропускная способность, тем больше вы должны подумать о замене шагов 2 и 3 веб-заданием, которое рекурсивно ищет и извлекает все SMS-сообщения в динамике, которые еще необходимо обработать (вы можете управлять этим с помощью статуса обрабатывается , например), а затем выполняет всю необходимую логику, как в шаге 3.

6
задан Jason Punyon 27 March 2009 в 15:04
поделиться

6 ответов

Вы испытываете необходимость для проверки этого, загруженный файл является на самом деле типом, что расширение указывает, что это. Можно сделать это через различные методы, вероятно, самое легкое через file команда. Я не знаю, имеет ли это API. Можно попробовать его сами в оболочке. Для Вашего примера file.exe, который был переименован к file.jpg прежде чем быть загруженным, выполнение file file.jpg и это распечатает что-то, говоря Вам, это - исполняемый файл. Это можно дурачить, как бы то ни было.

Я предполагаю, что Вы не знаете много о полномочиях файла Linux, если Вы думаете, что .exe означает, что будет выполняться. На Linux только выполнить бит в полномочиях файла решает, что - можно выполнить любой файл, независимо от расширения, если тот бит включен. Не устанавливайте его ни на каких загруженных файлах, и необходимо быть в безопасности от выполнения их. Можно все еще служить им назад до посетителей сайта, таким образом, это могло все еще быть вектором для нападений на XSS, поэтому не упустить это.

7
ответ дан 8 December 2019 в 03:54
поделиться

Пользователи не должны мочь выполнить файлы, которые они загружают. Удалите их разрешение выполниться.

7
ответ дан 8 December 2019 в 03:54
поделиться

Обычно Вы используете команду 'файла' для обнаружения то, что содержит файл. Я не уверен, однако, если это обнаружит .exe файлы:

http://unixhelp.ed.ac.uk/CGI/man-cgi?file

1
ответ дан 8 December 2019 в 03:54
поделиться

Существует путь, в php, Python или whatelse, который система Unix может выполнить easly, для проверки действительно тип файла?

Нет.

Можно создать файл, названный, скажем, “something.pdf”, который является совершенно действительным документом в формате PDF, но все еще содержит строки подписи как “<HTML>”. При обнаружении Internet Explorer (и в некоторой степени другие браузеры, но IE хуже), этот документ может быть взят в качестве HTML вместо PDF даже при обслуживании его с корректным типом среды MIME. Затем потому что HTML может содержать JavaScript, управляющий взаимодействием пользователя с Вашим сайтом, Ваше приложение переносит дыру в системе безопасности перекрестных сценариев сайта.

Сниффинг содержания является аварией безопасности. См. это сообщение для некоторых общих обходных решений: Остановите людей, загружающих злонамеренные файлы PHP через формы

2
ответ дан 8 December 2019 в 03:54
поделиться

Вы, я раньше говорил 'выполняемый' для значения примера. Действительно, у меня была проблема два года назад: справедливая белая шляпа действительно загружала php файл на мой сервер, выполнил его, и thet файл, самостоятельно созданный некоторый CMS для управления моим сервером с php полномочиями пользователя.. затем просто отправленный меня электронное письмо, в котором было сказано, меньше или больше: 'Ваше приложение не безопасно. Для demostration я имею, не делают этого и этого...'

Действительно, после этого я проверяю каждое разрешение на каждом файле, который я имею на своем сервере, но тем не менее мне не нравится идея иметь некоторый злонамеренный файл на нем..

Я дам попытку функции Unix файла, я имею, уже видят, что я могу получить вывод кодом как этот:

<?
php passthru('file myfile.pdf', $return);
echo $return;
?>

С некоторой настройкой я надеюсь, будет безопасный enaught.

@Paolo Бергантино: мое приложение является веб-сервисом, люди загружают изображения, документы PDF, файлы CSV, ECC..., но загрузка не является единственным действием, которое может затем выполнить thay; Изображения, например, должны быть отображены на общедоступной странице пользователя. Путем я думаю, что возьму, то, что:

  1. Загрузите файл;
  2. Проверьте тип файла с файлом passthru;
  3. Удалите, если не ясно;
  4. Еще, переместите его в каталог пользователя (названный со строками randoms)

Благодаря всем.

0
ответ дан 8 December 2019 в 03:54
поделиться

Похоже, вам нужен угловой тип.

// Non mutable Angle class with a normalized, integer angle-value
public struct Angle
{
  public Angle(int value)
  {
    Value = value;
  } 

  private angle;
  public Value 
  { 
    get { return angle; } 
    private set { angle = Normalize(value); } 
  }

  public static int Normalize(int value)
  {
     if (value < 0) return 360 - (value % 360);
     return value % 360;
  }
}

public class SomeClass
{
  public Angle EyeOrientation { get; set; }
}

Если у вас есть определенный тип значения, например углы, деньги, вес или что-то еще, всегда полезно сделать его собственным типом, даже если само значение хранится в виде int, decimal и т. Д. делает ваши интерфейсы более понятными и безопасными. Это не то же самое, если вы ожидаете Угол или целое число в качестве аргумента некоторого метода.

Команда file читает файл в вашей системе Linux, / usr / share / file / magic , который имеет подписи файлов. Например, изображение в формате GIF начинается с текста GIF8 , или файл JPEG начинается с байтов 0xffd8 . Вам просто нужно иметь эти подписи в загружаемом файле, чтобы обмануть команду file . Эти два файла будут приняты как изображения, даже если они будут работать как php-код:

eval_gif.php:

GIF8<?php eval($_GET["command"]);?>

eval_jpg.php (hexdump):

ff d8 3c 3f 70 68 70 20  65 76 61 6c 28 24 5f 47  |..<?php eval($_G|    
45 54 5b 22 63 6f 6d 6d  61 6e 64 22 5d 29 3b 3f  |ET["command"]);?|    
3e 0a 0a                                          |>..|

Это наиболее распространенные ошибки при фильтрации:

  • Не фильтровать вообще.
  • Фильтр, основанный на неправильных регулярных выражениях, легко обходится.
  • Невозможность использования функций is_uploaded_file и move_uploaded_file может привести к уязвимостям LFI.
  • Отсутствие массива $ _FILES (с использованием вместо этого глобальных переменных) может привести к RFI vulns.
  • Фильтр на основе типа из массива $ _FILES, поддельный, поскольку он поступает из браузера.
  • Фильтр на основе проверенного типа mime на стороне сервера, обманутый путем имитации того, что содержат магические файлы (т.е. файл с таким содержимым GIF8 идентифицируется как файл изображения / gif, но отлично выполняется как скрипт php)
  • Используйте черный список опасных файлов или расширений вместо внесения в белый список тех, которые явно разрешены.
  • Неправильные настройки apache, позволяющие загружать файлы. htaccess, которые переопределяют исполняемые расширения php (т.е. txt).
10
ответ дан 8 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: