Controlador de Temperatura [Arduino + Ethernet Shield + Relays + MySQL + PHP]

Buen trabajo, este me lo guardo en la carpeta de recortes.
Y buen apunte de JRodrigo.

JRodrigo:
Muy buen trabajo!

Me gustaría hacerte una recomendación en el código arduino_sensor.php, ya que es vulnerable a una inyección SQL y un graciosillo que encuentre la pagina puede fastidiarte la base de datos.

Simplemente es añadir mysql_real_escape_string() a las variables que van a interactuar con la base de datos para evitar una posible intrusión.

mysql_query("INSERT INTO sensor (date, type, value) values (NOW(),'mysql_real_escape_string($type**)','mysql_real_escape_string($value)**')");

Un saludo :wink:

JRodrigo:
Si quieres seguridad a tope usa md5 en el servidor arduino y en el script php. Es como funcionan las API simple y muy eficaz.

Por ejemplo en el servidor arduino que te genere el md5 de la string de temp seguido de tu key (tempKEY). Se lo envías al php como .php?temp=22&md5=(lo que genere arduino), entonces con la misma key que la de arduino y la temp que recibes en el php vuelves a generar el md5 y los comparas, que son iguales sigues adelante que no puede ser una intrusión.

Un saludo!

Creo que con el puro md5(tempKEY); es suficiente no?, digo a final de cuentas la idea es que no se sepan la tempkey... y el valor de la temperatura es irrelevante una vez que adivinen el (tempKEY)

He añadido el post en Arduino Playground - HomePage

Saludos y gracias,

Igor

eljamz:
Creo que con el puro md5(tempKEY); es suficiente no?, digo a final de cuentas la idea es que no se sepan la tempkey... y el valor de la temperatura es irrelevante una vez que adivinen el (tempKEY)

Lo del md5 era una idea por si te podía interesar, es también valida tu idea de utilizar un usuario con su contraseña, ya que pienso que nadie se va a dedicar a meterte datos falsos (alguien que se aburra mucho puede que si jajjaja), la única brecha de seguridad bastante grave era al introducir los datos en la DB pero lo arreglas con la función mysql_real_escape_string() y listo!

Gracias a ti! es un honor aparecer ahi!

JRodrigo:
Lo del md5 era una idea por si te podía interesar, es también valida tu idea de utilizar un usuario con su contraseña, ya que pienso que nadie se va a dedicar a meterte datos falsos (alguien que se aburra mucho puede que si jajjaja), la única brecha de seguridad bastante grave era al introducir los datos en la DB pero lo arreglas con la función mysql_real_escape_string() y listo!

De hecho tienes razon, pero lo del MD5 tempkey tambien es una "buena" practica, lo ideal seria utilizar una session, y esto es posible pero nos quitaria mucho espacio... lo que podemos hacer es:

Como ya sabemos la direccion IP del arduino, podemos desde PHP saber el IP del cliente, y entonces limitar a que solo el arduino tenga acceso...

Agregar esto en "arduino_sensor.php"

<?php
$arduino_ip = "192.168.1.1";
$client_ip = @$REMOTE_ADDR; 

if ($arduino_ip == $client_ip) {

EL CODIGO AQUI

} else {
echo "No estas autorizado para usar este sitio";
}
?>

creo que deberia de ser

$_SERVER["REMOTE_ADDR"]

al menos en mi servidor remoto.

Lo malo es que si se reinicia el router y cambia la ip, ya no funcionara.

Por supuesto me refiero si el servidor esta fuera de la red de casa.

Justo eso quise decir
Red Local:

$ip = $_SERVER["REMOTE_ADDR"];

Si estas dentro de la red el IP esta definido, y si estas trabajando sobre internet puedes utilizar un "No-IP.org" o "DynDNS" asi tu ip publica si cambia el PHP la resuelve en automatico...

$ip = gethostbyname("user.no-ip.org");

Saludos!

eljamz:
Justo eso quise decir
Red Local:

$ip = $_SERVER["REMOTE_ADDR"];

Si estas dentro de la red el IP esta definido, y si estas trabajando sobre internet puedes utilizar un "No-IP.org" o "DynDNS" asi tu ip publica si cambia el PHP la resuelve en automatico...

$ip = gethostbyname("user.no-ip.org");

Es mas, algunos routers tienen la opcion de añadirle la cuenta y que sea el propio router el que la actualice automaticamente.
Saludos!

Jossema106:
Es mas, algunos routers tienen la opcion de añadirle la cuenta y que sea el propio router el que la actualice automaticamente.
Saludos!

Si! creo que ya la mayoria lo tiene como "default" solo busquen DynDNS y ahi apareceran varios servicios y ya lo configuran, esto para poder actualizar el IP en automatico.

Up

Puestos a ser sobrados, ya de paso por que no hacerlo vía HTTPS XD

anakinsw:
Puestos a ser sobrados, ya de paso por que no hacerlo vía HTTPS XD

Sobrados ?

Para que quieres https???

Yo tampoco entendi lo de sobrados... y sobre HTTPS yo creo que es irrelevante si la seguridad la metes en PHP.

Lo que falta agregarle (trabajando en eso) es que funcione con DHCP para que podamos hacer el request a "mipagina.com", limpiar un poco el codigo y le queria agregar que sea datalogger en la SD...

Alguna idea o comentario sobre esto ultimo, por más que he luchado no puedo hacer funcionar ethernet y SD de manera correcta, ni si quiera tratando de prender ethernet, correrlo, apagar ethernet y encender SD... secuencias similares.

eljamz:
Yo tampoco entendi lo de sobrados... y sobre HTTPS yo creo que es irrelevante si la seguridad la metes en PHP.

Lo que falta agregarle (trabajando en eso) es que funcione con DHCP para que podamos hacer el request a "mipagina.com", limpiar un poco el codigo y le queria agregar que sea datalogger en la SD...

Alguna idea o comentario sobre esto ultimo, por más que he luchado no puedo hacer funcionar ethernet y SD de manera correcta, ni si quiera tratando de prender ethernet, correrlo, apagar ethernet y encender SD... secuencias similares.

Pon tu codigo.

Yo hice el código original, me refería a todos colaborar con esto y/o esperen este fin de semana para mi nuevo código...

Saludos!

Hola

Yo hice un Medidor temperatura, servidor WEB, reloj.
http://www.seta43.netau.net/artem.html
y

Reloj mediante interrupciones internas y registrador de temperaturas.

http://www.seta43.netau.net/arterec.html

Un saludo
SETA43
:slight_smile:

Hola, soy nuevo en el foro y estoy empezando con arduino.
he estado probando con el ejemplo pero no consigo que arduino inserte los valores en la bbdd.

Si paso la sentencia en el navegador xxxxx.com
Lo inserta correctamente en la bbdd.

El arduino en principio coneca bien a la web ya que por serial imprime connected.

He estado mirando y remirando el codigo pero no encuentro solucion.

Muchas gracias.

Hola, dehansin.
Creo que el problema puede ser que la configuración del servidor requiera algún header en tu comunicación http. Echa un vistazo por ejemplo a esta autorespuesta que se dio el forero romarpas, concretamente lo referente a los apartados 3, 4 y 5.

Gracias amigo, me sirvio bastante la parte de recepción de datos y la posterior interpretación de estos, por parte de arduino, no había forma en que me funcionara

una consulta, que modificación habría que hacerle, para que en ves de recibir un numero como respuesta desde MySQL, reciba una palabra, por ejemplo led1on, led1off ??