Sei in
Home > Microsoft & altri mondi > Web utility e development > Securizzazione di campi/form in PHP

Securizzazione di campi/form in PHP

php security

Nello sviluppo di siti web molti developer non prendono in considerazione la sicurezza del sito stesso: negligenza, mancanza di tempo (non scusabile :P), poco interesse o dimenticanza. Fatto sta che in tutti i casi queste mancanze possono essere veramente gravi e possono essere potenzialmente dannose. Perchè?

Semplice esempio: un form serve a registrare dei dati di un utente all’interno di un database. Ora ponendo che possono essere fatte securizzazioni sia “a monte” che “a valle” immaginate un campo “nome” (per esempio) che può accettare qualunque input. Ne esce che qualunque cosa venga scritta all’ interno del form questa vada a finire scritta nel database. Tralasciando quindi il rischio “banale” di trovarsi un “SuK*t3mel0 H4Rd, M3Rd$ccci|*” nei record del database, possiamo incappare in qualcosa di molto più pericoloso come:

  • Spoofed Form Submission
  • Spoofed HTTP request
  • SQL Injection
  • XSS
  • Cross-Site request Forgeries

Ecco di seguito qualche metodo per securizzare i vostri form tramite l’ uso di PHP e MySQL.

Token Matching:

Il primo metodo, che è il più semplice, ma già questo vi risparmierà molte seccature. Viene creata una chiave che resta in sessione, successivamente PHP ad ogni richiesta verificherà che i token combacino, in alternativa la connessione verrà troncata.

session_start();

function generateFormToken($form) {

// generate a token from an unique value
$token = md5(uniqid(microtime(), true));

// Write the generated token to the session variable to check it against the hidden field when the form is sent
$_SESSION[$form.'_token'] = $token;

return $token;

}

Ora inseriamo quindi un campo hidden con il token

input type="hidden" name="token" value="<?php echo $newToken;"

Creiamo quindi la funzione di controllo

function verifyFormToken($form) {

// check if a session is started and a token is transmitted, if not return an error
if(!isset($_SESSION[$form.'_token'])) {
return false;
}

// check if the form is sent with token in it
if(!isset($_POST['token'])) {
return false;
}

// compare the tokens against each other if they are still the same
if ($_SESSION[$form.'_token'] !== $_POST['token']) {
return false;
}

return true;
}

 Procediamo con il controllo dei token

if (verifyFormToken('form1')) {

// ... more security testing
// if pass, send email

} else {

echo "Hack-Attempt detected. Got ya!.";
writeLog('Formtoken');

}

Validazione URL:

// Lets check the URL whether it's a real URL or not. if not, stop the script
if(!filter_var($_POST['URL-main'],FILTER_VALIDATE_URL)) {
writeLog('URL Validation');
die('Please insert a valid URL');
}

Pulizia dell’ input:

Questo è molto utile per pulire l’ input di un utente che contiene per esempio caratteri speciali come @#!\ ecc Per farlo ci sono varie funzioni di PHP

$message .= "Name: " . strip_tags($_POST['req-name']) . "\n";

$message .= "NEW Content: " . htmlentities($_POST['newText']) . "\n";

Hack logging:

function writeLog($where) {

$ip = $_SERVER["REMOTE_ADDR"]; // Get the IP from superglobal
$host = gethostbyaddr($ip); // Try to locate the host of the attack
$date = date("d M Y");

// create a logging message with php heredoc syntax
$logging = <<<LOG
\n
<< Start of Message >>
There was a hacking attempt on your form. \n
Date of Attack: {$date}
IP-Adress: {$ip} \n
Host of Attacker: {$host}
Point of Attack: {$where}
<< End of Message >>
LOG;

// open log file
if($handle = fopen('hacklog.log', 'a')) {

fputs($handle, $logging); // write the Data to file
fclose($handle); // close the file

} else { // if first method is not working, for example because of wrong file permissions, email the data

$to = 'ADMIN@gmail.com';
$subject = 'HACK ATTEMPT';
$header = 'From: ADMIN@gmail.com';
if (mail($to, $subject, $logging, $header)) {
echo "Sent notice to admin.";
}

}
}

Sono tutti di facile applicazione. Ovviamente il codice va letto e applicato in base alle vostre esigenze, ma già con questi piccoli accorgimenti dovreste avere un codice più sicuro.

Securizzazione di campi/form in PHP, 5.0 out of 5 based on 3 ratings
Top