Eu configurei um servidor web em um microcontrolador ESP8266 dentro da minha rede local. As solicitações HTTP GET enviadas para esta unidade podem ligar e desligar uma tomada elétrica, e estou planejando implantar algumas delas pela casa.
Esta LAN está conectada à internet usando uma caixa de internet padrão (roteador+modem). Quero evitar que qualquer pessoa de fora da LAN, inclusive da Internet, envie qualquer coisa para o microcontrolador.
Vamos supor que as pessoas não consigam hackear meu Wifi protegido por WPA-PSK. Minha configuração é uma violação de segurança preocupante? Quão difícil é para alguém invadir minhas lojas inteligentes DIY?
Responder1
Embora não deva ser possível para ninguém de fora acessar o servidor diretamente (desde que você não encaminhe nenhuma porta no roteador), você estará vulnerável a algo comoFalsificação de solicitação entre sites. Por exemplo, se alguém lhe enviou uma mensagem de e-mail em formato HTML (ou fez com que você carregasse uma página da web, ou...), com uma imagem embutida carregada http://192.168.1.50/control?outlet=all&action=off
(ou qualquer que seja seu endereço IP e sintaxe), seu cliente de e-mail irá tente carregar uma imagem desse URL e seus pontos de venda serão desligados (ou algo assim).
Então, se você tem amigos suficientemente geeks que conhecem a configuração da sua rede, espere receber uma pegadinha. Na verdade, você também deve esperar ocorrências aleatórias de XSRF tentando explorar outros dispositivos aleatórios que você pode ou não ter; se o servidor web do controlador ficar confuso com algum desses itens, ele poderá quebrá-lo acidentalmente.
[Atualização] Proteger isso melhor dependerá muito dos recursos de criptografia do servidor web - não vi muitas informações em uma pesquisa rápida, então não tenho certeza do que ele pode fazer. A coisa mais simples a fazer é adicionar uma variável de senha à solicitação. Isso não é particularmente seguro, pois será visível durante a transmissão, armazenado no histórico do cliente e conectado ao servidor, etc., mas é melhor que nada (e melhor do que usar uma sintaxe estranha, pois é fácil de alterar) . Fazernãouse a mesma senha que você usa para qualquer outra coisa.
Mudar de GET para POST também ajudaria um pouco, especialmente porque o padrão HTTP diz que as solicitações GET não devem alterar o estado do servidor - ou seja, é suposto ser seguro para os clientes enviarem/não enviarem solicitações GET dependendo, por exemplo, do estado de seus caches. Usar HTTPS ajudaria ainda mais (se o servidor suportar). Usar a autenticação WebDAV digest (em vez de uma string de senha) também seria bom (novamente, se o servidor suportar), mas você precisaria adicionar algum tipo de proteção contra ataques de repetição para que fosse realmente eficaz.
Responder2
Embora tudo seja possível, se você não tiver nenhuma porta mapeada via encaminhamento de porta, às vezes chamada de servidor virtual, especialmente 80, 443 e 8080, ou quaisquer portas que seu servidor web use... As chances de um ataque de fora da LAN ocorrer através do seu roteador para esse dispositivo são quase zero.
Mas, novamente, sem uma análise de segurança mais completa, não tome isso como a resposta final. Se houver vontade, há um caminho, não importa quais precauções você tome.