sobota 16. června 2012

Jak bezpečně zapisovat do MySQL ze vzdáleného počítače

Na serveru běží MySQL, nechtěl jsem k ní nechat přístup z Internetu, proto jsem celý problém vyřešil pomocí předání parametrů v URL dotazu. Něco podobného je možné realizovat wgetem nebo pomocí programu curl.

<?php
$server_name = 'localhost'; // jmeno databazoveho serveru
$db_user = ''; // uzivatel
$db_pass = ''; // heslo
$db_name = 'Teploty'; // jmeno databaze

session_start();
//$_SESSION["hash"] = "17f5596768b6b33ea69dfc822d3a8bace7fe6ae5";
session_register("hash");
if ($_REQUEST['hash']==$_SESSION["hash"])
    {
    $hash = sha1(rand());
    $_SESSION["hash"]=$hash;
    echo $hash;
    mysql_connect($server_name, $db_user, $db_pass) or die('Nepodařilo se připojit k MySQL databázi'); // pripojeni k databazi
    mysql_select_db($db_name) or die('Nepodařila se otevří databáze.'); // vyber databaze

    $dotaz="INSERT INTO `Teploty`.`Teploty` (`ID`, `Datum`, `Teplota doma`, `Teplota venku`,
    `Teplota kotel`) VALUES (NULL, NOW(), '".mysql_real_escape_string($_REQUEST['doma'])."', '".mysql_real_escape_string($_REQUEST['venku'])."',
    '".mysql_real_escape_string($_REQUEST['kotel'])."');";
    $radku = mysql_num_rows($vysledek);
    }
?>

Při každém spojení je vygenerován autorizační kód pro další relaci, použitím session je pro každého uživatele generován jiný přístupový kód. Pro synchronizaci stačí odkomentovat řádek kde se do $_SESSION["hash"] přiřazuje počáteční hodnota, po úspěšném připojení všech klientů je nutné tento řádek opět zakomentovat.

Další poznatky: adresu do wgetu či curl je nutné zadávat v uvozovkách, jinak dojde k oříznutí ostatních parametrů kromě prvního.

curl "http://xxx.cz/teplota.php?doma=23.5&venku=10.81&kotel=65.58&hash=ahoj"
Při spojení s curl se session chová poněkud divně.

Žádné komentáře:

Okomentovat