Рассмотрим очень простой сокет python, который открывает порт в Интернет на главном компьютере и прослушивает входящие сообщения, которые отображаются в терминале.
Сохранение порта, открытого таким образом, считается довольно уязвимым, правильным? Какие функции безопасности следует реализовать? Должны ли дезинфицироваться входящие данные? Какой лучший способ сделать это?
Благодарю.
Почему это будет уязвимым? Ваша программа принимает соединения от произвольных людей (возможно, во всем Интернете) и позволяет отображать на вашем компьютере произвольные байты. Здесь есть только один вектор атаки: ваш терминал сам. Если у вашего терминала есть ошибка, которая (например) выполняет байты вместо их печати, тогда система может быть скомпрометирована из-за этой установки.
Однако это маловероятно - на самом деле один общий метод проверки того, что программы не полностью нарушены, - это передать им произвольные данные и посмотреть, как они/как они взрываются. Это называется fuzz-тестированием, и если бы в вашем терминале была такая ошибка, когда она была проверена fuzz, тест fuzz вызывал бы действительно интересные взрывы, а не просто терминальный мусор.
Просто потому, что что-то доступно для Интернета на порту, это не значит, что существует уязвимость. Вам нужен фактический эксплуататорский недостаток, и в этом случае, вероятно, не один. (Хотя никто и не знает.)
exec()
отправляет код по сети , у вас все будет хорошо.
Что вы пытаетесь обеспечить? Использование Python для прослушивания в сокете не будет напрямую выставлять вас на вуль, если у интерпретатора Python не будет неизвестно.
Обработка входящих сообщений - это другое дело.
Если вы пишете на терминал, означает ли это, что входящие данные должны быть в определенном формате? Как вы анализируете входящие данные? Что произойдет, если кто-то кошки /dev/random в вашем порту и оставит соединение открытым для приятного, долгого времени?
Означает ли порядок или содержание сообщений?
И так далее. Специфика сценария не так много, поэтому рекомендации будут одинаково расплывчатыми. Для начала взгляните на принципы безопасного кодирования OWASP для общих понятий (они применимы, даже если вы не имеете дело с HTTP или HTML).