[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    [​IMG]
    Сорцы дать?)
     
  2. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    реально выложи где нить, а то мне говорят, что я твою юбку стырил. Хоть посмотрю, похожи ли они)
     
  3. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    http://rapidshare.com/files/120506001/www.rar
     
  4. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    И всетаки они разные :)
    PHP:
    <?
    header ("Content-type: image/png");
    error_reporting(0);
    $mysql_host = "";
    $mysql_database = "";
    $mysql_user = "";
    $mysql_password = "";
    mysql_connect($mysql_host, $mysql_user, $mysql_password);
    mysql_select_db($mysql_database);


    $agent = substr($_SERVER['HTTP_USER_AGENT'], 0);
    if(
    preg_match("!(Opera[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "opera";
    }
    elseif(
    preg_match("!(Firefox[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "firefox";
    }
    elseif (
    preg_match("!MSIE([\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = "Internet Explorer ".$math[1];
        
    $mysqlAgent = "msie";
    }
    elseif (
    preg_match("!(Konqueror[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "konqueror";
    }
    elseif (
    preg_match("!(Iceweasel[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "iceweasel";
    }
    elseif (
    preg_match("!(Lynx[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "lynx";
    }
    elseif (
    preg_match("!(Netscape[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "netscape";
    }
    elseif (
    preg_match("!(Safari[\s\d\./]+)!msi", $agent, $math))
    {
        
    $agent = $math[1];
        
    $mysqlAgent = "safari";
    }

    if(
    preg_match("!(Windows\s?[\s\w\.]+)!", $_SERVER['HTTP_USER_AGENT'], $math))
    {
        
    $os = $math[1];
        if(
    $os == "Windows NT 5.0")
            
    $os = "Windows 2000";
        elseif(
    $os == "Windows NT 5.01")
            
    $os = "Windows 2000";
        elseif(
    $os == "Windows NT 5.1")
            
    $os = "Windows XP";
        elseif(
    $os == "Windows NT 5.2")
            
    $os = "Windows Server 2003";
        elseif(
    $os == "Windows NT 6.0")
            
    $os = "Windows Vista";
    }
    elseif(
    preg_match("!(Mac\s?OS[\s\w\.]+)!", $_SERVER['HTTP_USER_AGENT'], $math))
        
    $os = $math[1];
    elseif(
    preg_match("!(Symbian\s?OS[\s\w\./]*)!", $_SERVER['HTTP_USER_AGENT'], $math))
        
    $os = $math[1];
    elseif(
    preg_match("!(Linux[\s\w\./]+)!", $_SERVER['HTTP_USER_AGENT'], $math))
        
    $os = $math[1];
    elseif(
    preg_match("!(\w+BSD[\s\w\./]+)!", $_SERVER['HTTP_USER_AGENT'], $math))
        
    $os = $math[1];
    elseif(
    preg_match("!(\J2ME[\s\w\./]+)!", $_SERVER['HTTP_USER_AGENT'], $math))
        
    $os = $math[1];
        
    include(
    "geoip/geoipcity.inc");
    include(
    "geoip/geoipregionvars.php");
    $gi = geoip_open("geoip/GeoIPCity.dat", GEOIP_MEMORY_CACHE);
    $record = geoip_record_by_addr($gi, $_SERVER['REMOTE_ADDR']);
    if(!
    $record->city)
        
    $record->city = "-";
    if(!
    $record->country_name)
        
    $record->country_name = "-";

        
    $height = 42;
    $width = 350;
    $im = imagecreate($width,$height);

    $clblack = ImageColorAllocate($im, 0,0,0);
    $clLightGrey  = ImageColorAllocate($im, 222,222,222);
    $clgrey  = ImageColorAllocate($im, 190,190,190);
    $clDarkGray = ImageColorAllocate($im, 70,70,70);

    for(
    $i = 0; $i < $height; $i++)
    {
          
    $color = ImageColorAllocate($im, 100-(100)/$height*$i,100-(100)/$height*$i,100-(100)/$height*$i);
        
    imageline($im,0,$i,$width-1, $i, $color);
    }
    for(
    $i = 0; $i < $width+$height; $i+=5)
    {
        
    imageline($im,$i-$height,0,$i, $height, $clDarkGray);
    }
    imagerectangle($im, 0, 0, $width - 1 , $height - 1, $clgrey);
        
    $font="mini.ttf";
    imagettftext($im, 6, 0, 3, 10, $clgrey, $font, "> Browser:");
    imagettftext($im, 6, 0, 70, 10, $clLightGrey, $font, $agent);
    imagettftext($im, 6, 0, 3, 17, $clgrey, $font, "> OS:");
    imagettftext($im, 6, 0, 70, 17, $clLightGrey, $font, $os);
    imagettftext($im, 6, 0, 3, 24, $clgrey, $font, "> IP:");
    imagettftext($im, 6, 0, 70, 24, $clLightGrey, $font, $_SERVER['REMOTE_ADDR']);
    imagettftext($im, 6, 0, 3, 31, $clgrey, $font, "> Country:");
    imagettftext($im, 6, 0, 70, 31, $clLightGrey, $font, $record->country_name);
    imagettftext($im, 6, 0, 3, 38, $clgrey, $font, "> City:");
    imagettftext($im, 6, 0, 70, 38, $clLightGrey, $font, $record->city);
    imagettftext($im, 6, 0, $width-20, 10, $clgrey, $font, "oRb");

    ImagePng($im);
    geoip_close($gi);

    mysql_query("INSERT INTO `useragents` SET `ip`='".$_SERVER['REMOTE_ADDR']."', `browser`='".addslashes($mysqlAgent)."', ".
                
    "`useragent`='".addslashes($_SERVER['HTTP_USER_AGENT'])."', `os`='".addslashes($os)."',".
                
    "`referer`='".addslashes($_SERVER["HTTP_REFERER"])."', `lastupdate`=NOW()".
                
    "ON DUPLICATE KEY UPDATE `browser`='".addslashes($mysqlAgent)."', ".
                
    "`useragent`='".addslashes($_SERVER['HTTP_USER_AGENT'])."', `os`='".addslashes($os)."',".
                
    "`referer`='".addslashes($_SERVER["HTTP_REFERER"])."', `lastupdate`=NOW()");
    ?>
    на хостинг не выкладываю, ибо лень 20 метров в нек кидать. geoip на сайте разработчиков.
     
  5. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Дастишь олбанишЪ?

    Пофильтруй для приличия, ибо AccessDiver рулид :)
     
  6. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    Блек, в твоем скрипте можно дохера чего понавставлять в Http_x_forwarder_for, Http_user_agent. я думаю о результатах догадываешься ;)
     
  7. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Пасибо подрочил)))) Запись в БД у меня вырублена, +
    $ip = substr($ip, 0, 15);

    А юзер агент отфильтрован ..
    $user_agent = detect_browser($user_agent);
     
  8. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    ахаха, рудимент после дебага остался :)

    на инсерте посматри, специльно там экранирую.
     
  9. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    До:
    '/**/UNION/**/SELECT/**/0/*
    После:
    \\\'/**/UNION/**/SELECT/**/0/*

    Запрос будет примерно такой:
    '\\\'/**/UNION/**/SELECT/**/0/*

    Это фильтрация?)) base64_encode надежней
     
  10. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    неа)
    PHP:
    <?
    echo 
    addslashes("'/**/UNION/**/SELECT/**/0/*")
    //   \'/**/UNION/**/SELECT/**/0/*
    ?>
    ибо magic_quotes_runtime = Off
    не понял. если ты отправишь это заместо агента, к примеру, в базу все равно будет вставляться \'\\\\\'/**/UNION/**/SELECT/**/0/*. И схавает он это, не поперхнувшись.

    согласен, но в pma глядеть не удобно :)
     
  11. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Твой кусок запроса
    user_agent='
    Юзер агент (/**/ сменил на пробел для большей наглядности):
    ' UNION SELECT 0/*
    после добавления слешей:
    \' UNION SELECT 0/*
    итого твой запрос получится:
    user_agent='\' UNION SELECT 0/*

    /* - обрежет остатки запроса
     
  12. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    .. ток один хрен вывода нет и если у юзера нет привеленгии на запись то мона забить))
     
  13. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    581
    Reputations:
    256
    Специально потестил :)
    [​IMG]
    я то понимаю, что такое /*. но вот не понятно с чего ты взял, что экранирования кавычка, закроет кавычку, открытую в запросе? оО
     
    1 person likes this.
  14. BlackSun

    BlackSun Banned

    Joined:
    1 Apr 2007
    Messages:
    989
    Likes Received:
    1,168
    Reputations:
    446
    Пойду убьюсь ..
    Схавал и не подовился =\
     
  15. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Харе флудить... Тут вам не уязвимости! :)
     
    1 person likes this.
  16. Buffalon

    Buffalon Elder - Старейшина

    Joined:
    22 Mar 2008
    Messages:
    241
    Likes Received:
    34
    Reputations:
    8
    Думаю это тема для новичков поэтому сюда... .
    Короче я тут подумал над алгоритмом поиска и вот что я придумал.. .
    Что если строить бинарное дерево и в каждую ячейку кидать букву(и эта буква будет выглядеть в двоичной форме)>
    Тоесть если найденна буква то поиск идёт дальше=>
    И так до конца дерева... .
    >И ещо вопрос РЕально ли измерить время работы БД при n-таблиц n-пользователей обращаються к БД итд... .Но проблема будет что поле может быть и int или char итд
     
  17. Buffalon

    Buffalon Elder - Старейшина

    Joined:
    22 Mar 2008
    Messages:
    241
    Likes Received:
    34
    Reputations:
    8
    А можно ещо вопросец> можно узнать как реализован алгоритм md5()
    Статейку... .плиз... .
     
  18. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    http://ru.wikipedia.org/wiki/MD5
     
    _________________________
  19. AFoST

    AFoST Elder - Старейшина

    Joined:
    28 May 2007
    Messages:
    588
    Likes Received:
    485
    Reputations:
    176
    Какая-нибудь глобальная переменная содержит адресную строку, к которой обращается удаленный пользователь?
    типа, я сделал запрос
    http://site.ru/index.php?id=3&id=3
    И он сохранился в какой-нибуь переменной?
     
  20. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    $_SERVER["QUERY_STRING"] выведет "id=3&id=3"
    $_SERVER["REQUEST_URI"] выведет "/index.php?id=3&id=3"
     
    1 person likes this.
Thread Status:
Not open for further replies.