Сортировка страниц

Fedoric

Здравствуйте интересует вопрос. При сортировке страниц например в приложении сайт. Происходит ли экранирование данных при обращении к базе данных?

Объясню к чему задан вопрос.

Создал приложение отправил на модерацию - забанили из за того что сортировка происходит без экранирования данных.


 $data = waRequest::post('data');
  $data = json_decode($data);
  $readbleArray = $this->parseJsonArray($data);
$i=0;
foreach($readbleArray as $d){
  $i++;
  $model = new appMenuFieldsModel();
  $model->query("UPDATE app_menu_fields Set parent_id = '".$d['parentID']."', sort = '".$i."' where id = '".$d['id']."' ");
}

Так вот хотелось бы услышать мнение неужели это экранировать в этом случае архиважно и архинужно.

25 июля 2017
  • Fedoric 25 июля 2017 18:10

    + учитывая то что все переменные которые заносятся в базу данных являются числовыми id.

  • Алексей Webasyst 25 июля 2017 18:33

    По данному куску уверенность только в $i.
    Нет информации что делает parseJsonArray, поэтому можно допустить что просто формирует массив, который можно сделать и json_decode.
    что мешает передать в $d['parentID'] инъекцию вида

    1'; UPDATE wa_contacts SET password = "password"; UPDATE apps_menu Set parent_id='1


  • Fedoric 25 июля 2017 18:33

    Ну и конечно давайте поговорим о

    " Стоит и в описании страницы плагина в магазине описать подробности, назначения, варианты использования. "

    Во первых не плагин а приложение.

    Во вторых -

    Приложение «Сайт» — это системное приложение фреймворка Вебасист, предоставляющее необходимые инструменты для построения сайтов на основе нескольких приложений:

    — управление маршрутизацией (роутингом),
    — редактор шаблонов дизайна,
    — информационные страницы,
    — управление темами дизайна,
    — файловый менеджер,

    — многосайтовость.

    Где тут - описаны подробности, назначения, варианты использования.

    "Для чего используется Ссылка меню в настройках каждого пункта, как ее нужно указывать? "

    Вот скажите мне пожалуйста для чего же используется ссылка в меню?

    Ну наверно для того что бы куда либо вести.

    Уважаемые товарищи из webasyst я не идеальный программист и не претендую на лавры , но давайте как то урегулируем работу проверяющего органа. Так как некоторый баны просто доходят до абсурда!

  • Fedoric 25 июля 2017 18:40

    Алексей если смотреть на кусок кода то конечно уверенности нет.

    Но извините что утрирую если выдергивать из Библии контекст можно Майн Капф собрать.

    $d['id'] - это запись в базе данных id' => array('int', 11, 'null' => 0, 'autoincrement' => 1), она не может быть угрозой.

    $d['parentID'] -это запись дочерней страницы которая так же берется из значения id страницы.



  • Genasyst 25 июля 2017 18:42
    <?php
    $data = waRequest::post('data');
    $readbleArray = $this->parseJsonArray(json_decode($data));
    $i = 0;
    foreach($readbleArray as  $d) {
                $i++;
                $model = new appMenuFieldsModel();
                $model->updateById($d['id'], array('parent_id' => $d['parentID'], 'sort' => $i));
    }
  • Eugen Nichikov 25 июля 2017 19:01

    Гена, ещё инициализацию модели за цикл вынести :)

  • Алексей Webasyst 25 июля 2017 19:01

    Вы не то смотрите. Не важно какая структура у вашей таблицы, проблема в том что ваш код позволяет изменять другие таблицы.

  • Fedoric 25 июля 2017 19:02

    Алексей просветите пожалуйста каким образом ?

  • Genasyst 25 июля 2017 19:04

    Eugen Nichikov, Да ! Просто смутила строка запроса, ее и поправил)


    <?php
    $data = waRequest::post('data');
    $readbleArray = $this->parseJsonArray(json_decode($data));
    $i = 0;
    $model = new appMenuFieldsModel();
    foreach($readbleArray as  $d) {
                $i++;
                $model->updateById($d['id'], array('parent_id' => $d['parentID'], 'sort' => $i));
    }

    А вообще для таких целей используют SortableModel.....

  • Fedoric 25 июля 2017 19:06

    Гена Рыжов - мое почтение )


  • Алексей Webasyst 25 июля 2017 19:32

    Что мне мешает отправить POST-ом данные parentID которые будут не числом? Чтобы они в таком же виде попали на выполнение в модель.

  • Fedoric 25 июля 2017 19:44

    Не совсем Вас понимаю. Каким образом вы отправите post parentID эта переменная назначается если пункт меню является дочерним.

    пункт меню1 => id=1, parent_id =0

    пункт меню2 => id=2, parent_id =0

    перемещаем пункт меню2 что бы получилось вложенность и получаем

    пункт меню1 => id=1, parent_id =2

    пункт меню2 => id=2, parent_id =0

    и идет перебор пунктов с проверкой if (parent_id) .... esle .....




  • Алексей Webasyst 25 июля 2017 19:46

    Вы же знаете что через JS я могу отправить POST на любой адрес с любыми данными?
    Вне зависимости что вы строите дизайном.

  • Fedoric 25 июля 2017 19:53

    Блин Алексей Вы же в курсе что "русские хакеры" сорвали выборы в США.

    Или Вы действительно считаете что потенциальные пользователи установившие приложение вместо того что бы им пользоваться будет заниматься непонятно чем ?

    Хорошо оставим этот вопрос так как все сводиться к тому, что лучше перебдеть чем недобдеть )))


  • Павел Трофимов 25 июля 2017 20:47

    Не было бы никаких проблем, если б вы использовали штатный инструментарий , а не город ли б огород из своих sql запросов.

  • Fedoric 25 июля 2017 21:01

    Павел Трофимов например ?

  • Павел Трофимов 25 июля 2017 21:14

    $model->update()

  • Fedoric 25 июля 2017 21:44

    Павел Трофимов я с Вами полностью согласен моя спешка в купе с безграмотностью доставляют много проблем. И по поводу $model->update() согласен.

    Всем огромное спасибо что уделяете время. Алексей Вам отдельная благодарность.

    Гена Рыжов тридцать три благодарности. )) Сам знаешь за что. С меня простава.


  • Genasyst 27 июля 2017 01:25
    Гена Рыжов тридцать три благодарности. )) Сам знаешь за что. С меня простава.

    С тебя часть прибыли с продаж приложения, так что пиши еще, помогу!



Чтобы добавить комментарий, зарегистрируйтесь или войдите