/** * Track the referer to a specific Entry ID * * @access public * @param int Entry ID * @return null */ function serendipity_track_referrer($entry = 0) { global $serendipity; // Tracking disabled. if ($serendipity['trackReferrer'] === false) { return; } if (isset($_SERVER['HTTP_REFERER'])) { if (stristr($_SERVER['HTTP_REFERER'], $serendipity['baseURL']) !== false) { return; } if (!isset($serendipity['_blockReferer']) || !is_array($serendipity['_blockReferer'])) { // Only generate an array once per call $serendipity['_blockReferer'] = array(); $serendipity['_blockReferer'] = @explode(';', $serendipity['blockReferer']); } $url_parts = parse_url($_SERVER['HTTP_REFERER']); $host_parts = explode('.', $url_parts['host']); if (!$url_parts['host'] || strstr($url_parts['host'], $_SERVER['SERVER_NAME'])) { return; } foreach ($serendipity['_blockReferer'] as $idx => $hostname) { if (@strstr($url_parts['host'], $hostname)) { return; } } if (rand(0, 100) < 1) { serendipity_track_referrer_gc(); } $ts = serendipity_db_get_interval('ts'); $interval = serendipity_db_get_interval('interval', 900); $suppressq = "SELECT count(1)\n FROM {$serendipity['dbPrefix']}suppress\n WHERE ip = '" . serendipity_db_escape_string($_SERVER['REMOTE_ADDR']) . "'\n AND scheme = '" . serendipity_db_escape_string($url_parts['scheme']) . "'\n AND port = '" . serendipity_db_escape_string($url_parts['port']) . "'\n AND host = '" . serendipity_db_escape_string($url_parts['host']) . "'\n AND path = '" . serendipity_db_escape_string($url_parts['path']) . "'\n AND query = '" . serendipity_db_escape_string($url_parts['query']) . "'\n AND last > {$ts} - {$interval}"; $suppressp = "DELETE FROM {$serendipity['dbPrefix']}suppress\n WHERE ip = '" . serendipity_db_escape_string($_SERVER['REMOTE_ADDR']) . "'\n AND scheme = '" . serendipity_db_escape_string($url_parts['scheme']) . "'\n AND host = '" . serendipity_db_escape_string($url_parts['host']) . "'\n AND port = '" . serendipity_db_escape_string($url_parts['port']) . "'\n AND query = '" . serendipity_db_escape_string($url_parts['query']) . "'\n AND path = '" . serendipity_db_escape_string($url_parts['path']) . "'"; $suppressu = "INSERT INTO {$serendipity['dbPrefix']}suppress\n (ip, last, scheme, host, port, path, query)\n VALUES (\n '" . serendipity_db_escape_string($_SERVER['REMOTE_ADDR']) . "',\n {$ts},\n '" . serendipity_db_escape_string($url_parts['scheme']) . "',\n '" . serendipity_db_escape_string($url_parts['host']) . "',\n '" . serendipity_db_escape_string($url_parts['port']) . "',\n '" . serendipity_db_escape_string($url_parts['path']) . "',\n '" . serendipity_db_escape_string($url_parts['query']) . "'\n )"; $count = serendipity_db_query($suppressq, true); if ($count[0] == 0) { serendipity_db_query($suppressu); return; } serendipity_db_query($suppressp); serendipity_db_query($suppressu); serendipity_track_url('referrers', $_SERVER['HTTP_REFERER'], $entry); } }
<?php # $Id: exit.php 2316 2008-08-22 09:20:13Z garvinhicking $ # Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team) # All rights reserved. See LICENSE file for licensing details include 'serendipity_config.inc.php'; $url = $serendipity['baseURL']; if (isset($_GET['url_id']) && !empty($_GET['url_id']) && isset($_GET['entry_id']) && !empty($_GET['entry_id'])) { // See if the submitted link is in our database and should be tracked $links = serendipity_db_query("SELECT link FROM {$serendipity['dbPrefix']}references WHERE id = " . (int) $_GET['url_id'] . " AND entry_id = " . (int) $_GET['entry_id'], true); if (is_array($links) && isset($links['link'])) { // URL is valid. Track it. $url = str_replace('&', '&', $links['link']); serendipity_track_url('exits', $url, $_GET['entry_id']); } elseif (isset($_GET['url']) && !empty($_GET['url'])) { // URL is invalid. But a URL-location was sent, so we want to redirect the user kindly. $url = str_replace('&', '&', base64_decode($_GET['url'])); } } elseif (isset($_GET['url']) && !empty($_GET['url'])) { // No entry-link ID was submitted. Possibly a spammer tried to mis-use the script to get into the top-list. $url = strip_tags(str_replace('&', '&', base64_decode($_GET['url']))); } if (serendipity_isResponseClean($url)) { header('HTTP/1.0 301 Moved Permanently'); header('Status: 301 Moved Permanently'); header('Location: ' . $url); } exit; /* vim: set sts=4 ts=4 expandtab : */