1. C# / Говнокод #13074

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    public static MvcHtmlString TextWithLinks(this HtmlHelper helper, string inputStr)
    {
      string html = String.Empty;
      Uri url;
      string[] arr = inputStr.Split(' ');
      for (int i = 0; i < arr.Length; i++)
      {
        if (i != 0)
        {
          html += " ";
        }
        if (Uri.TryCreate(arr[i],UriKind.Absolute, out url))
        {
          html += String.Format("<a href='{0}' target='_blank'>{0}</a>", url.AbsoluteUri);
        }else
        {
          html += arr[i];
        }
      }
      return new MvcHtmlString(html);
    }

    Запостил: DarkThinker, 30 Мая 2013

    Комментарии (39) RSS

    • Какой injection-безопасный код...
      Ответить
      • если бы не #17, все было бы не так печально
        Ответить
      • показать все, что скрытоА какие тут могут быть иньекции? Ну максимум XSS.

        P.S. Это я так понимаю обработка ссылок в чем-то типа BB кодов?
        Ответить
        • Ну смотря насколько агрессивный у них urlencode. Если он угловые скобки и апострофы переводит в percent encoding, то это ещё не так страшно.

          Но строка 17 - эталонный ГК. Если не распарсился URL - строка вставляется в HTML как есть, со всеми <script> и прочими радостями жизни.
          Ответить
          • показать все, что скрыто> строка вставляется в HTML как есть, со всеми <script> и прочими радостями жизни
            Ну опять же все зависит от того, насколько эта строка отфильтрована заранее, до вызова этой функции. Если в ней уже успели похерить все открывающие угловые скобки - то абсолютно ничего страшного.
            Ответить
            • судя по url.AbsoluteUri, нифига подобного
              Ответить
              • показать все, что скрытоНу а откуда в url открывающая угловая скобка? А ну да, зато там может быть амперсанд.
                Ответить
                • ну вот если Uri.TryCreate прошло, то все хорошо и скобка проэскейпилась
                  а если нет, см. альтернативную ветку, где все скобки выживают
                  Ответить
                  • показать все, что скрыто>> заранее, до вызова этой функции
                    > где все скобки выживают
                    Я все-таки имел в виду, что скобки уже успели похерить ДО вызова TextWithLinks, а не в ней... Но тут я тупанул в плане амперсанда - его тоже нужно экранировать, но если его заэкранировать заранее - испортятся сложные URL'ы, в которых больше одного параметра. Единственное место, где можно адекватно заэкранировать амперсанд - как раз строка 17 ;(

                    P.S. Или &amp; допустим в href и обработается корректно?
                    Ответить
                    • заранее не получится только потому, что тогда урлы серьезно пострадают, а к ним нужен особый, деликатный подход
                      по-хорошему, надо отдельно эскейпить текст и урлы
                      я в свое время тоже писал что-то подобное сабжу (выделение ссылок) и тоже столкнулся с такой проблемой
                      Ответить
                      • показать все, что скрытоYes, it is. HTML entities are parsed inside HTML attributes, and a stray & would create an ambiguity. That's why you should always write &amp; instead of just & inside all HTML attributes.

                        http://stackoverflow.com/questions/3705591/do-i-encode-ampersands-in-a-href

                        Т.е. получается, что все-таки можно заэкранировать все к хуям в самом начале обработки текста, задолго ДО обработки ссылок. Другое дело, что тогда Uri.TryCreate может поломаться из-за &amp'ов и &lt в нем.
                        Ответить
                        • надеюсь, он умеет из них делать %хх
                          Ответить
                          • показать все, что скрытоА я надеюсь, что не умеет ;) Он же так похерит урл до неюзабельности, свалив все параметры в один.

                            Percent-encoding должен был применить тот, кто отправлял текст (ну или браузер, из которого он копировал ссылку), т.к. в рассматриваемом коде мы уже никак не сможем отличить амперсанды внутри параметров от амперсандов между параметров (если постер не применил percent encoding сам).
                            Ответить
                            • а, ну да. здесь нужно что-то вроде prepared statements, чтобы параметры экранировались, а остальное - нет. и вообще, пусть каждый уровень отвечает за экранирование своих спецсимволов

                              (блин, что-то я сегодня жестко туплю)
                              Ответить
                              • показать все, что скрыто> блин, что-то я сегодня жестко туплю
                                Да я тоже не лучше... Просто тут любому крышу снесет этими многоуровневыми экранами. Самое противное - в вебе всё работает почти как надо, даже если я делаю кучу вещей неправильно. Вот за это я и ненавижу веб, хтмл, и всё, что с ними связано.
                                Ответить
                                • вот именно, что "почти".
                                  в вебе ничего не ломается с сегфолтом, а спокойно себе криво-косо работает (что-то вроде "чувак, ты же именно на это рассчитывал")
                                  а потом смотришь - а у тебя база дропнута, мыло-пассы уведены, сервак зомбирован в ботнет. а все потому, что где-то забыл что-то экранировать, понадеявшись, что это уже было сделано предыдущим слоем
                                  Ответить
                                  • показать все, что скрыто> спокойно себе криво-косо работает
                                    У нас на внутрикорпоративном сайте была бага - половина таблиц и дивов была не закрыта. Но эксплорер отлично показывал и печатал эту страничку. И всем было хорошо. А вот опера с фуррифоксом показывали, но не могли напечатать ;) Причем опера показывала просто чудеса ебанутости - в preview все было нормально, а в распечатках была полная срань ;)
                                    Ответить
                                  • слои-шмои
                                    Вам зачем боги абстракцию дали?
                                    нафига над строками аппендом манипулировать, если можно строить дерево в памяти и всю логику рендеринга и экранирования поместить один раз туда?
                                    Ответить
                              • показать все, что скрытоКстати, от ссылок вида javascript:alert('хуй') эти экранировки все равно не спасут ;)
                                Ответить
                                • эти ссылки безопасны ) максимум сессионный айди уведут
                                  Ответить
                                  • показать все, что скрыто> эти ссылки безопасны ) максимум сессионный айди уведут
                                    Ну а незаэкранированный жабоскрипт тогда что сделает? ;)
                                    Ответить
                                    • > Ну а незаэкранированный жабоскрипт тогда что сделает? ;)
                                      распидорасит страницу
                                      Ответить
                                      • Незаэкранированный жабоскрипт может увести посетителей на другой сайт:
                                        document.location = 'http://huyandex.com/';
                                        Ответить
                                        • о, это уже соц.инженерия
                                          Ответить
                                          • Соц. инженерия, если просто текст или ссылки, но когда строка вставляется в HTML как есть, со всеми <script> и прочими радостями жизни, это уже по-другому называется. Предлагаете выключить JS в браузере? Разумеется, JS нужен только для распространения вирусов, показа рекламы и шпионажа. А вдруг сайт без JS неюзабелен, всё на аяксах да на скрытых слоях?
                                            Ответить
                                            • нет, я про то, что юзер может этому редиректу по глупости доверять.
                                              Ответить
                                              • Особенно мне нравится, когда сайты для входа через OAuth или OpenID открывают маленькие окошки без адресной и без статусной строки, так что пользователь зачастую не знает, его ли это OAuth-провайдер или фишинговый сайт.
                                                Ответить
    • показать все, что скрытоИзвините, ничем не могу помочь. Но уверен, что Вы найдёте правильное решение. Не отчаивайтесь.


      --------
      <a href=https://bezopasnik24.ru>контроль доступа турникеты</a> | https://bezopasnik24.ru
      Ответить
    • показать все, что скрытоСкупка несовременной техники на обновленную - считается потребность, что происходит грядущие два-три годика, резкое развитие приложений и свежего наружности цифровой аппаратуры выставляет к продаже гаджеты, что любой абонент хочет взять у следующее время, то что доступно также доступно настроить благодаря онлайн- организацию, что занимается обменом электроники. Фирма предоставляет шанс для Вас провести скоропостижный операцию касательно реализации устарелой марок также принятия новой по минимальное действие: продавец оставляет данные контактному администратору, согласовывает продажу отсталой оборудования, и производит наличные за малое число часов. Работать с Digitbuy <a href=http://www.digitbuy.ru/149-iphone-7.html>скупка iphone 7</a> практично у всяком мере, мы осуществляем закупку механизмов также цифровой установок, телефонов, фототехники, айпадов, переносных компьютеров и подобных механизмов на любой момент суток, затем непрерывно предоставляем сходные критерии приема также высокие цены http://www.digitbuy.ru/ на персональному рестанту. Связывайтесь, затем достигайте подходящую наличные, тогда когда потребителю пригодно из DigitBuy.
      Ответить
    • показать все, что скрытоНовая приемы Эппл признанная всякому человеку, каковой ценит простоту и оперативность, потому стопроцентно в вашем лице или личные коллеги владеют возле себя Iphone, iPod или же айпад и восхищаются техническими характеристиками при эксплуатации. Команда открываем для пользователей интернет-сервер айфонов также плееров территории <a href=http://lapplebi.com/obzory/>обзоры Apple iphone</a>, где демонстрирует самые вышедшие сообщения про технические девайсы, корректировки, добавления, установки, обзоры, суждение, принадлежности и консультирование касательно задействования. Здесь пользователь сможет ощущать самого себя на собственной сфере, просматривая указанные артикулы и издания технического оснащения от фирмы Apple, отмечаться на личном портале затем всегда повседневно изучать финальными новинками у мультимедийном индустрии. Обретайте доскональную данные про Эппл http://lapplebi.com/ вместе из нами именно на ресурсе присущих активов и достижимости iPhone, iPod, планшетов.
      Ответить
    • показать все, что скрытоДобротность и предприимчивость, довольство к тому же стильность - первенствующие свойства хорошей мебели именно для квартиру, компании, баров либо ландшафтного дизайна , та что поверхностным наружностью выделяет на длинной службе. Выбрать оснащение всяческого призвания у всеохватывающем веб- портале <a href=http://kimnatka.com/ru/mattresses_beds/krovati/dvyspalnye_krovati>http://kimnatka.com/ru/mattresses_beds/krovati/dvyspalnye_krovati</a> подходяще и общедоступно, с помощью быстрой подачи у нужный пунктам Вы будет уверенно осуществлять доставку по любого места. Работа из нашим фабрикой санкционирует никак не только применять готовым подбором, но плюс выполнять своеобразные комбинацию, фигурируя у бонуссах и особенных приглашениях. Новая установка в офиса, загородный дом, природы, спальни , кабинета формирования на установленном пользовательском- альбоме на сервиса http://kimnatka.com/ в доступные стоимость совершит задуманный убранство уютным и красивым, тогда наша команда способствует на комфортном работе с наших посетителями.
      Ответить
    • показать все, что скрытоВызвать интерес ребят именно на долгое час можно новым мультиком, что работает у хорошем формате, высокопрофессиональной дубляже также в 3D свойстве, что Вы имеете возможность ввести всегда с нашем сайте аниме <a href=http://multiki-online24.ru/>аниме онлайн</a>. Вполне свежие плюс известные мультфильмы для деток малого возраста клиенты быстро сумеют отобразить на нашему онлайн-сайте с поддержкой поисковика или классификации. У нашем ресурсе ламеры будете постоянно обозревать современные мультики, собрание- мультиков возрастающий по оценках, а также анимационные, старые, диснеевские, мультфильмы две тысячи семнадцатого года , памятные распевки с детского кино предназначенных для мальчишек также девчушек у лучшем формате. Именно на презентованному ресурсе Вы действительно отыщете занятие для себя также деток.
      Ответить
    • показать все, что скрытоФильмы и сериалити указанных жанров на HD виде погодят Вас именно на презентованному кинотеатре, тот что даст позволение обозревателям назначить желанный фильм касательно по классе: оценка, год, воспроизведенности, озвучивание, подборка мастеров сцены, государство к тому же программа съемки, и сразу исполнять обзор по приемлемом качестве. Под ваш альтернативности интернет портал киноресурса <a href=http://hd720kino.ru/>смотреть в хорошем качестве фильмы</a> являет целую палитру долгих кино также киноисскуства двадцать семнадцать сезона также поршлых годов популярного кино, по генеральной сервере можно осмотреть ходкие-100 предпочтительных кинофильмов, премьеры кино, разряды также группы короткометражек по интернету, что выпускают в телевизору. Данный ресурс систематически освежаем тип фильмов, включаем долгожданные серии плюс презентуем самые вышедшие кинопремьеры непосредственно с больших отражателей.
      Ответить
    • показать все, что скрытоЯркие плюс курьезные уведомления из полного мира также отзывы об этом всем от самого легкого также мягкого персоны - Федора Добронравова, что удивляет и снабжает читателей позитивной энергией, а ко всему излагает нравоучительные случаи со быта и индивидуального новыков. Клиенты сервера <a href=http://fedor-dobronravov.ru/>ссылка</a> имеют возможность отследить финальные текст собственно по ходкие обсуждения с этого автора, комментировать статьи и ставить отметки. Находите и читайте выпуском о курс, обновками у стране также прочие рубрики с стандартного блогера и выдающего корреспондента Федора Добронравова.
      Ответить
    • показать все, что скрытоКомпания Техникстрой представляет импортную продукцию тоннажного аппаратуры, которое задействуется при строевых действиях, строительных конструкциях, еще и реставрации к тому же вовсе не располагает похожие у России. Касательно утановки больших оборудования пользователь надо подсоединиться с профессиональному консультантом или же осмотреть осуществляемые обслуживание непосредственно на портале холдинга <a href=http://tehnikstroy.ru/oborudovanie/gruzopodemnoe-stroitelnoe-oborudovanie/vynosnaya-ploshhadka-k-1>выносные площадки</a>, в доступном меню мы производим строевые, крупные, грузопассажирскиегрузовые устройства, производство установки и демонтажа, полное обслуживание, фасадные оборудование собственно для ремонта также жилья, крамбола, установки под ливерных пунктов и истребления воды, бетоносмесители и растворные бетононасосы. Наша компания создаем безупречную регулировку возвышенных машин ото пятьсот до тысячу кг в любом регионе государства, и выполняем приготовление http://tehnikstroy.ru/ снабжения всякой конфигурации. Взять погрузочные машины в аренду, поручить приготовление либо отпустить на готовом проекции Вы можете доступно на сайте организации.
      Ответить
    • rss fixed for http://govnokod.ru/13074
      Ответить

    Добавить комментарий