Я настроил веб-сервер на микроконтроллере ESP8266 в своей локальной сети. HTTP-запросы GET, отправленные на это устройство, могут включать и выключать сетевую розетку, и я планирую развернуть несколько таких по всему дому.
Эта локальная сеть подключена к интернету с помощью стандартного интернет-бокса (маршрутизатор+модем). Я хочу запретить кому-либо извне локальной сети, включая кого-либо из интернета, отправлять что-либо на микроконтроллер.
Предположим, что никто не может взломать мой защищенный WPA-PSK Wifi, является ли моя настройка тревожным нарушением безопасности? Насколько сложно для кого-либо взломать мои DIY-умные розетки?
решение1
Хотя никто извне не сможет получить прямой доступ к серверу (если только вы не перенаправите какие-либо порты на маршрутизаторе), вы будете уязвимы к чему-то вродеПодделка межсайтовых запросов. Например, если кто-то отправил вам сообщение электронной почты в формате HTML (или заставил вас загрузить веб-страницу или...) со встроенным изображением, загруженным с http://192.168.1.50/control?outlet=all&action=off
(или с любого другого IP-адреса и синтаксиса), ваш почтовый клиент попытается загрузить изображение с этого URL, и ваши розетки отключатся (или что-то в этом роде).
Итак, если у вас есть достаточно задроты-друзья, которые знают настройки вашей сети, ожидайте розыгрышей. На самом деле, вы также должны ожидать случайных XSRF-ударов, пытающихся эксплуатировать случайные другие устройства, которые у вас могут быть или не быть; если веб-сервер контроллера запутается в чем-то из этого, они могут случайно его сломать.
[Обновление] Улучшение защиты во многом будет зависеть от криптографических возможностей веб-сервера — я не нашел много информации при быстром поиске, поэтому не уверен, что он может сделать. Самое простое, что можно сделать, — добавить переменную пароля в запрос. Это не особенно безопасно, так как она будет видна в сети, сохранена в истории на клиенте и зарегистрирована на сервере и т. д., но это лучше, чем ничего (и лучше, чем использовать странный синтаксис, так как его легко изменить). Делатьнетиспользуйте тот же пароль, который вы используете для всего остального.
Переключение с GET на POST также немного помогло бы, особенно с учетом того, что стандарт HTTP гласит, что запросы GET не должны изменять состояние сервера, то есть, клиентам должно быть безопасно отправлять/не отправлять запросы GET в зависимости, например, от состояния их кэшей. Использование HTTPS помогло бы еще больше (если сервер его поддерживает). Использование дайджест-аутентификации WebDAV (вместо строки пароля) также было бы неплохо (опять же, если сервер его поддерживает), но вам нужно будет добавить какую-то защиту от атак повторного воспроизведения, чтобы это было действительно эффективно.
решение2
Хотя все возможно, если у вас нет портов, сопоставленных с помощью переадресации портов, иногда называемой виртуальным сервером, особенно 80, 443 и 8080 или любых других портов, которые использует ваш веб-сервер... Вероятность того, что атака извне локальной сети пройдет через ваш маршрутизатор на это устройство, близка к нулю.
Но опять же, без более тщательного обзора безопасности, не воспринимайте это как окончательный ответ. Если есть желание, найдется и способ, какие бы меры предосторожности вы ни принимали.