Codice PHP:
<?php
function Verify_User_Name($user_name)
{
if (strlen($user_name)<4 || strlen($user_name)>8) return false;
$good_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
for($x=0; $x<strlen($user_name); $x++){
$c_user_name = substr($user_name, $x, 1);
$pos_good_chars = strrpos($good_chars, $c_user_name);
if ($pos_good_chars === false) return false;
}
return true;
}
function Verify_Email_Address($email_address) {
$filter_email = "/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/";
if (preg_match($filter_email, $email_address)) return true;
else return false;
}
function passwdGen($length = 8)//Random password generator
{
$str = 'abcdefghijkmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0, $passwd = ''; $i < $length; $i++)
$passwd .= substr($str, mt_rand(0, strlen($str) - 1), 1);
return $passwd;
}
function getRemoteInfo () {
$proxy = "";
$ip = "";
$remote_info = array();
if (isSet($_SERVER)) {
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
$proxy = $_SERVER["REMOTE_ADDR"];
} elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
} else {
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$ip = getenv( 'HTTP_X_FORWARDED_FOR' );
$proxy = getenv( 'REMOTE_ADDR' );
} elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
$ip = getenv( 'HTTP_CLIENT_IP' );
} else {
$ip = getenv( 'REMOTE_ADDR' );
}
}
/*if (strstr($IP, ',')) {
$ips = explode(',', $IP);
$IP = $ips[0];
}*/
$remote_info[0]=$ip;
$remote_info[1]=get_ip_truncate($ip);
$remote_info[2]=@GetHostByAddr($ip);
$remote_info[3]=$proxy;
return $remote_info;
}
function get_ip_truncate($ip){
$pos1=strpos($ip, ".")+1;//restituisce la posizione del primo "." a partire da 0
$v1=substr($ip,0,$pos1);
$tronc=substr($ip,$pos1,strlen($ip));
$pos2=strpos($tronc, ".")+1;
$v2=substr($tronc,0,$pos2);
return $v1.$v2;
}
function write_utenti($user,$pw,$email,$ip)
{
$salt = "GT348DJ_-DD+34";//conf. a piacere
$pw = md5($pw.$salt);
$key = "GT348DJ_-DD+34";//conf. a piacere
$user = PMA_blowfish_encrypt($user, $key);
$email = PMA_blowfish_encrypt($email, $key);
$ip = PMA_blowfish_encrypt($ip, $key);
$file="utenti.php";
if (@file_exists($file)) {
$fp = @fopen($file, "a+");
@fwrite($fp,$user.",".$pw.",".$email.",".$ip."\n");
@fclose($fp);
return true;
}else return false;
}
function read_utenti($command,$user,$email,$ip)
{
$file="utenti.php";
if (@file_exists($file)) {
$lines = file($file);
unset($lines[0]); //escludo <?php header ...
sort($lines);
if (!empty($user) || !empty($email) || !empty($ip)) $key = "GT348DJ_-DD+34";
if ($command=="verify_user" && !empty($user) && !empty($email) && !empty($ip)){//verifica username/email/ip se già presente
$user = PMA_blowfish_encrypt($user, $key);
$email = PMA_blowfish_encrypt($email, $key);
$ip = PMA_blowfish_encrypt($ip, $key);
foreach($lines as $valore) {
list($user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));
if (trim($user_name) == $user) return false;
if (trim($email_address) == $email) return false;
if (trim($ip_address) == $ip) return false;
}
return true;
}else if ($command=="reset_password" && !empty($email)){//reset password casuale
$email = PMA_blowfish_encrypt($email, $key);
foreach($lines as $line_num => $valore) {
list($user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));
if (trim($email_address) == $email) {
$pw=passwdGen();
$email = PMA_blowfish_decrypt(trim($email_address), $key);
$user = PMA_blowfish_decrypt(trim($user_name), $key);
$ip = PMA_blowfish_decrypt(trim($ip_address), $key);
//invio email con la nuova password:
if (send_mail($_POST,"Reset Password !",$user,$pw,$email,$ip)) $send_mail=true;
else $send_mail=false;
$salt = "GT348DJ_-DD+34";//conf. a piacere
$pw = md5($pw.$salt);
$lines[$line_num]=trim($user_name).",".$pw.",".trim($email_address).",".trim($ip_address)."\n";
if (file_put_contents($file,'<?php header("HTTP/1.0 404 Not Found");die();?>'."\n".implode('', $lines)."") && $send_mail==true) return true;
else return false;
//break;
}else return false;//email non trovata
}//foreach
}else return $lines;
} else return "<p>Il File non è stato creato!";//false
}
function send_mail($post,$subject,$user,$pw,$email,$ip)
{
//CONTROLLO HACKERS
if(!is_secure($post)) {
$subject = "Hack Attempt via Contact Form!";
$body = " - Indirizzo IP: ".$ip."
- Agent: ".getenv("HTTP_USER_AGENT")."";
$emailto = "eurosalute@altervista.org";
$headers = "From: $emailto";
@mail($emailto, $subject, $body, $headers);
die("<br><br><font color=\"red\"><b>Possibile Attacco Hackers !</b></font><br><br>");
}
//end CONTROLLO HACKERS
$to = $email;
$from = "eurosalute@altervista.org";
$subject = "".$user." - ".$subject."";
$contenuto = "Username: ".$user."<br>Password: ".$pw."<br>Email: ".$to."<br>Computer IP: ".$ip."";
$body = nl2br("\nMessaggio:\n__________\n".stripslashes($contenuto)."\n\nFrom: ".stripslashes($from)."\n__________\nFine Messaggio.\n");
$headers = "MIME-Version: 1.0\r\n" ;
$headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "From: ".$from."\r\n";
if(@mail($to, $subject, $body, $headers)) return true;
else return false;
}
function is_secure($ar) {
$reg = "/(Content-Type|Bcc|MIME-Version|Content-Transfer-Encoding)/i";
//echo "<p>";print_r($ar);
if(!is_array($ar)) {return preg_match($reg,$ar);}
$incoming = array_values_recursive($ar);
//echo "<p>";print_r($incoming);
foreach($incoming as $k=>$v) if(preg_match($reg,$v)) return false;
return true;
}
function array_values_recursive($array) {
$arrayValues = array();
foreach ($array as $key=>$value) {
if (is_scalar($value) || is_resource($value)) {
$arrayValues[] = $value;
$arrayValues[] = $key;
}
elseif (is_array($value)) {
$arrayValues[] = $key;
$arrayValues = array_merge($arrayValues, array_values_recursive($value));
}
}
return $arrayValues;
}
?>