.: HosiriS :.

Informatica e non solo

Archive for the ‘PHP’ Category

MeteArduino

Posted by hosiris su dicembre 1, 2011

Analisi iniziale
Il modulo meteo che verrà progettato dovrà soddisfare alcune semplici specifiche:

  • misurarazione di temperatura, pressione e umidità
  • inseririmento automatico dei dati misurati in un database
  • presentazione dei dati in maniera semplice ed intuitiva

La piattaforma di prototipazione che verrà utilizzata sarà Arduino con l’aggiunta di un piccola breadboard per le prime connessioni. La comunicazione tra Arduino e PC avverrà tramite USB.
Sono specifiche di massima, non restrittive, ma scritte solo per dare una linea guida al progetto.

Scelta dei sensori
Per la scelta dei sensori mi sono concentrato maggiormente sul costo degli stessi, in quanto per un progetto casalingo non è richiesta né una grande precisione né molta accuratezza.
Leggi il seguito di questo post »

Annunci

Posted in Arduino, C/C++, IHSys, Javascript, PHP, Progetti Personali, Python, SQL | 1 Comment »

Gestiamo un sensore DHT22 con Arduino

Posted by hosiris su novembre 7, 2011

Tempo fa ho descritto una metodologia che ci permettesse di sfruttare un sensore di temperatura per ottenere delle statistiche sull’andamento di questo parametro.
Al fine di costruire una stazione meteo completa, ho modificato il progetto precedente utilizzando un sensore DHT22 che trova integrati sia un sensore di temperatura che un sensore di umidità.
Leggi il seguito di questo post »

Posted in Arduino, C/C++, Hardware, IHSys, PHP, Progetti Personali | 12 Comments »

Misuriamo la temperatura tramite Arduino

Posted by hosiris su ottobre 3, 2011

Dopo aver introdotto il mio progettino (IHSys) cominciamo con il progettare e realizzare il primo modulo: un misuratore di temperatura.
Leggi il seguito di questo post »

Posted in Arduino, C/C++, Hardware, IHSys, Javascript, PHP, Progetti Personali, Python, temparduino | 1 Comment »

Disegnamo dei grafici sui nostri siti

Posted by hosiris su settembre 22, 2011

Spesso mi si presenta il problema di avere una lista interminabile di dati e di doverli presentare in maniera compatta e leggibile, quale miglior modo si utilizzare dei grafici?
Bisogna capire che tecnologia utilizzare: PHP o Javascript?
Leggi il seguito di questo post »

Posted in PHP, Programmazione | 2 Comments »

Eseguire comandi tramite php agendo come utenti root

Posted by hosiris su settembre 5, 2011

Avevo scritto di come poter eseguire comandi sul proprio server utilizzando ssh e php! La soluzione poco elegante veniva aggravata anche dai tempi di attesa… per cui mi sono messo alla ricerca di soluzioni più performanti ed ho trovato suPHP.
suPHP altro non è che un modulo per Apache che ci dà la possibilità di presentarci al sistema come un utente differente dal default (www-data).
Leggi il seguito di questo post »

Posted in PHP, Programmazione | 1 Comment »

Usare SSH tramite script PHP

Posted by hosiris su agosto 22, 2011

La mia necessità è quella di creare una dashboard tramite cui posso monitorare le principali funzionalità del server.
Leggi il seguito di questo post »

Posted in PHP, Programmazione | 7 Comments »

Vediamo una lista di file in una directory

Posted by hosiris su agosto 15, 2011

Come progetto personale mi è servito di creare una piccola interfaccia che mi mostrasse il contenuto di una directory X non prestabilita. Giocando un po’ con PHP ho raggiunto lo scopo preposto:
Leggi il seguito di questo post »

Posted in PHP, Programmazione | Leave a Comment »

Convertire file excel in SQL

Posted by hosiris su maggio 25, 2011

Spesso capita che i fogli di calcolo vengano usati per memorizzare dati… Non è il suo compito, ma vista la forma tabellare viene naturale utilizzarli con questo scopo! Il problema si presenta quanto i dati crescono al punto da rendere inefficiente l’utilizzo di quelle tabelle e spesso si cerca il modo di trasportare i dati su una struttura dati reale.
Analizziamo quali possibili tecniche possono essere sfruttate per eseguire questa attività!
Leggi il seguito di questo post »

Posted in PHP, Programmazione | 2 Comments »

Consigli per creare applicazioni sicure in PHP

Posted by hosiris su marzo 24, 2011

Trattamento degli errori
Nel processo di sviluppo la visualizzazione degli errori ci fornisce un aiuto non indifferente. Ma dopo che il sito è completo, continuare ad utilizzare la visualizzazione degli errori può dare informazioni sul sistema ad un eventuale malintenzionato: software utilizzato, struttura directory, tipologia del server, …
Sarebbe buona norma disattivare tutti gli errori tramite il seguente comando:


error_reporting(0);

In questo modo per trattare gli errori si dovrà far uso della funzione set_error_handler.

Disabilitare le funzionalità inutili di PHP
Register Globals (register_globals)
Questa variabile è stata creata pensando ad una programmazione rapida, ma introduce problemi di sicurezza. Osserviamo il seguente link


http://yoursite.tld/index.php?var=1

register_globals ci permette di accedere alla variabile usando sia la notazione $_GET[‘var’] che $var. Sicuramente è molto comodo, ma vediamo il seguente esempio per capire cosa potrebbe succedere:


if( !empty( $_POST['username'] ) && $_POST['username'] == 'test' && !empty( $_POST['password'] ) && $_POST['password'] == "test123" )
{
    $access = true;
}

Se la variabile è attiva, è sufficiente inserire access=1 in una stringa di request riuscendo ad avere accesso.
Per poter disabilitare questa funzionalità è necessario utilizzare un .htaccess file (o modificando il php.ini):


//Disabling with .htaccess
php_flag register_globals 0


//Disabling with php.ini
register_globals = Off

Magic Quotes (magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase)
E’ una caratteristica che evita ai programmatori l’utilizzo di funzioni quali addslashes().
Purtroppo possiamo contare almeno tre problematiche associate a questa caratteristica: in prima analisi il problema è causato dall’utilizzo concomitante di Magic Quotes e addslashes() che porterebbe ad avere degli slash multipli causando degli errori; il secondo problema si verifica se il programmatore assume che Magic Quotes è attivo ed invece non lo è, causando errori nella verifica degli input; infine, bisogna notare che Magic Quotes intercetta solo apici singoli e doppi, ma se stiamo utilizzando dei database risulta necessario trattare ulteriori caratteri.


//Disabling with .htaccess
php_flag magic_quotes_gpc 0 php_flag magic_quotes_runtime 0


//Disabling with php.ini
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

Validazione dell’input
Oltre l’escape dei caratteri è molto utile validare l’input.
Ad esempio se volessimo validare l’input di una data, potremmo usare il seguente codice:


if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['month'] ) )
{
    // handle error
}
if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['day'] ) )
{
    // handle error
}
if ( ! preg_match( "/^[0-9]{4}$/", $_GET['year'] ) )
{
    // handle error
}

Controllare l'inserimento di codice XSS
Nella maggior parte dei casi nell'inserimento di un input è possibile passare del codice HTML, ma questo può causare problemi, specie se i dati vengono memorizzati in un database, perchè esiste la possibilità di far eseguire del codice javascript.
Per poter evitare questo inconveniente la soluzione migliore sarebbe disabilitare del tutto i tag HTML, oppure si può far uso dei BBCode in modo da permettere la formattazione del testo.

Proteggersi dell'SQL Injection
Prima di eseguire le query sarebbe buona norma controllare la stringa per verificare la presenza di caratteri non permessi.
Abbiamo due possibilità per effettuare questo controllo:


$username = mysql_real_escape_string( $GET['username'] );
mysql_query( "SELECT * FROM tbl_members WHERE username = '".$username."'");


$id = $_GET['id'];
$statement = $connection->prepare( "SELECT * FROM tbl_members WHERE id = ?" );
$statement->bind_param( "i", $id );
$statement->execute();

Posted in PHP, Programmazione | 1 Comment »

ToDoList con PHP e SQLite

Posted by hosiris su marzo 2, 2011

Quando ci si impegna nello sviluppo di una applicazione bisogna, come prima cosa, decidere gli strumenti da usare… reputo inutile sparare ad una mosca con un cannone, come è rischioso pescare squali con una canna da 2 metri. Bisogna, quindi, perdere del tempo per effettuare le giuste scelte.
Per questo motivo, nella realizzazione di una semplice todolist, ho deciso di usare PHP unito a SQLite: la mole di dati sarà molto bassa e l’applicazione server mi permette di accedere alla lista da qualsiasi posto io mi trovi.
Ma cominciamo con calma, vediamo alcuni concetti base per iniziare ad utilizzare un database di tipo SQLite.

SQLite è una applicazione cross platform scritta in C che fornisce la possibilità di organizzare i dati senza l’utilizzo di applicazioni server (come MySQL o Oracle). Concettualmente lavorare con un database di questo tipo, equivale ad aprire un file e scrivere i dati all’interno.
La sintassi è molto simile al linguaggio SQL, quindi non ci saranno novità in questo senso.

La prima cosa da fare è quella di abilitare i moduli php per utilizzare questa tecnologia, su ubuntu è estremamanete semplice perchè installando le librerie verrà automaticamente modificato il php.ini:

$ sudo apt-get install php5-sqlite

Adesso possiamo iniziare a programmare la nostra applicazione. Svilupperemo i componenti principali di un sistema CRUD (al momento ho sviluppato in maniera procedurale, ma sto già lavorando ad un classe specifica):

  • createdb.php: codice per la creazione del db e delle tabelle;
  • insertdata.php: codice per l’inserimento dei dati;
  • selectdata.php: codice per la selezione dei dati dal db;
  • editdata.php: modifica dei dati;
  • deletedata.php: per rimovere dati dal db

Inizializzare un db SQLite vuol dire accedere ad una risorsa, non ad un servizio, nel seguente modo:

$dbLink = sqlite_open("todolistdb.sqlite");
if(!is_resource($dbLink)){
    die ("ERRORE NELLA CREAZIONE DEL DATABASE");
}

Una volta che è stato aperto, possiamo eseguire la query per la creazione del DB:

    $query = "    CREATE TABLE items(
                    id_item INTEGER PRIMARY KEY,
                    item VARCHAR(50),
                    description TEXT,
                    ins_date DATE
                );";
    if(!@sqlite_query($dbLink, $query)){
        die("ERRORE NELLA CREAZIONE DELLA TABELLA") ;
    }

Credo sia inutile scrivere ogni query… il concetto di come funziona il tutto dovrebbe essere chiaro.
Il risultato sarà una cosa del genere:

Allego anche il codice php che comprende tutte le funzioni descritte prima.

DOWNLOAD TODOLIST

Posted in PHP, Progetti Personali, Programmazione, SQLite, ToDoList | Leave a Comment »