Насколько безопасно использование сценариев оболочки или bash для добавления на сайт динамических функций, таких как обработка данных POST?
У меня есть простой домашний веб-сервер, настроенный на Apache, но я бы не стал устанавливать и использовать PHP. Я искал сценарии для работы с основными динамическими частями моего сайта. Однако я слышал, что для этих целей может быть неэффективно / небезопасно использовать сценарии bash/shell в каталоге cgi-bin.
С какими рисками безопасности я столкнусь при использовании сценариев bash для обработки данных POST из поля ввода? С какими еще атаками я могу столкнуться, если я решу использовать сценарии оболочки для своего сайта? Как я могу смягчить эти риски?
Есть ли лучший способ безопасно и эффективно построить динамический сайт? Не следует ли мне использовать каталог cgi-bin, и если нет, каковы преимущества / риски альтернатив?
2 ответа
На самом деле, проект Openwrt ( https://openwrt.org/) использует в своей "белой" ветке (я не знаю, так ли это в новых ветках) Bash для обслуживания динамического контента (панель веб-администрирования). Пожалуйста, помните, что это встроенное ПО для встроенной системы (маршрутизаторы Linksys), поэтому обычно нет ресурсов (памяти) для установки чего-либо более сложного (PHP).
Также такие панели администрирования (или, по крайней мере, должны быть) доступны только из внутренней сети, поэтому приложение не доступно для публичного (ненадежного) ввода.
В других случаях (особенно в среде ПК) действительно сложно оправдать использование Bash для обслуживания динамического веб-контента.
Для серьезного ответа, использование сценариев оболочки для анализа даже самых простых веб-запросов, по меньшей мере, не рекомендуется. Сценарий оболочки имеет тенденцию смешивать выполняемый код и вводить слишком много разных способов. Производительность для любого нетривиального объема трафика может стать проблемой, так как большие скрипты обычно порождают много подоболочек и программ.
Кроме того, нет серьезных веб-библиотек Bash, о которых можно было бы говорить.
Я рекомендую использовать Perl или PHP для этой цели.