Получение статистики просмотра файлов - PullRequest
1 голос
/ 07 декабря 2010

У меня есть файл, на который ссылаются другие суб-сайты.

http://site.com/file.img

Другие сайты будут ссылаться на него как

веб-сайт A:

<img src="http://site.com/file.img"></img>

веб-сайт B:

<img src="http://site.com/file.img"></img>

Как я могуполучить статистику о том, сколько раз каждый сайт вызывал этот файл?Могут ли эти результаты быть подделаны?Например, может ли веб-сайт A быть поддельным, будучи веб-сайтом B?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Веб-сайт A действительно может быть фальшивым, будучи B. HTTP Referer (sic) тривиален для фальсификации.

То, что вы хотите, это что-то вроде этого ...

.htaccess

RewriteEngine on

# Send all png, gif, jpeg, jpeg to image.php 
RewriteRule ^images/(.*)\.(png|gif|jpe?g)$ image.php?img=$1

PHP

<?php

if ( ! isset($_GET['img'])) {
    exit;
}

$img = $_GET['img'];

// Easily spoofed
if (isset($_SERVER['HTTP_REFERER'])
   AND $_SERVER['HTTP_REFERER'] === 'http://example.com') {
   // This image appears to be requested by example.com
}

// Avoid directory traversal attacks and validate image extension
if ( ! preg_match('/^[a-zA-Z0-9-_]+\.(gif|png|jpe?g)$/', $img)) {
   exit;
}

// Get image type
list(,,$type) = getimagesize($img);

// Send headers and echo file contents
header('Content-Type: ' . image_type_to_mime_type($type));
readfile($img);

Если вы не хотите сопоставлять такую ​​конкретную строку реферера, вы можете использовать parse_url(), чтобы получить домен, а затем сравнить его (или как вы хотите сравнить).

1 голос
/ 07 декабря 2010

Если вы проверяете по реферальной переменной, да, она может быть подделана. Но если вам повезло, что сайты A и B находятся на разных IP-адресах, вы можете получить доступ логи веб-сервера и подсчет времени доступа / Ip addr

1 голос
/ 07 декабря 2010

Простое решение: используйте перезапись URL-адресов, чтобы перенаправить доступ к вашему файлу в скрипт (например, PHP), подсчитав их, а затем вернув файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...