Защита PHP скриптов

Тема в разделе 'PHP', создана пользователем doroga_94, 9 июн 2011.

  1. doroga_94 Новичок

    Давайте сюда выкладывать методы/приемы против взлома. Ведь никому не хочеться быть взломаными.
  2. Basters Модератор

    методы приемы? php.net фунцкии фильтрации..
    XmP нравится это.
  3. f-duck Новичок

    mysql_real_escape_string()
    Фильтры, регулярные выражения, htmlspecialchars().
  4. Khrome Exterminate!

    Я например всегда использовал:
    PHP:
    <?php
    // в вебстраницу:
    define("MY_SUPER_DEF"true);
    // в файл подключаемый:
    if(!defined("MY_SUPER_DEF") die("Hacker???");
    ?>
    Конечно наглядно но все-же, иногда помогает :)
    XmP нравится это.
  5. lex_nv Новичок

    А еще mod_rewrite - ацки полезная штука. На php можно и пропустить где то что то если проект большой, а это отличное дополнение.
  6. XmP ADD ebx, 110h

    Использовать ООП, всё прогонять через классы. А вот как раз mod_rewrite - отлично пользуються злоумышленники.
  7. lex_nv Новичок

    Интересно чем же там можно воспользоваться? Пример или ссылочку на статейку можно?
  8. Basters Модератор

    mod_rewrite дает возможность изменить любую переменную
  9. lex_nv Новичок

    Можно пример?
  10. XmP ADD ebx, 110h

    Всё это - тонкости PHP, сервера, HTTP протокола. Статеек на всё не бывает - всё надо изучать самому. Использовать mod_rewrite можно, но для грамотных скриптов и при грамотной настройке. А как средаство защиты, как я уж подчёркивал ранее - это бесполезно.
    Что за бред...
  11. lex_nv Новичок

    Я и не утверждал что это панацея, проверку переменных ни кто не отменял. Но тем не менее хочется посмотреть каким это образом именно mod_rewrite активно используют злоумышленники? Какие тонкости PHP, сервера? Максимум что я находил на эту тему, так это как можно узнать название переменных и скриптов... и то не факт что получится... и повторяюсь, проверку этих переменных ни кто не отменял.

    Поделитесь господа своим бесценным опытом, расскажите как используют этот модуль злоумышленники и как можно "изменить любую переменную" (последнее как по мне -действительно бред)

    А то начали тут, опыт, грамотность...
  12. Admin Админ

    modrewrite_search.php

    PHP:

    <?php
    // defines
      
    $charset = Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','-','_');
      
    $wordlist = Array();
      
    $param_file './params.txt';
      
    $separator '_';
      
    $words = Array();
      
    $maxlen $_GET['length'];
      
    $def_length=0;
      
    $site $_GET['url'];
      
    $count 0;
      
    $type $_GET['type'];
      
    $symbol $_GET['sym'];
      
    $arr $_GET['arr'];
      
    $max_len_of_url=2048;

    function 
    getlen($site_check)
    {
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL,$site_check);
        
    curl_setopt($chCURLOPT_FAILONERROR1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
    $length strlen(curl_exec($ch));
        
    curl_close($ch);
        return 
    $length;
    }

    function 
    check($site_check,$from,$to)
    {
        global 
    $def_length,$words,$site,$symbol;

        
    $curr_len getlen($site_check);
        if (
    $curr_len<>$def_length)
        {
            
    // пытаемся определить нужный нам символ
            
    echo '<b>[+] Find <a href='.$site_check.'>smth</a> Try to detect.</b><br>';
            
    flush();
            
    $site_1 $site;
            
    $site_2 $site;

            if (
    $to-1-$from 0)
            {
                for (
    $i=$from;$i<=$to-1;$i++)
                {
                    if (
    $i<=$from+(($to-$from)/2) - 1)
                        {
    $site_1 .= $words[$i].(($arr==1)?'[]':'').'='.$symbol.'&';}
                    else
                        {
    $site_2 .= $words[$i].(($arr==1)?'[]':'').'='.$symbol.'&';}
                }
            
    check($site_1 ,$from,(int)($from+(($to-$from)/2)));
            
    check($site_2 ,(int)($from+(($to-$from)/2)),$to);
            
    flush();
            }
            else
            {
                echo 
    '<b>[+] Find! <a href='.$site_check.'>'.$site_check.'</a></b><br>';
            }
        }
    }
     
    function 
    recurse($width$position$base_string)
    {
        global 
    $charset,$site_new,$site,$words,$count$values,$type,$separator,$wordlist,$symbol,$max_len_of_url;

            for (
    $i 0$i count($charset); ++$i)
            {
                
    // если длина сообщения меньше требуемой - берем символ и рекурсивно вызываем сами себя
                
    if ($position  $width 1)
                {
                    
    recurse($width$position 1$base_string $charset[$i]);
                }
                    
    // когда рекурсивные вызовы заканчиваются, возвращаемся на шаг назад по числу символов и выводим
                    
    if (!in_array($base_string.$charset[$i],$values))
                    {
                    
    $words[$count] = $base_string.$charset[$i].(($arr==1)?'[]':'');
                    
    $count++;
                    
    $site_new .= $base_string $charset[$i].(($arr==1)?'[]':'').'='.$symbol.'&';
                    }

                if ((
    strlen($site_new)+strlen($base_string)+4)>$max_len_of_url)
                {
                    
    check($site_new,0,$count);$site_new $site;$count 0;
                }
            }
        if ((
    $position == 0) && ($site_new != $site))
        {
    check($site_new,0,$count);}
    }

        if (empty(
    $_GET['url']) || empty($_GET['length']) || empty($_GET['type']) || empty($_GET['sym']))
        {
            echo 
    '<b>[+] Use http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?url=<url>&type=<type of attack>&length=<max len>&sym=<parameter value><br> </b>
                <b>    url examples:</b> <br/> http://site.com/index.php <br/> http://site.com/index.php?param=123 <br/> http://site.com/index.php?param=123%26param2=q <br/>
                <b>    types of attack:<br/>  </b>
                    1 - only bruteforce<br/>
                    2 - only wordlist<br/>
                    3 - word+separator+brute values<br/>
                    &arr=1 - try [] postfix values<br/>
                    </b>'
    ;
            exit;
        }

        if (
    strpos($site,'?')>0)
            {
    $site=$site.'&';}
        else
            {
    $site=$site.'?';}
        
    $site_new $site;
        
    // найдем все параметры
        
    preg_match_all("/[\?&]?([^&?=]+)=([a-zA-Z0-9\-_\.%]+)&/",
        
    $site,
        
    $outPREG_PATTERN_ORDER);
        
    $values $out[1];

        echo 
    '<b>[+] Analyze <a href='.$site.'>'.$site.'</a></b><br>';
        
    flush();

        if (
    $type >=2)
        {
            
    $file fopen($param_file,"r");
            if(!
    file)
            {
              echo(
    "<b>[+] Error: wordlist not exists - ".$param_file.'</b></br>');
            }
            else
            {
              while (
    $wordlist[] = trim(fgets($file)))
              {}
              unset  (
    $wordlist[count($wordlist)-1]);
              echo 
    "<b>[+] Wordlist loaded...".count($wordlist)." words.</b><br/>";
            }

        }
        
    // определим дефолтные значения
        
    $def_length getlen($site);

        switch (
    $type) {
        case 
    1:
            
    recurse($maxlen0'');
            break;
        case 
    2:
            unset(
    $charset);
            
    $charset[] = '';
            for (
    $j 0$j count($wordlist);$j++)
                {
                    if (!
    in_array($wordlist[$j],$values))
                    {
                    
    $words[$count] = $wordlist[$j].(($arr==1)?'[]':'');
                    
    $count++;
                    
    $site_new .= $wordlist[$j].(($arr==1)?'[]':'').'='.$symbol.'&';
                    }

                if ((
    strlen($site_new)+strlen($base_string)+4)>2048)
                {
                    
    check($site_new,0,$count);$site_new $site;$count 0//unset ($words); $words = array();// $words = array();
                
    }
            }
            if (
    $site_new != $site)
            {
    check($site_new,0,$count);}

            break;
        case 
    3:
            if (!
    in_array('',$charset))
                {
    $charset[count($charset)]='';}
            for (
    $j 0$j count($wordlist);$j++)
                {
    recurse($maxlen0$wordlist[$j].$separator);}
            break;
        }
     
        echo 
    '<b>[+] Done</b><br>';

    ?>
    Файл params.txt

Поделиться этой страницей