У меня вызывает подозрение механизм установки Bioconductor. Похоже, он просто выполняет (через source()
) R-скрипт с URL-адреса HTTP. Разве это не небезопасный подход, уязвимый для атаки «человек посередине»? Я думаю, что они должны использовать HTTPS. Если нет, может ли кто-нибудь объяснить, почему текущий подход приемлем?
Небезопасно ли выполнять код через URL-адрес HTTP?
Ответы (2)
Да вы правы.
Загрузка исполняемого кода через открытое текстовое соединение уязвима для MITM.
Если не загружено через HTTPS, где SSL/TLS может использоваться для шифрования и аутентификации соединения, или если код не был подписан и проверено на клиенте, злоумышленник MITM может изменить входной поток и вызвать выполнение произвольного кода в вашей системе.
Разрешение выполнения кода через HTTP-запрос GET
, по сути, означает, что вы позволяете приложению напрямую обрабатывать пользовательский ввод, что напрямую влияет на поведение приложения. Хотя это часто то, что хотел бы разработчик (скажем, запросить конкретную информацию из базы данных), это может быть использовано способами, как вы уже упоминали (например, MITM). Часто (однако я никоим образом не имею в виду Bioconductor) плохая идея, поскольку она открывает систему для возможных XSS/(B)SQLi-атак среди прочих.
Однако URL — http://bioconductor.org/biocLite.R — это просто файл, размещенный на Веб-сервер и, судя по всему, source()
используется для его прямой загрузки. Похоже, что в этом примере нет никакого пользовательского ввода, поэтому нет, я бы не стал отмечать его как небезопасный; однако ваша аналогия действительно верна.
Примечание. Это просто относится к запросам GET — например: http://example.com/artists/artist.php?id=1
. Такая небезопасность может быть использована во многих HTTP-запросах, таких как атаки на заголовок узла, однако общая концепция остается той же. Пользовательский ввод не должен никогда напрямую обрабатываться приложением каким-либо образом.
source()
не просто загружает файл, но и выполняет его содержимое. Это та часть, которая беспокоит меня.
- person Will Townes; 26.05.2015
source()
, поскольку в самой функции могут быть ограничения безопасности, которые мы могли пропустить. Конечно, я буквально ничего не знаю о том, как работает R
.
- person Juxhin; 26.05.2015