Упаковка в тег привязки без html-инъекции 2.5 M - PullRequest
2 голосов
/ 10 января 2012

Как я могу предотвратить проблему внедрения html в моем коде.

У меня есть функция для обёртывания всех гиперссылок в строке для привязки.Итак, у меня есть это

@Html.Raw(Helpers.UtilHelpers.ReplaceLinks(Model.Texts[index].Content))

Как я могу сделать это без этого опасного трюка?Потому что таким образом, пользователь может делать html-инъекцию.

Моя функция ReplaceLinks заменяет все гиперссылки, такие как http://www.google.com на <a href="google.com">http://www.google.com</a>, поэтому я хочу показать эту строку как гиперссылку, а не как текст.Но я хочу показывать только эти теги, сгенерированные моей функцией.

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Использовать Server.HtmlEncode: http://msdn.microsoft.com/en-us/library/ms525347(v=vs.90).aspx

Если текст содержит html, он будет отображаться в кодировке.

Редактировать: добавлено в качестве помощника (метод расширения)

public static class HtmlUrlExtension
{
    public static string RawUrl( this HtmlHelper html, string url )
    {
         return html.Raw(HttpServerUtility.HtmlEncode(url));
    }
}

И используйте это:

@Html.RawUrl(Model.Texts[index].Content)
0 голосов
/ 10 января 2012

в вашей функции замены добавьте диапазон с пользовательским классом CSS, а затем добавьте в стиль свои ссылки этот

<span class="myLinkClass" url-data="......">fooo</span>

Таким образом, только ваши ссылки будут управляться с помощью следующей магии jQuery.

Для доступа ко всей вашей подделке <a href /> вы можете использовать простой селектор jQuery (для материалов на стороне клиента)

$("span.myLinkClass").each(new function() { 
   $(this).click(function () {
      location.href = $(this).attr("url-data");
   });
});

и, конечно, вы можете использовать стиль

.myLinkClass { color: yellow; }
0 голосов
/ 10 января 2012

Вы можете использовать библиотеку AntiXSS , которая позволяет фильтровать опасные теги и сценарии и безопасно отображать введенную пользователем строку HTML без ее кодирования.

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