Progettazione… Programmazione… Soluzione…
PHP & MySql
Java: HTTP POST con Socket
24 apr
Come potete vedere nei precedenti articoli riguardanti il Brute Force in Java e i vari metodi di attacco per le password, la sicurezza informatica è uno degli aspetti dell’informatica che preferisco, soprattutto per quanto riguarda la sicurezza in Internet. Vi sembrerà strano, ma non potete immaginare quanta gente dia per scontato il fattore sicurezza mentre naviga in rete, crea account e soprattutto quanto sceglie la password.
Proprio sulla scelta della password vorrei soffermarmi un attimo con una piccola considerazione, basata su dati statistici. Infatti, secondo alcuni studi, la password usata più spesso dagli utenti è la stringa “123456″. Questo dato mi è sembrato sconvolgente, ma posso assicurarvi che è molto realistico. Su questo argomento credo di fare a breve un articolo più approfondito, quindi per ora consideriamo semplicemente l’aspetto che riguarda Java, ed in particolare come fare una richiesta http usando il metodo POST, sfruttando i Socket.
I due argomenti sopra citati sono strettamente collegati, in quanto le applicazioni web sono costruite essenzialmente sfruttando il metodo GET per le varie richieste. Il metodo POST viene usato per elementari requisiti di sicurezza per la trasmissione di dati sensibili, quali appunto username e password al momento del login su un servizio web. Il metodo che vi mostro Continua >
Hacking: SQLInjection con SqlMap
30 mar
Molte volte ci addentriamo nel mondo del Web, nella creazione di un proprio spazio personale che piano piano si evolve, ma non sempre adottiamo le giuste precauzioni ed i giusti accorgimenti per quanto riguarda la sicurezza. In questi casi, ci viene in aiuto sqlmap, un ottimo tool per l’analisi delle vulnerabilità presenti in molte applicazioni web che fanno uso di database SQL.
Introduzione a SQLmapSQLmap è in grado di automatizzare il processo di analisi di vulnerabilità o exploit ai quali sono soggetti tantissimi server web. SQLmap è scritto in Python, il che lo rende indipendente dal sistema operativo utilizzato. Per funzionare, richiede solo in interprete Python in versione maggiore o uguale alla 2.5. Ho già introdotto in precedenti articoli (Hacking: SQL Injection, Difesa contro l’SQL Injection) il concetto di SQLInjection, tutti i pericoli che ne derivano e come difendersi progettando bene la propria applicazione web; ora vediamo come SQLmap riesce nell’analisi di SQLInjection in modo automatico e preciso. SQLmap implementa tre tecniche per l’analisi di vulnerabilità per l’SQL Injection:
- Inferential blind SQL injection, also known as boolean based blind SQL injection: sqlmap appends to the affected parameter in the HTTP request, a syntatically valid SQL statement string containing a SELECT sub-statement, or any other SQL Continua >
Difesa contro l’SQL Injection
22 mar
Nel precedente articolo vi ho descritto la tecnica dell’SQL Injection, la sua pericolosità e le sue potenzialità. Ora, vediamo come è possibile adottare opportuni accorgimenti per difenderci contro questo attacco.
La tecnica dell’SQL Injection nasce dal fatto che è possibile introdurre codice malevolo all’interno di normali campi di testo. Evitare ciò non è di solito possibile, però è sicuramente possibile (quasi doveroso) effettuare un controllo sui dati che l’utente immette in questi campi. Vediamo di seguito un paio di tecniche che è possibile adottare per rendere innocui anche i tentativi maliziosi.
Magic QuotesNelle impostazioni di PHP, ce n’è una adatta al caso nostro. Si tratta del flag magic_quotes_gpc presente nel file di configurazione php.ini. Abilitando questo flag, si è garantiti che tutti i dati ricevuto tramite GET, POST e COOKIE saranno automaticamente controllati, ed eventualmente convertiti, prima di essere usati nei vostri script PHP. Vedete quindi, che con un semplice passaggio, si è assolutamente protetti contro ogni tipo di attacco SQL Injection. Di seguito la porzione del file php.ini relativa a questa funzione.
12345678; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Continua >
Hacking: SQL Injection
21 mar
Tutti coloro che hanno lavorato almeno una volta con un database, soprattutto per quanto riguarda la gestione di utenti e relative password, sapranno che la tecnica più diffusa per appropriarsi di dati sensibili, è la tecnica chiamata Sql Injection.
La SQL injection è una tecnica dell’hacking mirata a colpire le applicazioni web che si appoggiano su un database di tipo SQL. Questo exploit sfrutta l’inefficienza dei controlli sui dati ricevuti in input ed inserisce codice maligno all’interno di una query SQL. Le conseguenze prodotte sono imprevedibili per il programmatore: l’Sql Injection permette al malintenzionato di autenticarsi con ampi privilegi in aree protette del sito (ovviamente, anche senza essere in possesso delle credenziali d’accesso) e di visualizzare e/o alterare dati sensibili.
Di seguito un esempio concreto per valutare le caratteristiche e la pericolosità di questa tecnica, con i seguenti componenti:
- db_name – Questo è il database al quale faremo riferimento;
- users – Questa è la tabella all’interno del DB che conterrà i dati degli utenti, in particolare username e password;
- login.php – Pagina php contenente un semplice script per verificare se l’username e password forniti sono corretti (quindi sono all’interno del DB);
- form.html – Pagina html che chiede i dati (username e password) tramite browser e richiama lo script php.
Vediamo dapprima il codice della pagina form.html che contiene Continua >
MySQL con Java grazie a JDBC
9 mar
Nei miei ultimi esperimenti con Java, mi è capitato di dover interagire con database MySQL. Per la parte che riguarda il database, ho sempre usato MAMP, un ottimo programma che gestisce in una semplice interfaccia grafica, Apache, MySQL e PHP.
Per far comunicare Java ed il database MySQL c’è bisogno di un driver, in particolare ho usato JDBC. Un esempio di utilizzo del driver è il seguente:
12345678910111213141516171819202122232425import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DataBaseTest { public static void testDB () throws Exception { // Carico il Driver Class.forName("com.mysql.jdbc.Driver"); // Connetto al Database (URL DB, USER, PWD) Connection db = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root"); // Creo uno Statement per l'invio della query Statement s = this.db.createStatement(); // Invio la query e catturo i risultati ResultSet rs = s.executeQuery("SELECT nome FROM tabella WHERE nick = 'nerthase'"); boolean o = rs.first(); // In caso non siano stati trovati risultati, inserisco l'entry nel database if (!o) s.executeUpdate("INSERT INTO tabella (nome, nick) VALUES ('mario', 'nerthase')"); s.close(); } }Questo codice, implica che sia stato creato un database chiamato test con una tabella chiamata tabella costituita da almeno due campi chiamati nome e nick. Il particolare questo Continua >
Regex Tester – RegexPal
28 gen
Spesso nei miei esperimenti, ho bisogno di ricorrere alle espressioni regolari per catturare una particolare sequenza di caratteri, da una stringa di dimensioni più elevate.
Per fare questo in Java ci sono le classi Pattern e Matcher, che richiedono come input la stringa originale, e l’espressione regolare. L’uso di queste classi è semplice ed immediato, ma non sempre è altrettanto semplice ed intuitivo, capire perché un’espressione regolare non svolge correttamente il suo lavoro. Ho quindi scoperto Regex Tester, un sito web che permette di testare in tempo reale gli effetti di un’espressione regolare. Abbiamo a disposizione una guida rapida all’uso ed alla scrittura di espressioni regolari, e possiamo anche personalizzare il comportamento di alcuni caratteri speciali dell’espressione regolare.
Fino a poco tempo fa non conoscevo nemmeno cosa fossero le espressioni regolari, ma vi assicuro che una volta che avete imparato ad utilizzarle, non ne potete fare più a meno.
Vediamo come Regex Tester può essere utilizzato per ovviare ad un problema molto comune, come può essere quello di estrarre da un testo, tutti gli indirizzi email che contiene. L’espressione regolare che uso in questo caso è:
[a-zA-Z0-9_\.]+@[a-zA-Z0-9-]+\.[a-zA-Z]{0,4}
Vediamo quindi Regex Tester come ci aiuta nel testare Continua >
Google Data API
27 gen
Google Data Protocol è un protocollo che deriva da REST ed il suo scopo è quello di interfacciare applicazioni di terze parti con gli applicativi Google.
Insieme ad alcuni amici dell’Università, stiamo sviluppando un progetto in cui è necessario interfacciarsi con YouTube. Le API di Google ci sono venute in soccorso per ogni problema o dubbio incontrato.
Le API di Google sono sviluppate per diversi linguaggi di programmazione (HTML, XML, Java, Php, .Net e Pynthon) e supportano tutti gli applicativi di Google; potete trovare un elenco completo nell’apposita API Directory di Google. Tutte le API sono ben fatte, funzionanti e soprattutto ben documentate. Per chi come me usa Eclipse, sviluppare un progetto usando le API di Google sarà ancora più facile. Ci sono infatti guide su come configurare un progetto di Eclipse, su come integrare le API ed esempi di codice già pronti.
Attualmente io sto usando solo le API di YouTube, e gli esempi di codice messi a disposizione mi sono stati più che sufficienti. Davvero un ottimo lavoro da parte di Google.
Redirect & SEO
20 gen
Rieccomi nuovamente alle prese con un articolo per voi… Questa volta parliamo di come i motori di ricerca gestiscono i reindirizzamenti delle pagine Web. In particolare vi parlo del redirect 301 che indica che una risorsa è stata spostata permanentemente. Il redirect 301 è usato nel caso in cui si voglia far puntare un vecchio indirizzo ad un nuovo indirizzo, senza invalidare i link che facevo riferimento al vecchio indirizzo. Nel caso del mio blog, ho usato il redirect 301 per far puntare l’indirizzo http://www.nerthase.com all’indirizzo http://www.nerthase.com/blog.
Veniamo al dunque, ed illustriamo i vari metodi per implementare un redirect 301:
Redirect PHPSe si vuole far redigere l’indirizzo www.miosito.it all’indirizzo www.mionuovosito.it basterà posizionare all’interno della directory principale del primo sito un file index.php con all’interno queste semplici righe di codice:
<?php Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: http://www.mionuovosito.it" ); ?>In questo modo tutti i link che prima erano diretti a www.miosito.it verranno rediretti verso www.mionuovosito.it.
Redirect ASPIl ragionamento è identico al caso precedente, ma si riferisce a pagine ASP:
<% Response.Status = "301 Moved Permanently" Response.AddHeader "Location", "http://www.mionuovosito.it" %> Redirect HTMLNel caso in cui si abbia a che fare con pagine HTML, o il server su cui ci si appoggia è talmente ridicolo che non Continua >