Требования к экранированию параметров плагина

Добрый день. Вопрос больше к администрации webAsyst.

Подскажите как быть, в некоторых плагинов необходимо предусмотреть вставку пользователем html кода, например тех-же счетчиков да и просто визуального оформления.

И получается что из-за требования "Надо экранировать все строки ввода внутри плагина, так как данные обрабатываются не верно (например, '"></textarea><script>alert(1)</script>)"

Это сделать невозможно, или есть какое решение?

2 ответа

  • 1
    Eugen Nichikov 20 декабря 2016 17:18 #

    Публиковать без экранирования.

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

    • +1
      Александр Тарасенко Александр Тарасенко 20 декабря 2016 17:19 #

      В том то и дело что два последних плагина отказали по этому поводу, и пришлось делать экранирование.

      • +1
        Eugen Nichikov Eugen Nichikov 20 декабря 2016 17:31 #

        Ну экранировать тоже нужно с умом.

        Например, если значение в настройках выводится неэкранированным, то это, конечно, баг:

        <textarea name="shop_someplugin[someparam]">{$settings.someparam}</textarea>

        Т.к. при повторном открытии настроек код выполнится.

        Но при выводе во фронтенде вполне может быть неэкранировано.

        Для верности можно к контролу комментарий добавить (Можно использовать HTML).

        • +1
          Александр Тарасенко Александр Тарасенко 20 декабря 2016 17:48 #

          Про это и речь, естественно что textarea и значенея внутри ковычек "' нужно экранировать.

          Но требование дословно:

          Надо экранировать все строки ввода внутри плагина, так как данные обрабатываются не верно (например, '"></textarea><script>alert(1)</script>)

          И это касалось именно вывода во фронтенде.

          Хотелось бы услышать официальное решение от WebAsyst что нужно экранировать, а что допускается не экранировать, так как это касается модерации.

          • +1
            Михаил Ушенин Михаил Ушенин Webasyst 20 декабря 2016 22:11 #

            Официальное решение Webasyst: делать так, чтобы пользователи не получили непредвиденных проблем при использовании продукта. Пример с textarea используется в документации для того, чтобы разработчикам было удобнее тестировать необходимость экранирования отображаемых данных. Если вы делаете так, что проблемы не возникают, значит, отказ со стороны модераторов неправомерен.

            • 0
              Александр Тарасенко Александр Тарасенко 21 декабря 2016 09:10 #

              Вопрос в понимание, что значит "проблемы не возникает", в нашем понимание если пользователь вбил в поле <script>alert(1)</script> и во фронтенде получил алерт, то это не проблема. Проблема, если он вбил "Новый"Товар'" и верстка во фронтенде разъехалась. Все верно?

              Я не пытаюсь ничего доказать, а пытаюсь понять, какую линию использовать при разработки:

              1) Просто забить и все экранировать, тогда возникает вопрос как быть с плагинами наподобие таких: https://www.webasyst.ru/store/plugin/shop/jivo/

              2) Понять а точнее получить официальное разъяснение что нужно, а что допускается не экранировать.

              • +1
                Михаил Ушенин Михаил Ушенин Webasyst 21 декабря 2016 19:38 #
                Вопрос в понимание, что значит "проблемы не возникает", в нашем понимание если пользователь вбил в поле <script>alert(1)</script> и во фронтенде получил алерт, то это не проблема. Проблема, если он вбил "Новый"Товар'" и верстка во фронтенде разъехалась. Все верно?

                Смотря какого пользователя вы имеете в виду. Если это пользователь бекенда, то всё верно: он сам решает, какой код публиковать во фронтенде. Если такой код позволяется публиковать пользователям фронтенда, то это уже ошибка в системе безопасности плагина, т. к. в нормальных условиях публиковать JavaScript-код таким пользователям не допускается.

                • +1
                  Александр Тарасенко Александр Тарасенко 21 декабря 2016 19:40 #

                  Добрый вечер. Вообще то именно про пользователя бакэнда (администратора) и был разговор.

                  То есть, если сейчас придет отказ по требованию экранирования именно данных введенных в бакэнде в настройках плагина, то можно будет сослаться на данную тему и попросить пересмотреть решение?

                  • +1
                    Михаил Ушенин Михаил Ушенин Webasyst 21 декабря 2016 20:02 #

                    Это несколько формальное отношение к вопросу. Предлагаю "ссылаться" на здравый смысл. Требования к публикации ведь были придуманы не для того, чтобы беспричинно кого-то ограничивать, а для того, чтобы у пользователей не возникало непредвиденных серьёзных проблем при использовании программных продуктов. Если у вас какой-то особый случай, пока ещё не описанный в списке требований, возможно, ваш разговор с модераторами будет поводом для дополнения текста требований. Это позволит в других подобных случаях в будущем не сталкиваться с такой же проблемой, которую мы сейчас обсуждаем.

  • 0
    Михаил Ушенин Webasyst 20 декабря 2016 17:01 #

    Экранирование с помощью htmlentities() или |escape не устраивает? Чем?

    • +1
      Александр Тарасенко Александр Тарасенко 20 декабря 2016 17:05 #

      В том то и дело что нет, вы примените это правило к коду счетчика? и что получится?

    • +1
      Александр Тарасенко Александр Тарасенко 20 декабря 2016 17:12 #

      Вот реальный пример: в этом плагине https://www.webasyst.ru/store/plugin/shop/newyear/ изначально планировалось разрешить пользователям писать HTML в поле для текста скидки, чтобы пользователь мог выделить цветом форматированием некоторые моменты своей акции, и по требованиям пришлось убрать данную возможность в результате пользователь лешился простой возможности, выделить например размер скидки в данном тексте.

      Вот и хотелось бы узнать какие есть решения данной проблемы?

      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 20 декабря 2016 22:08 #

        Какую конкретно проблему, по мнению модераторов, мог создать тот ваш вариант реализации этой возможности?

        • 0
          Александр Тарасенко Александр Тарасенко 21 декабря 2016 09:29 #

          Вы у меня спрашиваете? ) Вот цитирую:

          Описание:

          Надо экранировать все строки ввода внутри плагина, так как данные обрабатываются не верно (например, '"></textarea><script>alert(1)</script>)

          Я не знаю сам процесс модерации, но мне кажется все поля плагина заполняются данным шаблоном, потом смотрится фронтэнд и если выскочил алерт, то считается что требование не выполнено? поправьте если не так?


          • +1
            Михаил Ушенин Михаил Ушенин Webasyst 21 декабря 2016 19:42 #
            Вы у меня спрашиваете?

            Именно так. Если вам модератор написал: так сделать нельзя, выясните у него, почему так нельзя, если вы сами не понимаете этого. У нас не тоталитаризм, когда сказали "нельзя", значит, "нельзя". Все открыты для общения. Кроме того, все люди и потому подвержены ошибкам. Спросите у модератора, если вам непонятно, какие конкретно проблемы могли возникнуть при использовании той вашей "неправильной" реализации — он всё пояснит.

Добавить ответ

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