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

Тема в разделе "PHP", создана пользователем sergey_prusov, 12 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sergey_prusov

    sergey_prusov

    Регистр.:
    31 окт 2008
    Сообщения:
    205
    Симпатии:
    3
    Народ помогите сделать следующее. У меня свой сервис контекстной рекламы и 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(0strlen($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..... гуру нупомогите такой проект пропадает(((
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    делай еще одно поле в таблице и туда пиши хэш. а при запросе делай выборку и сравнивай результат
     
  3. sergey_prusov

    sergey_prusov

    Регистр.:
    31 окт 2008
    Сообщения:
    205
    Симпатии:
    3
    ну я не силен в php сам не смогу этого реализовать((( а если так сделать то все нормально будет хотябы теаретически?
     
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    зачем же ты берешься за такие проекты если не силен в php? думаешь тебе кучу денег будет приносить? теоретически да, но хеш можно подменить при желании
     
  5. sergey_prusov

    sergey_prusov

    Регистр.:
    31 окт 2008
    Сообщения:
    205
    Симпатии:
    3
    ну я вот тока начал так усиленно учить php. До этого я занимался обычными информационными ресурсами но всегда хотел иметь что-нибудь связанное с рекламой. Вот сделал сервис и дела пошли в гору тьфу тьфу тьфу и тут вот такая проблема возникла..... предложите что-либо как поправить
     
  6. sergey_prusov

    sergey_prusov

    Регистр.:
    31 окт 2008
    Сообщения:
    205
    Симпатии:
    3
    Ну хоть кто-нибудь поможет??????????:bc::bc::bc:
     
  7. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    писать конечно лень, но я бы сделал так:
    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(idFROM hashCheck WHERE id '$id' AND sid '$sid' AND hash '$hash')
    if (
    $flag 0)
    //отдаем ссылку
    else
    //не отдаем
     
  8. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    я бы генерировал хэш по-другому. Зачем он нужен, вот такой рендомный, я не понимаю :) Я бы добавил в базу еще урлу сайта.
    Генерация хеша примерна вот такая. Делаем выборку урлы по айди сайта (на чистом пхп давно не писал, но суть ясна я думаю:(
    PHP:
    $site_url mysql_query(SELECT url FROM your_table WHERE id '$id');
    $hash md5($site_url); //можно еще прибавить какую-нить соль или id
    Ссылка в итоге будет выглядеть так же как у тебя, но хэш будет нести информацию:
    http://сайт/click/strike.php?id=21&sid=5&hash=30151c6396b69a7ff4da4a498de5c7fd
    Затем, по ссылке идут к тебе на скрипт, а ты в скрипте уже должен взять 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);
         
    //тут проверяем, тот ли адрес у нас в базе и все
         
    ....
    }
     
  9. antidote

    antidote

    Регистр.:
    21 янв 2008
    Сообщения:
    167
    Симпатии:
    42
    Но в таком случае хэш статичен, и подставить его проще некуда. Насколько я понимаю, в данном случае он служит как дополнительный инструмент определения уникального перехода. ИМХО рандомный тут все-таки предпочтительнее.

    Иначе можно просто проверять передан ли хэш в GET ;)
    PHP:
    isset($_GET['hash'])
    // даем ссылку
    else
    // не даем
     
  10. sergey_prusov

    sergey_prusov

    Регистр.:
    31 окт 2008
    Сообщения:
    205
    Симпатии:
    3
    а таблицу в базе сделать? так лучше будет просто мне надо будет еще и для контекста и плавающего сделать.... а для каждого свои таблицы....
     
Статус темы:
Закрыта.