<?php if (!$_SERVER['REQUEST_METHOD'] === 'GET' || empty($_GET['hash'])) { usage_error(); } // NOTE: $hash not sanitized because of the checksum match test. $hash = $_GET['hash']; $string = str_replace('&hash=' . $hash, '', rawurldecode($_SERVER['QUERY_STRING'])); if ($hash != md5($string)) { usage_error(); } $dbhost = 'localhost'; $dbname = ''; $dbpasswd = ''; $dbuser = ''; $db = new mysqli($dbhost, $dbuser, $dbpasswd, $dbname); unset($dbhost, $dbuser, $dbpasswd, $dbname); if ($db->connect_error) { die(); } $sql = sprintf("SELECT id, last_date FROM usagetracker WHERE hash = '%s' LIMIT 1", $db->real_escape_string($hash) ); $res = $db->query($sql); if ($res->num_rows > 0) { // Shouldn't normally be here but happens if GCS settings are reset // or if the request come from another source than GCS. $hashUpdate = $res->fetch_assoc(); if ($hashUpdate['last_date'] < (time() - 3600)) { // Update timestamp and connection count. $sql = sprintf("UPDATE usagetracker SET last_date = %u, count = count + 1 WHERE id = %u LIMIT 1", time(), $hashUpdate['id'] ); $db->query($sql); } } else { // New hash $sql = sprintf("INSERT INTO usagetracker (first_date, last_date, ip, data, hash) VALUES (%u, %u, '%s', '%s', '%s')", time(), time(), encode_ip($_SERVER['REMOTE_ADDR']), $db->real_escape_string($string), $db->real_escape_string($_GET['hash']) ); $db->query($sql); } $db->close(); function usage_error() { //ob_start(); header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); header("Status: 404 Not Found"); // Matching server 404 output can be added. exit(); } function encode_ip($dotquad_ip) { $ip_sep = explode('.', $dotquad_ip); return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]); } ?>