Помогите реализовать...

Статус
В этой теме нельзя размещать новые ответы.

sergey_prusov

Участник
Регистрация
31 Окт 2008
Сообщения
203
Реакции
4
Народ помогите сделать следующее. У меня свой сервис контекстной рекламы и Pop-up. Так вот, мне надо его защитить от накрутки. Ссылка которая рекламируется на сайтах партнера выглядет следующим образом
HTML:
http://сайт/click/strike.php?id=21&sid=5&hash=30151c6396b69a7ff4da4a498de5c7fd


где id - это сайт
ids - это реклама
hash - это мой метод защиты


но проблема в следующем..... если обрезать ссылку до

HTML:
http://сайт/click/strike.php?id=21&sid=5
реклама все равно будет показываться т.е hash вообще что есть что нет.... Так вот как бы мне можно было реализовать чтобы клик защитывался еще и по hash? Наверное надо сделать чтобы он записывался в базу.

код как генерится hash

PHP:
function generatehash($length = 32, $charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz")
    {
        $hash = "";
        for ($i = 0; $i < $length; ++$i)
        {
            $hash .= $charset[rand(0, strlen($charset) - 1)];
        }
        return $hash;
    }


а вот нужные страницы где все это реализуется

1)
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#ffffe1" leftmargin="25" topmargin="3">
<?php
include "../cfg.php";
$id = intval($_GET['id']);
$get_user_info = mysql_query("SELECT no_adult, adult FROM webmasters WHERE id = ".$id." LIMIT 1");
$row = mysql_fetch_array($get_user_info);
	




$keys=generatehash();
$hash=md5($keys.$_SERVER['REMOTE_ADDR']);  
	if ($_GET['hash']!=$hash)
	{
		$f=fopen("click/log_strike.txt","a");
		fputs($f,$wm_id."\t".$id."\t".$_SERVER['REMOTE_ADDR']."\t".date("Y-m-d H:i:s")."\t".$_SERVER['HTTP_REFERER']."\t".$_SERVER['HTTP_USER_AGENT']."\n");
		fclose($f);
	}










        $no_adult	= $row['no_adult'];
	$adult		= $row['adult'];

	$sql = "";

	if($no_adult) {
		$sql .= " AND adult = 0";
	}
	if($adult) {
		$sql .= " AND no_adult = 0";
	}

	$count	= mysql_num_rows(mysql_query("SELECT id FROM strike WHERE clx > 0 AND status = 0".$sql));
if($count == 0) {
	print "<a style=\"text-decoration: none; font-size: 12px; font-family: Tahoma, Verdana;\" href=\"http://сайт/\" target=\"_blank\"><b><font color=\"#333333\">сайт - Любой тип рекламы здесь!</font></b></a>";
} else {
	$nums	= rand(0, $count - 1);

	$get_strike = mysql_query("SELECT id, name FROM strike WHERE clx > 0 AND status = 0".$sql." LIMIT ".$nums.",1");
	$row = mysql_fetch_array($get_strike);
	$sid	= $row['id'];
	$name	= $row['name'];

	print "<a style=\"text-decoration: none; font-size: 12px; font-family: Tahoma, Verdana;\" href=\"http://сайт/click/strike.php?id=".$id."&sid=".$sid."&hash=".$hash."\" target=\"_blank\"><b><font color=\"#333333\">".$name."</font></b></a>";
}
?>
</body>
</html>

2)
PHP:
<?php
function getip() {
	if(getenv("HTTP_CLIENT_IP")) {
		$ip = getenv("HTTP_CLIENT_IP");
	} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
		$ip = getenv("HTTP_X_FORWARDED_FOR");
	} else {
		$ip = getenv("REMOTE_ADDR");
	}
return $ip;
}

include "../cfg.php";
$id		= intval($_GET['id']);
$sid	= intval($_GET['sid']);

$get_user_info = mysql_query("SELECT id, url, user_id FROM webmasters WHERE id = ".$id." LIMIT 1");
$row = mysql_fetch_array($get_user_info);
$urlwm	= $row['url'];
$wm_id	= $row['user_id'];

if($row) {
	$ip			= getip();									// Переменная с IP
	$brauzer	= substr($_SERVER["HTTP_USER_AGENT"],0,50);	// Браузер

		$get_popup = mysql_query("SELECT id, url, clx FROM strike WHERE id = ".$sid." LIMIT 1");
		$row = mysql_fetch_array($get_popup);
		$sid	= $row['id'];
		$url	= $row['url'];
		$clx	= $row['clx'];
		$time	= time() - $cfgTime;

		$cfgPouseClick = time() - 300;

		$count_click	= mysql_num_rows(mysql_query("SELECT id FROM log_strike WHERE (ip = '".$ip."' AND date > ".$time.") OR (brouser = '".$brauzer."' AND date > ".$cfgPouseClick.")"));

		if($count_click || $clx <= 0) {
			print "<html><head><script language=\"javascript\">top.location.href=\"".$url."\";</script></head></html>";
		} else {
			$one_porcent	= $cfgStrike / 100;
			$admin_percent	= sprintf("%01.4f", $one_porcent * $cfgHeaderPerc);
			$wm_percent		= $cfgStrike - $admin_percent;

			mysql_query("UPDATE users SET balance=balance+".$wm_percent." WHERE id=".$wm_id." LIMIT 1");
			mysql_query("UPDATE strike SET clx=clx-1, count=count+1 WHERE id=".$sid." LIMIT 1");

			mysql_query("UPDATE webmasters SET clx_today=clx_today+1, m_today=m_today+".$wm_percent." WHERE id=".$id." LIMIT 1");
			mysql_query("INSERT INTO log_strike (date, ip, idw, ids, price, url, brouser, fromurl) VALUES (".time().", '".$ip."', ".$id.", ".$sid.", ".$cfgStrike.", '".$urlwm."', '".$brauzer."', '".$_SERVER['HTTP_REFERER']."')");

			// МЕСТО ГДЕ МОЖНО ПИСАТЬ СТАТИСТИКУ АДМИНУ
$date	= date("d.m.Y");
mysql_query("UPDATE logs SET strike = strike + ".$admin_percent." WHERE date = '".$date."' LIMIT 1");
			print "<html><head><script language=\"javascript\">top.location.href=\"".$url."\";</script></head></html>";
		}

} else {
	print "<html><head><script language=\"javascript\">top.location.href=\"".$cfgSiteUrl."\";</script></head></html>";
}
?>


в общем надо сделать так чтобы проверка как-то была по hash я так думаю... Гуру помогите пожалуйста это реализовать:bc: если что-то понадобится то я выложу

---------- Post added at 19:46 ---------- Previous post was at 18:02 ----------

ну мне кот-нибудь поможет?

Добавлено через 48 минут
я как понимаю этот самый hash надо прикрутить как - нибудь к ids..... гуру нупомогите такой проект пропадает(((
 
делай еще одно поле в таблице и туда пиши хэш. а при запросе делай выборку и сравнивай результат
 
ну я не силен в php сам не смогу этого реализовать((( а если так сделать то все нормально будет хотябы теаретически?
 
ну я не силен в php сам не смогу этого реализовать((( а если так сделать то все нормально будет хотябы теаретически?
зачем же ты берешься за такие проекты если не силен в php? думаешь тебе кучу денег будет приносить? теоретически да, но хеш можно подменить при желании
 
ну я вот тока начал так усиленно учить php. До этого я занимался обычными информационными ресурсами но всегда хотел иметь что-нибудь связанное с рекламой. Вот сделал сервис и дела пошли в гору тьфу тьфу тьфу и тут вот такая проблема возникла..... предложите что-либо как поправить
 
Ну хоть кто-нибудь поможет??????????:bc::bc::bc:
 
писать конечно лень, но я бы сделал так:
1. Завел бы еще одну таблицу с полями id, sid, hash
2. после вызова generatehash()писал бы набор из этих переменный в базу
INSERT INTO `hashCheck` VALUES ($id, $sid, $hash)
3. Перед генерацией линка делал бы такой запрос
PHP:
$id = $_GET['id']
$sid = $_GET['sid']
$hash = $_GET['hash']
.....
$flag = mysql_query(SELECT COUNT(id) FROM hashCheck WHERE id = '$id' AND sid = '$sid' AND hash = '$hash')
if ($flag > 0)
//отдаем ссылку
else
//не отдаем
 
я бы генерировал хэш по-другому. Зачем он нужен, вот такой рендомный, я не понимаю :) Я бы добавил в базу еще урлу сайта.
Генерация хеша примерна вот такая. Делаем выборку урлы по айди сайта (на чистом пхп давно не писал, но суть ясна я думаю:(
PHP:
$site_url = mysql_query(SELECT url FROM your_table WHERE id = '$id');
$hash = md5($site_url); //можно еще прибавить какую-нить соль или id
Ссылка в итоге будет выглядеть так же как у тебя, но хэш будет нести информацию:
Для просмотра ссылки Войди или Зарегистрируйся
Затем, по ссылке идут к тебе на скрипт, а ты в скрипте уже должен взять id, по нему узнать урлу сайта, так же как и сверху. Потом тебе нужно взять хэш который пришел (если его нет, сразу отправлять в баню и не засчитывать), и проверить его следующим образом:
PHP:
$true_hash = md5($site_url) //хэш который должен быть

 //проверяем, правильный ли хэш
if($true_hash == $get_hash){
//далее смотри с какого сайта пришли
     $from_page=getenv("HTTP_REFERER");  
     $patern = "/^(http:\/\/)?([^\/]+)/i";  //регэкспа для выдерания адреса
     $from = preg_match($patern, $from_page, $from_url);
     //тут проверяем, тот ли адрес у нас в базе и все
     ....
}
 
Но в таком случае хэш статичен, и подставить его проще некуда. Насколько я понимаю, в данном случае он служит как дополнительный инструмент определения уникального перехода. ИМХО рандомный тут все-таки предпочтительнее.

Иначе можно просто проверять передан ли хэш в GET ;)
PHP:
isset($_GET['hash'])
// даем ссылку
else
// не даем
 
писать конечно лень, но я бы сделал так:
1. Завел бы еще одну таблицу с полями id, sid, hash
2. после вызова generatehash()писал бы набор из этих переменный в базу
INSERT INTO `hashCheck` VALUES ($id, $sid, $hash)
3. Перед генерацией линка делал бы такой запрос
PHP:
$id = $_GET['id']
$sid = $_GET['sid']
$hash = $_GET['hash']
.....
$flag = mysql_query(SELECT COUNT(id) FROM hashCheck WHERE id = '$id' AND sid = '$sid' AND hash = '$hash')
if ($flag > 0)
//отдаем ссылку
else
//не отдаем
а таблицу в базе сделать? так лучше будет просто мне надо будет еще и для контекста и плавающего сделать.... а для каждого свои таблицы....
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху