Защита от внедрения скрипта с помощью уценки - PullRequest
1 голос
/ 23 декабря 2010

Я хочу защитить свою страницу, когда пользователь вводит следующее:

<script type="text/javascript">
    alert("hi");
</script>

Я использую ShowDown:

jQuery.fn.markDown = function() 
{
    return this.each(function() {
        var caller = this;
        var converter = new Showdown.converter();

        var text = $(caller).text();
        var html = converter.makeHtml(text);

        $(caller).html(html);
    });
}

Ответы [ 4 ]

3 голосов
/ 24 декабря 2010

Если вы хотите обезопасить html в серверном коде .NET, я бы посоветовал вам использовать библиотеку веб-защиты Microsoft после преобразования разметки в html перед ее отображением на странице. например следующий фрагмент:

x = @"<div>safe</div>
       <script type='text/javascript'>
         alert('hi');
       </script>";
return Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(x);

возвращает <div>safe</div>

http://wpl.codeplex.com/

1 голос
/ 23 декабря 2010

На странице ShowDown отсутствует любой javascript, поэтому я не знаю, что именно вы имеете в виду.Но вы не можете сделать это на клиенте.Если это никогда не будет отправлено на сервер, то это не имеет значения.Тем не менее, в 99% случаев вы хотите сохранить его на сервере.

Я думаю, что лучший подход - это создать объект DOM на стороне сервера из отправляемого html (который может быть подделан и обойденShowDown) и ищите любой скрипт или другие опасные теги.Это не так просто!

Лучший компромисс для меня - это использовать язык разметки на стороне сервера (например, https://github.com/charliesome/bbsharp), который вы затем можете использовать для генерации HTML. Затем HTML закодирует любой HTMLперед передачей его в инструмент, который преобразует уценку в HTML.

1 голос
/ 23 декабря 2010

Одним из решений, которое могло бы быть эффективным, было бы удалить весь тег в источнике или кодировать его в HTML-коде перед тем, как его преобразовать с помощью Showdown.пара способов сделать это, которые вы можете найти в этом вопросе:

Убрать HTML из текста JavaScript

Для того, как HTML кодировать тег, вы можете использовать это:

myString.replace(/</g, '&lt;').replace(/>/g, '&gt;');

Примечание. Это лишит вас возможности использовать HTML в Showdown.

0 голосов
/ 23 декабря 2010

Я использую HTML Purifier , который очень хорошо работает для фильтрации пользовательского ввода и имеет широкие возможности настройки.

Я предполагаю, что вы можете использовать его с MarkDown, хотя я никогда не пробовал.

...