Нужна помощь

Тема в разделе "PHP программирование", создана пользователем Nik Saprano, 27 июл 2006.

Статус темы:
Закрыта.
  1. Nik Saprano

    Nik Saprano Гость

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




    <?
    session_start();
    include "affconfig.php";
    include "lang/$language";

    if ($_POST['userid']!='' && $_POST['password']!='')
    {
    // protection against script injection
    $userid = preg_replace('/[^a-zA-Z0-9_]/', '', $_POST['userid']);
    $password = preg_replace('/[^a-zA-Z0-9_]/', '', $_POST['password']);

    // if the user has just tried to log in
    $db_conn = mysql_connect($server, $db_user, $db_pass) or die ("Database CONNECT Error (line 11)");
    mysql_select_db($database, $db_conn);
    $query = "select * from affiliates where refid='$userid' and pass='$password'";
    $result = mysql_query($query, $db_conn);
    $id = mysql_fetch_array($result);
    if (mysql_num_rows($result) > 0)
    {
    $_SESSION['id'] = $id['id'];
    // if they are in the database register the user id
    $_SESSION['aff_valid_user'] = $userid;
    // logout admin if he was logged in before
    $_SESSION['aff_valid_admin'] = '';
    unset($_SESSION['aff_valid_admin']);
    echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=0;URL=members_only.php>";
    exit;
    }
    }
    if(aff_check_security())
    {
    aff_redirect('members_only.php');
    exit;
    }
    else
    {
    if (isset($_POST['userid']))
    {
    // if they've tried and failed to log in
    echo AFF_I_CANNOTLOG;
    }
    // else
    // {
    // they have not tried to log in yet or have logged out
    // echo AFF_I_NOTLOGGED;
    // }

    // provide form to log in
    ?>



    <form method=post action="index.php">
    <tr><td width="70" style="padding-left:20px"><b class="text_3"><?=AFF_G_AFFID?>:</b></td><td colspan="2" style="padding-bottom:5px"><input type=text name=userid style="width:130px; height:21px"></td></tr>
    <tr><td width="70" style="padding-left:20px"><b class="text_3"><?=AFF_G_PASSWORD?>:</b></td><td><input type=password name=password style="width:100px; height:21px"> <input class=text_5 name="submit" type="submit" value="OK" style="width:27px; height:23px"></td></tr>
    <tr><td colspan="2" height="16"></td></tr>
    </form>


    <?
    }
    ?>
     
  2. _serg_

    _serg_ Гость

    $query = "select * from affiliates where refid='$userid' and pass='$password'";
    я фигею :)
    я бы ввел примерно такой мейл:
    123' OR 1=1 LIMIT 0, 1;#
    и первой цифрой в лимите делал бы перебор до тех пор, пока не наткнусь на админскую учетную запись

    в общем, там можно потанцевать, что бы этот прег попробовать обойти
    кстати, он у тебя @ режет

    в мускуле есть такая прикольная функция mysql_real_escape_string
    в нее надо заворачивать все, что бросается в $query
    единственное, если в скуэль-запросе есть LIKE, то с его там надо поакуратнее с параметрами...
     
  3. Nik Saprano

    Nik Saprano Гость

    Так что делать то?
     
  4. _serg_

    _serg_ Гость

    в преге добавь не вырезать @ и .
    в sql-запросе вместо выборки по refid выбираеш селект по email

    я бы еще посоветовал обрезать у мыла все, что длиннее 128 символов
    и у пароля все, что длинее максимальной длины
     
  5. Nik Saprano

    Nik Saprano Гость

    Извини, но я полный ноль в пхп, вот пытаюсь учиться.
    Где и как добавить, чтоб @ и . не вырезались?
     
  6. _serg_

    _serg_ Гость

    $userid = preg_replace('/[^a-zA-Z0-9_@\.]/', '', $_POST['userid']);

    тут может сделать preg_match для $userid на соответствие формату email: /^[a-zA-Z0-9][-_.a-zA-Z0-9]*\@[a-zA-Z0-9][-.a-zA-Z0-9]+\.[a-zA-Z]{2,5}$/
    если шаблону не удовлетворяет, значит не мыло

    и потом чуть изменить query:
    $query = "select * from affiliates where email='".mysql_real_escape_string($userid)."' and pass='".mysql_real_escape_string($password)."'";
    или как там называется поле, в которм email залит...

    ну, а уж что там на экран выводить думай сам...
     
  7. Nik Saprano

    Nik Saprano Гость

    Спасибо тебе большое, щас попробую.
     
Загрузка...
Статус темы:
Закрыта.

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