Как защитить ссылку/URL-адрес формы ESP-12E для управления светодиодом
Я использую ESP8266 ESP-12E NodeMCU для управления светодиодами и реле.
Когда ESP-12e включается, он подключается к моей домашней сети Wi-Fi и выдает IP-адрес, например 192.168.0.104, и благодаря этому я могу управлять своими устройствами через Localhost.
Я использую ссылку или URL-адрес для управления своим приложением, например
192.168.0.104/status1=1 (для запуска светодиода 1)
192.168.0.104/status1=0 (для выключения светодиода)
но моя точка зрения заключается в том, как защитить 192.168.0.104/status1=1 или 192.168.0.104/status1=0.
Потому что он открыт для всех, и, однако, если кто-то просто ради развлечения выключит мои реле и светодиоды, это будет очень рискованно для домашнего применения.
Вот мой код, этот код работает очень хорошо:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "Asif Wifi";
const char* password = "asif0172";
ESP8266WebServer server(80);
const int output1 = D1;
const int output2 = D2;
const int output3 = D3;
const int output4 = D4;
boolean device1 = false;
boolean device2 = false;
boolean device3 = false;
boolean device4 = false;
void handleRoot() {
//digitalWrite(светодиод, 1);
//server.send(200, "text/plain", "привет от esp8266!");
//digitalWrite(светодиод, 0);
String cmd;
cmd += "<!DOCTYPE HTML>\r\n";
cmd += "<html>\r\n";
//cmd += "<header><title>Веб-сервер ESP8266</title><h1>\"Управление веб-сервером ESP8266\"</h1></header>";
cmd += "<head>";
cmd += "<meta http-equiv='refresh' content='3'/>";
cmd += "</head>";
if(device1){
cmd +=("<br/>Device1 : ON");
}
else{
cmd +=("<br/>Device1 : OFF");
}
if(device2){
cmd +=("<br/>Device2 : ON");
}
else{
cmd +=("<br/>Device2 : OFF");
}
if(device3){
cmd +=("<br/>Device3 : ON");
}
else{
cmd +=("<br/>Device3 : OFF");
}
if(device4){
cmd +=("<br/>Device4 : ON");
}
else{
cmd +=("<br/>Device4 : OFF");
}
cmd += "<html>\r\n";
server.send(200, "text/html", cmd);
}
void handleNotFound(){
//digitalWrite(светодиод, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
//digitalWrite(светодиод, 0);
}
void setup(void){
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
pinMode(output3, OUTPUT);
pinMode(output4, OUTPUT);
digitalWrite(output1, LOW);
digitalWrite(output2, LOW);
digitalWrite(output3, LOW);
digitalWrite(output4, LOW);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Ожидаем соединения
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/status1=1", [](){
server.send(200, "text/plain", "device1 = ON");
digitalWrite(output1, HIGH);
device1 = true;
});
server.on("/status1=0", [](){
server.send(200, "text/plain", "device1 = OFF");
digitalWrite(output1, LOW);
device1 = false;
});
server.on("/status2=1", [](){
server.send(200, "text/plain", "device2 = ON");
digitalWrite(output2, HIGH);
device2 = true;
});
server.on("/status2=0", [](){
server.send(200, "text/plain", "device2 = OFF");
digitalWrite(output2, LOW);
device2 = false;
});
server.on("/status3=1", [](){
server.send(200, "text/plain", "device3 = ON");
digitalWrite(output3, HIGH);
device3 = true;
});
server.on("/status3=0", [](){
server.send(200, "text/plain", "device3 = OFF");
digitalWrite(output3, LOW);
device3 = false;
});
server.on("/status4=1", [](){
server.send(200, "text/plain", "device4 = ON");
digitalWrite(output4, HIGH);
device4 = true;
});
server.on("/status4=0", [](){
server.send(200, "text/plain", "device4 = OFF");
digitalWrite(output4, LOW);
device4 = false;
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
Нужно только знать, как защитить эту систему, вот и все.
Спасибо.
Дорогой Гарбен,
ну, я пытаюсь по-вашему, но не могу добавить переменную и не могу работать с оператором..... Вот мой код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "Asif Wifi";
const char* password = "asif0172";
const char* pwd = "dada123456";
ESP8266WebServer server(80);
const int output4 = D4;
boolean device4 = false;
void handleRoot() {
//digitalWrite(led, 1);
//server.send(200, "text/plain", "hello from esp8266!");
//digitalWrite(led, 0);
String cmd;
cmd += "<!DOCTYPE HTML>\r\n";
cmd += "<html>\r\n";
//cmd += "<header><title>ESP8266 Webserver</title><h1>\"ESP8266 Web Server Control\"</h1></header>";
cmd += "<head>";
cmd += "<meta http-equiv='refresh' content='3'/>";
cmd += "</head>";
if(device4){
cmd +=("<br/>Device4 : ON");
}
else{
cmd +=("<br/>Device4 : OFF");
}
cmd += "<html>\r\n";
server.send(200, "text/html", cmd);
}
void handleNotFound(){
//digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
//digitalWrite(led, 0);
}
void setup(void){
pinMode(output4, OUTPUT);
digitalWrite(output4, LOW);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/status4=1&password=" + pwd, [](){
server.send(200, "text/plain", "device4 = ON");
digitalWrite(output4, HIGH);
device4 = true;
});
server.on("/status4=0&password=" + pwd, [](){
server.send(200, "text/plain", "device4 = OFF");
digitalWrite(output4, LOW);
device4 = false;
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
@Asif Uz Zaman, 👍0
Обсуждение1 ответ
Вам необходимо взглянуть на HttpBasicAuth пример, который поставляется с библиотекой ESP8266WebServer для ESP8266, которую вы используете. Это достаточно просто.
Здесь это вставлено для справки:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
const char* ssid = "........";
const char* password = "........";
ESP8266WebServer server(80);
const char* www_username = "admin";
const char* www_password = "esp8266";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Connect Failed! Rebooting...");
delay(1000);
ESP.restart();
}
ArduinoOTA.begin();
server.on("/", [](){
if(!server.authenticate(www_username, www_password))
return server.requestAuthentication();
server.send(200, "text/plain", "Login OK");
});
server.begin();
Serial.print("Open http://");
Serial.print(WiFi.localIP());
Serial.println("/ in your browser to see it working");
}
void loop() {
ArduinoOTA.handle();
server.handleClient();
}
Ключевая часть — вот этот бит:
if(!server.authenticate(www_username, www_password))
return server.requestAuthentication();
Добавьте это в свой обработчик для вашего URL-адреса, и он запросит имя пользователя и пароль, которые вы указываете как www_username
и www_password
.
Если вы хотите углубиться, есть и более сложный пример.
Хорошо... сэр, спасибо. Сейчас попробую, но завтра скажу., @Asif Uz Zaman
- Как публиковать запросы HTTP POST на моем веб-сайте?
- HTTP GET запрос с использованием Arduino Uno и ESP8266
- Какие входные контакты я могу использовать на ESP8266 NodeMCU
- ESP8266 не может подключиться к брокеру MQTT
- Однонаправленная связь между NodeMCU и Arduino выплевывает мусор
- Wemos D1 не работает с MH-Z19B (датчик CO2)
- Как отправить HTTP-post данные в Node Express API с Arduino esp822 6?
- Запрос POST (HTTPClient) с ESP8266, не работающим на локальном хосте (код http = -1)
Используйте что-то вроде
192.168.0.104/status1=1&password=12345
для хотя бы некоторой базовой безопасности., @GerbenГербен: Хорошо, сэр, я собираюсь проверить это., @Asif Uz Zaman
Дорогой Гербен, пожалуйста, проверьте вопрос еще раз. Я просто обновляю следующую проблему., @Asif Uz Zaman