Можно ли манипулировать вызовом Ajax, чтобы указать серверу удалить данные, для которых он не предназначен? - PullRequest
0 голосов
/ 05 июля 2011

Я использую диалог jQuery, чтобы спросить пользователя, действительно ли он хочет удалить запись (пользователь вошел в систему).

Если да, я получаю идентификатор записи и запускаю jQuery.ajax.

Мои вопросы:

  1. Может ли пользователь выполнить jquery без взаимодействия с экраном?
  2. Может ли пользователь через какое-то "хакерское ПО" передать любой record_id, удалив таким образом запись, которую он не должен удалять?

Вот мой код:

  function initDeleteRecord() {
    var options = {
            title: "Delete record",
            modal: true,
            buttons: {
              "Ok": function() {
                var record_id = jQuery('#recordID').val(); // <-- Can this be manipulated?
                deleteRecord(record_id);     
              },
              "Cancel": function() {
                jQuery(this).dialog("close");   
              }               
            }
        };

      jQuery('#dialog').dialog(options);        
      jQuery('#dialog').dialog("open");  
  }

  function deleteStore(store_id) {
    jQuery.ajax({
      url: siteURL +"/jquery.php",
      data: {instance: 'deleteRecord', record_id : record_id},
      success: (function(data) {
        jQuery('#dialog').dialog("close");
        window.location(siteURL);
      }),
      dataType: 'json'
    });  
  }

Ответы [ 4 ]

5 голосов
/ 05 июля 2011

Да и Да.Пользователь может выполнить любой код jQuery, например, используя Opera Dragonfly или Firebug для Firefox.

И пользователь всегда может использовать свою собственную реализацию «браузера».Никогда не доверяйте данным, поступающим к вам.Всегда выполняйте проверки на стороне сервера (снова).Проверки на стороне клиента хороши только для повышения удобства, если пользователь случайно ввел неверные данные.

2 голосов
/ 06 июля 2011

1) Конечно, тривиально извлечь URL из фрагмента javascript и напрямую вызвать веб-сервис. Невозможно гарантировать 100% времени, когда скрипт x.php вызывался фрагментом JavaScript, выполняющимся на определенной странице. Что касается сценария PHP, POSt, выполняемый вызовом AJAX, аналогичен POST, выполняемому в форме на совершенно другой странице или сервере.

2) Легко. Представьте себе, что кто-то размещает простую HTML-страницу на своем локальном компьютере с формой:

<form method="post" action="http://yourserver.com/jquery.php">
<input type="hidden" name="instance" value="deleteRecord" />
<input type="text" name="record_id" />
<input type="submit"
</form>

это будет иметь тот же эффект, что и ваш jjery ajax-вызов.

1 голос
/ 06 июля 2011

1) Да. Пользователь может выполнить любой фрагмент JavaScript, включая ваши функции jQuery, в своем браузере, не взаимодействуя с самими элементами страницы.
2) да. Значением элемента #recordID можно манипулировать, чтобы оно было любым значением, которое желает пользователь. В качестве альтернативы пользователь может просто вызвать deleteStore () напрямую с любым идентификатором записи.

Здесь есть довольно серьезные проблемы с безопасностью. jQuery (и JavaScript в целом) не смогут управлять разрешениями ваших пользователей таким образом. Вам нужно будет отслеживать зарегистрированного пользователя и его разрешения на сервере (посредством сеансов или чего-то подобного) и удалять только те строки, которые пользователь может удалить.

1 голос
/ 06 июля 2011

Объявление 1: Да, он может выполнять Javascript так, как считает нужным.

Объявление 2: Да, он может (например, с Tamper).Никогда ничего не проверяйте на стороне клиента, всегда на стороне сервера.Если пользователь может удалять только определенные идентификаторы, вы должны убедиться на стороне сервера, что аутентифицированный пользователь (через сеанс или что-то еще) имеет право сделать это до выполнения вашего SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...