Configuré un servidor web en un microcontrolador ESP8266 dentro de mi red de área local. Las solicitudes HTTP GET enviadas a esta unidad pueden encender y apagar una toma de corriente, y estoy planeando implementar un par de ellas en la casa.
Esta LAN está conectada a Internet mediante una caja de Internet estándar (enrutador+módem). Quiero evitar que cualquier persona ajena a la LAN, incluido cualquier usuario de Internet, envíe algo al microcontrolador.
Supongamos que la gente no puede hackear mi Wifi protegido con WPA-PSK, ¿mi configuración es una violación de seguridad preocupante? ¿Qué tan difícil es para alguien piratear mis enchufes inteligentes de bricolaje?
Respuesta1
Si bien no debería ser posible que nadie externo acceda al servidor directamente (siempre que no reenvíe ningún puerto en el enrutador), será vulnerable a algo comoFalsificación de solicitudes entre sitios. Por ejemplo, si alguien le envió un mensaje de correo electrónico en formato HTML (o le pidió que cargara una página web, o...), con una imagen en línea cargada http://192.168.1.50/control?outlet=all&action=off
(o cualquiera que sea su dirección IP y sintaxis), su cliente de correo intente cargar una imagen desde esa URL y sus salidas se apagarán (o lo que sea).
Entonces, si tienes amigos lo suficientemente geek que conocen la configuración de tu red, espera que te hagan una broma. En realidad, también deberías esperar accesos XSRF aleatorios que intenten explotar otros dispositivos aleatorios que puedas tener o no; Si el servidor web del controlador se confunde con alguno de estos, pueden dañarlo accidentalmente.
[Actualización] Asegurar esto mejor dependerá en gran medida de las capacidades criptográficas que tenga el servidor web. No vi mucha información en una búsqueda rápida, por lo que no estoy seguro de qué puede hacer. Lo más sencillo es agregar una variable de contraseña a la solicitud. Esto no es particularmente seguro, ya que será visible en el cable, se almacenará en el historial del cliente y se registrará en el servidor, etc., pero es mejor que nada (y mejor que usar una sintaxis extraña, ya que es fácil de cambiar). . Hacernouse la misma contraseña que usa para cualquier otra cosa.
Cambiar de GET a POST también ayudaría un poco, especialmente porque el estándar HTTP dice que las solicitudes GET no deben cambiar el estado del servidor; es decir, se supone que es seguro para los clientes enviar/no enviar solicitudes GET. dependiendo, por ejemplo, del estado de sus cachés. Usar HTTPS ayudaría aún más (si el servidor lo admite). Usar la autenticación implícita WebDAV (en lugar de una cadena de contraseña) también sería bueno (nuevamente, si el servidor la admite), pero necesitaría agregar algún tipo de protección contra ataques de repetición para que sea realmente efectivo.
Respuesta2
Aunque todo es posible, si no tiene ningún puerto asignado mediante reenvío de puertos, a veces llamado servidor virtual, especialmente 80, 443 y 8080, o cualquier puerto que utilice su servidor web... Las posibilidades de que se produzca un ataque desde fuera de la LAN a través de su enrutador a ese dispositivo son casi cero.
Pero nuevamente, sin una revisión de seguridad más exhaustiva, no tome esto como la respuesta final. Si hay voluntad, hay un camino sin importar las precauciones que tomes.