Как подделать запрос.

Discussion in 'PHP' started by 0o Chris o0, 3 Apr 2012.

  1. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Code:
    function saveValue(form)
     {
      if (form=='edit')
       var value=$('#'+form+'Field').val();
      else if (form=='select')
       {
        var options=$('#selectField')[0].options;
        for (var i=0; i<options.length; i++)
         if (options[i].selected)
          {
           var value=options[i].value;
           break;
          }
        if (value==0)
         return alert('Не выбран тариф.');
       }
      $.ajax(
       {
        type:'GET',
        url:'ajax.php?act=ajax&option=saveField&field='+global.field+'&value='+value,
        dataType:'xml',
        success:function (answer)
         {
          if ($(answer).find('error').length>0)
           {
            var error=new Array;
            var list=$(answer).find('error');
            for (var i=0; i<list.length; i++)
             error[error.length]=$(list[i]).text();
            print_error(error);
           }
          else
           {
            $('#i'+global.field).html(form!='select'?value:global.tarifs[value]);
            show(form,'none');
           }
         }
       })
     }
    
    <input onclick="saveValue('edit'); return false;" value="Сохранить" style="width: 45%; float: left;" type="submit">
    
    Возможно ли подделать запрос в данном случае?
    P.S. global.field имеет значение 'EMAIL'
     
    #1 0o Chris o0, 3 Apr 2012
    Last edited: 3 Apr 2012
  2. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Да, можно.
     
  3. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    А как? Я нашел где находится ajax.php, заменил url:'ajax.php?act=ajax&option=saveField&field='+global.field+'&value='+value на url:'http://site/путь до ajax.php/ajax.php?act=ajax&option=saveField&field=EMAIL&value=myemail. Запрос отправлялся такой, до сервера доходил, но mail не менялся.
     
  4. LStr1ke

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

    Joined:
    29 Jul 2009
    Messages:
    800
    Likes Received:
    145
    Reputations:
    73
    Может не хватает X-Requested-With: XMLHttpRequest в заголовках ?
     
  5. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    А с чего ты решил, что он должен где-то измениться?
     
  6. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Потомучто такой запрос(с параметром field=EMAIL и value=myemail) меняет e-mail на сайте.
    Вопрос стоит поставить немного по другому:"Подвержен ли этот код CSRF-атаке?".
     
    #6 0o Chris o0, 3 Apr 2012
    Last edited: 3 Apr 2012
  7. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Если генерируется какое-то значение в скрытом поле и отправляется вместе с ajax запросом с последующей проверкой, то нет
     
    #7 Chaak, 3 Apr 2012
    Last edited: 3 Apr 2012
  8. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Да вроде не генерируется.
     
  9. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Ну с локального компьютера создай html-файл, в ней форму, метод GET, hidden поле filend, value с нужными значениями и автосабмит формы на загрузке, допустим. Если код сработает успешно и данные на сайте обновятся, значит CSRF.
     
  10. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Да, я только что так и сделал, все работает, спасибо большое.