getIp();
session_start();
session_cache_limiter('private');
session_cache_expire(7); // 7 minuten chache zeit
// set time-out period (in seconds)
$inactiveTimeout = 430;
//var_dump( $this->checkAccess());
if (array_key_exists('p_clientip',$_SESSION) && array_key_exists('p_timestamp',$_SESSION) && array_key_exists('p_isfromfacebook',$_SESSION) && !empty($_SESSION["p_timestamp"]) && !empty($_SESSION["p_isfromfacebook"]) && !empty($_SESSION["p_clientip"]) && strcmp($_SESSION["p_clientip"], md5($ClientIP)) == 0){
//echo "array_key_exists";
$duration = time() - (int)$_SESSION['p_timestamp'];
if($duration > $inactiveTimeout) {
// Destroy the session and restart it.
session_destroy();
session_start();
$this->movePage(301,$config->redirectto_security());
//echo "construct-array_key_exists(): here rediect";
exit(0);
} else {
// here alles ok
//echo "alles ok: array_key_exists";
session_write_close();
return TRUE;
}
// never reached
session_write_close();
$this->movePage(301,$config->redirectto_security());
//echo "construct()-array_key_exists: here rediect";
exit(0);
} elseif (preg_match("/www\.facebook\.com\//",$_SERVER['HTTP_REFERER'])) {
/*
// if isset session p_isfromfacebook
////&& session p_timestamp is valid
////&& session p_timestamp is kleiner als 430
////&& and current IP == session[clientip]
// then do:
//session_write_close();
// DO NOT update SQL datebase
//// just return true
*/
session_regenerate_id();
$_SESSION["p_clientip"] = md5($ClientIP);
$_SESSION["p_timestamp"] = intval(time());
$_SESSION["p_isfromfacebook"] = intval(1);
// Fine: you are allowed
$table = $config->sql_tablename_security();
$pdo = $conn->prepareQuery();
$stmt = $pdo->prepare("INSERT INTO $table (p_clientip, p_isfromfacebook, p_timestamp) VALUES(:p_clientip, :p_isfromfacebook, :p_timestamp) ON DUPLICATE KEY UPDATE p_clientip=:p_clientip, p_isfromfacebook=:p_isfromfacebook, p_timestamp=:p_timestamp;");
$stmt->execute(array(':p_clientip'=>$ClientIP,':p_isfromfacebook'=>1,':p_timestamp'=>time()));
//var_dump( $this->checkAccess());
//$stmt->debugDumpParams();
//var_dump($stmt->errorInfo());
//var_dump($stmt->errorCode());
session_write_close();
$_SERVER['HTTP_REFERER'] = "";
unset($_SERVER['HTTP_REFERER']);
unset($_SERVER);
return TRUE;
} elseif ($this->checkAccess()){
// Fine: you are allowed
session_write_close();
return TRUE;
} else {
// Bam: Badass
session_write_close();
$this->movePage(301,$config->redirectto_security());
//echo "construct(): here rediect";
exit(0);
}
// Bam: Badass
session_write_close();
$this->movePage(301,$config->redirectto_security());
//echo "construct(): here rediect";
exit(0);
}
public function checkAccess(){
$config = new Config();
$conn = new Connection();
$ClientIP = $this->getIp();
$inactiveTimeout = 430;
$table = $config->sql_tablename_security();
$pdo = $conn->prepareQuery();
$stmt = $pdo->prepare("SELECT * FROM $table WHERE p_clientip=:p_clientip LIMIT 1");
$stmt->bindValue(':p_clientip', $ClientIP, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$curTime = intval(time());
$timestampFirst = intval($rows[0]["p_timestamp"]);
$isFromFacebook = $rows[0]["p_isfromfacebook"];
//echo $curTime ." - " .$timestampFirst .">=$inactiveTimeout:
";
//echo $curTime-$timestampFirst;
if (!empty($timestampFirst) && $isFromFacebook == 1 ){
if ($curTime-$timestampFirst>=$inactiveTimeout){//7 minuten gilt ein einmaliger referer
return FALSE; // zeitstempel über 7 minuten -> zugriff auf clone verbieten
} else {
return TRUE; // zeitstempel kleiner oder unter 7 minuten -> zugriff auf clone erlauben
}
}
return FALSE;
/*
var_dump($rows);
exit;
$stmt->debugDumpParams();
var_dump($stmt->errorInfo());
var_dump($stmt->errorCode());
*/
}
public function getIp(){
$proxy_headers = array(
'CLIENT_IP',
'FORWARDED',
'FORWARDED_FOR',
'FORWARDED_FOR_IP',
'HTTP_CLIENT_IP',
'HTTP_FORWARDED',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED_FOR_IP',
'HTTP_PC_REMOTE_ADDR',
'HTTP_PROXY_CONNECTION',
'HTTP_VIA',
'HTTP_X_FORWARDED',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED_FOR_IP',
'HTTP_X_IMFORWARDS',
'HTTP_XROXY_CONNECTION',
'VIA',
'X_FORWARDED',
'X_FORWARDED_FOR'
);
$regEx = "/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/";
foreach ($proxy_headers as $proxy_header) {
if (isset($_SERVER[$proxy_header])) {
/* HEADER ist gesetzt und dies ist eine gültige IP */
return $_SERVER[$proxy_header];
} else if (stristr(',', $_SERVER[$proxy_header]) !== false) {
// Behandle mehrere IPs in einer Anfrage
//(z.B.: X-Forwarded-For: client1, proxy1, proxy2)
$proxy_header_temp = trim(
array_shift(explode(',', $_SERVER[$proxy_header]))
); /* Teile in einzelne IPs, gib die letzte zurück und entferne Leerzeichen */
// if IPv4 address remove port if exists
if (preg_match($regEx, $proxy_header_temp)
&& ($pos_temp = stripos($proxy_header_temp, ':')) !== false
) {
$proxy_header_temp = substr($proxy_header_temp, 0, $pos_temp);
}
return $proxy_header_temp;
}
}
return $_SERVER['REMOTE_ADDR'];
}
public function movePage($num,$url){
static $http = array (
100 => "HTTP/1.1 100 Continue",
101 => "HTTP/1.1 101 Switching Protocols",
200 => "HTTP/1.1 200 OK",
201 => "HTTP/1.1 201 Created",
202 => "HTTP/1.1 202 Accepted",
203 => "HTTP/1.1 203 Non-Authoritative Information",
204 => "HTTP/1.1 204 No Content",
205 => "HTTP/1.1 205 Reset Content",
206 => "HTTP/1.1 206 Partial Content",
300 => "HTTP/1.1 300 Multiple Choices",
301 => "HTTP/1.1 301 Moved Permanently",
302 => "HTTP/1.1 302 Found",
303 => "HTTP/1.1 303 See Other",
304 => "HTTP/1.1 304 Not Modified",
305 => "HTTP/1.1 305 Use Proxy",
307 => "HTTP/1.1 307 Temporary Redirect",
400 => "HTTP/1.1 400 Bad Request",
401 => "HTTP/1.1 401 Unauthorized",
402 => "HTTP/1.1 402 Payment Required",
403 => "HTTP/1.1 403 Forbidden",
404 => "HTTP/1.1 404 Not Found",
405 => "HTTP/1.1 405 Method Not Allowed",
406 => "HTTP/1.1 406 Not Acceptable",
407 => "HTTP/1.1 407 Proxy Authentication Required",
408 => "HTTP/1.1 408 Request Time-out",
409 => "HTTP/1.1 409 Conflict",
410 => "HTTP/1.1 410 Gone",
411 => "HTTP/1.1 411 Length Required",
412 => "HTTP/1.1 412 Precondition Failed",
413 => "HTTP/1.1 413 Request Entity Too Large",
414 => "HTTP/1.1 414 Request-URI Too Large",
415 => "HTTP/1.1 415 Unsupported Media Type",
416 => "HTTP/1.1 416 Requested range not satisfiable",
417 => "HTTP/1.1 417 Expectation Failed",
500 => "HTTP/1.1 500 Internal Server Error",
501 => "HTTP/1.1 501 Not Implemented",
502 => "HTTP/1.1 502 Bad Gateway",
503 => "HTTP/1.1 503 Service Unavailable",
504 => "HTTP/1.1 504 Gateway Time-out"
);
header($http[$num]);
header ("Location: $url");
}
}
?>