Php и Ajax

Discussion in 'PHP' started by skzi, 11 Jan 2007.

  1. skzi

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

    Joined:
    30 Dec 2006
    Messages:
    65
    Likes Received:
    11
    Reputations:
    5
    ТО что имеем:
    1)Есть Java код, который отправляет строку в файл php и получает md5 код посредствами AJAx
    Code:
    <script type="text/javascript" language="JavaScript" 
      src="lib/JsHttpRequest.js"></script>
    <script type="text/javascript" language="JavaScript">
    function doLoad(value) {
        // Create new JsHttpRequest object.
        var req = new JsHttpRequest();
        // Code automatically called on load finishing.
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                // Write result to page element ($_RESULT become responseJS). 
                document.getElementById('result').innerHTML = 
                    '<b>MD5("'+req.responseJS.q+'")</b> = ' +
                    '"' + req.responseJS.md5 + '"<br> ';
                // Write debug information too (output become responseText).
                document.getElementById('debug').innerHTML = req.responseText;
            }
        }
        // Prepare request object (automatically choose GET or POST).
        req.open(null, 'handler.php', true);
        // Send data to backend.
        req.send( { q: value } );
    }
    </script>
    
    <form>
        Text: <input type="text" name="text">
        <input type="button" value="Calculate MD5" 
          onclick="doLoad(this.form.text.value)">
    </form>
    
    <div id="result" style="border:1px solid #000; padding:2px">
        Structured results
    </div>
    <div id="debug" style="border:1px dashed red; padding:2px">
        Debug info
    </div>
    
    <hr>
    
    2)Есть php код получающий строку и отправляющий md5 строку
    Code:
    <?php
    require_once "lib/JsHttpRequest.php";
    $JsHttpRequest =& new JsHttpRequest("windows-1251");
    $_RESULT = array(
      "q"     => @$_REQUEST['q'],
      "md5"   => md5(@$_REQUEST['q']),
    ); 
    ?>
    
    3)Есть php код, выполняющий авторизацию пользователя из MySQL
    Code:
    <?php 
    if (isset($_POST['name'])){
        //инклудим файл с настройками бд
        include('settings.php');
        // Соединяемся с сервером базы данных  
        $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);  
        if (!$dbcnx) {  
          echo( "<P>В настоящий момент сервер базы данных не  
                              доступен, поэтому корректное отображение  
                              страницы невозможно.</P>" );  
          exit();  
        }  
        // Выбираем базу данных  
        if (! @mysql_select_db($dbname,$dbcnx) ) {  
          echo( "<P>В настоящий момент база данных не доступна,  
                              поэтому корректное отображение страницы  
                              невозможно.</P>" );  
          exit();  
        }  
        // Формируем и выполняем SQL-запрос для посетителя с  
        // именем $_POST['name']  
        $query = "SELECT password FROM users WHERE name='".$_POST['name']."'";  
        $nme = mysql_query($query);  
        if(!$nme)  
        {  
          echo mysql_error(); 
          echo "Ошибка выполнения запроса";  
          exit();  
        }  
        // Если запрос вернул результат - производим дальнейшую обработку  
        if(mysql_num_rows($nme) > 0)  
        {  
           // Получаем пароль  
           $password = mysql_result($nme, 0);  
           // Сравниваем пароль из базы данных и введённый посетителем  
           if ($_POST['password'] == $password) 
           { 
             // Идентификация прошла успешно - осуществляем 
             // "вход" посетителя. Для того, чтобы в течении текущей 
             // сесси посетитель не вводил своё имя пароль повторно -  
             // передаём их через сессию 
             if(session_start()) 
             { 
               $_SESSION['user'] = $_POST['name']; 
               $_SESSION['password'] = $_POST['password']; 
               // Осуществляем автоматический переход на  
               // страницу index.php чтобы убедится, что 
               // посетитель "вошёл" 
               echo "<center><font color='green'>Вход успешно выполнен<br>Переадресация...</font></center> <body onLoad=window.setTimeout(\"location.href='index.php'\",2000)>"; 
             } 
           } 
           else  
           {  
             echo "<center><font color='red'>Ошибка идентификации: неправильный пароль<br>Переадресация...</font></center> <body onLoad=window.setTimeout(\"location.href='index.php'\",2000)>";  
             exit();  
           }  
        }  
        // Если в результате запроса не получено ни одной  
        // строки - посетитель с таким именем не зарегистрирован  
        else  
        {  
          echo "<center><font color='red'>Ошибка идентификации: посетитель не зарегистрирован<br>Переадресация...</font></center> <body onLoad=window.setTimeout(\"location.href='index.php'\",2000)>";  
          exit();  
        }
    	}
    ?> 
    
    То что нужно:
    Нужно чтобы Java код(пункт1) отправлял введенные логин и пароль в php код(пункт3), чтобы php код принимающий java скрипт(пункт2) обрабатывал введенные логин и пароль и отправлял обратно результат.

    Моё мнение:
    1)Нужно переделать java код(пункт1) отправлял данные в виде login:password в phph программу(пункт3)
    2)Нужно чтобы php код принимал логин и пароль в виде login:password и разделял логин и пароль на две переменные, например в $login и $password
    3)Нужно переписать php функцию(пункт3) выполняющую вход с переменными и чтобы отправлялись данные обратно в java функцию(пукнт1)

    Уважаемые форумчане!
    Очень срочно нужна ваша помощь...Буду очень благодарен если поможете...Просто сам не могу все реализовать...
     
  2. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    Все как оказывается просто сделать!
    И так первое что нам нужно, что javascript применял 2 переменые
    PHP:
    function doLoad(value1,value2) {
    и так далее, отсылаем 2 перемыние скрипту
    PHP:
    req.send( { qvalue1qvalue2 } );
    потом уже в во втором скрипте делаешь операции 2 и 3 скрипта

    PHP:
    <?php
    require_once "lib/JsHttpRequest.php";
    $JsHttpRequest =& new JsHttpRequest("windows-1251");
     
    $login = @$_REQUEST['value1'],
     
    $pass = @$_REQUEST['value2'],

    if (isset(
    $login) || isset($pass)){
        
    //инклудим файл с настройками бд
        
    include('settings.php');
        
    // Соединяемся с сервером базы данных  
    //////////////
    ...
    //////////////
    $text='Удача въода or Х'//Текс который будет возращаться пользователю
    $_RESULT = array(
      
    "eval"     => $text
    ); 
    ?>
    Переписываешь на вот это
    PHP:
     document.getElementById('result').innerHTML req.responseJS.eval;
    Вот вроде бы в кратце расказал)))

    ЗЫ.Писать не охото полность код!
     
    #2 DIAgen, 11 Jan 2007
    Last edited: 11 Jan 2007
  3. EXSlim

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

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    мда...
    Сколько ещё надо статей написать о MySQL-Inj.....?


    Сплоит->В name вбиваем:
     
    1 person likes this.
  4. skzi

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

    Joined:
    30 Dec 2006
    Messages:
    65
    Likes Received:
    11
    Reputations:
    5
    Напиши пожалуйста два кода, которые у тебя получились в результате.
    Буду очень благодарен

    Кстати пункт2 и пункт3 один и тот же файл
     
    #4 skzi, 11 Jan 2007
    Last edited: 12 Jan 2007
  5. skzi

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

    Joined:
    30 Dec 2006
    Messages:
    65
    Likes Received:
    11
    Reputations:
    5
    EXSlim
    Напиши пожалуйста правильный запрос
     
  6. EXSlim

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

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    Хотя бы так

    $name = mysql_real_escape_string($_POST['name']);

    $query = "SELECT `password` FROM `users` WHERE `name`='".$name."'";

    но в идеале не слудует разрешать регистрировать имя содержащее спец символы, а только буквы, 0-9, нижнее подчёркивание и проверять потом это

    if (!preg_match("/^[A-Za-z0-9_]...
     
  7. skzi

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

    Joined:
    30 Dec 2006
    Messages:
    65
    Likes Received:
    11
    Reputations:
    5
    Спасибо, а ты можешь посмотреть мой первый пост
     
  8. EXSlim

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

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    DIAgen же всё написал...Правда кажись нужно просто отправить запрос яваскриптом =)

    А php файл в за висимости от валидности данных сам сделает редирект. И вот ещё на всякий случай здесь поправить

    // Prepare request object (automatically choose GET or POST).
    req.open(null, 'handler.php', true);

    на

    req.open('post', 'handler.php', true); т.к. данные гонятся постом
     
  9. skzi

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

    Joined:
    30 Dec 2006
    Messages:
    65
    Likes Received:
    11
    Reputations:
    5
    Если можно, лучше прикрепите два файла или напишите их сюда... что то не получается у меня...
     
  10. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    376
    Reputations:
    460
    А какая разница, там автоматически выберается метод отправки данных!
     
  11. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    2EXSlim, твой пример это далеко не идеал. Посмотри, статья специально для тебя. https://forum.antichat.ru/thread30641.html
     
  12. EXSlim

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

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    Предложи свой...
    Я предложил регистрацию имён [A-Za-z0-9_] иначе пинком под зад. Чем неустраивает?

    Насчёт запроса->
    Я ведь незнаю с какими именами он пустил в базу юзеров. Если бы формат имён был таким как я предложил, то перед запросом проверял бы имя как и при регистрации preg_mathch`ем. А так это недочёт первоначального разработчика.

    Вот тебе маленький квестик по теме =)

    _http://community.ho.com.ua/antichat/sql-test/

    Фильтр:

    В базе всего 2 юзера:
    Цель: при правильном пароле админа появится ключевое слово. Его и написать сюда
     
    #12 EXSlim, 12 Jan 2007
    Last edited: 12 Jan 2007
  13. blaga

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

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    Ты не понял, я не про mysql_real_escape_string(). А про if (!preg_match("/^[A-Za-z0-9_]... Зачем нужны эти филтры? Нужно только сделать так чтобы база нормально принимала данные. И mysql_real_escape_string() идеальный вариант если поле текстовое.
     
  14. EXSlim

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

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    аааа.... квест ты бы не прошел =) там небыло уязвимости, хотя фильтр был такой =)

    ты тоже непонял чуток =)
    if (!preg_match("/^[A-Za-z0-9_] я бы поставил при регистрации, чтобы разрешить юзерам имена только из букв, цыфр и нижнего подчёркивания. Это неимеет отношения к фильтрации запроса в БД =)
     
    1 person likes this.
  15. skzi

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

    Joined:
    30 Dec 2006
    Messages:
    65
    Likes Received:
    11
    Reputations:
    5
    Ребят! Я тему не для этого создавал! Помогите же мне!!! пожалуста