Метки Stop Script, но разрешить другим [дублировать]

Ниже приведен фрагмент кода, показывающий, как отображать n цифр. Фокус в том, чтобы установить переменную pp в 1, за которой следуют n нулей. В приведенном ниже примере значение переменной pp имеет 5 нулей, поэтому будут отображаться 5 цифр.

double pp = 10000;

double myVal = 22.268699999999967;
String needVal = "22.2687";

double i = (5.0/pp);

String format = "%10.4f";
String getVal = String.format(format,(Math.round((myVal +i)*pp)/pp)-i).trim();
3
задан JasonDavis 4 September 2009 в 02:37
поделиться

7 ответов

HTML Purifier - это стандартная библиотека фильтров HTML, написанная на PHP. HTML-очиститель не только удалит весь вредоносный код (более известный как XSS) с тщательно проверенным, безопасным, но и разрешенным белым списком, он также гарантирует, что ваши документы соответствуют стандартам, что только достижимо с полным знанием спецификаций W3C.

13
ответ дан raspi 21 August 2018 в 12:23
поделиться
  • 1
    Используя php, это действительно путь. Это результат потрясающий и безопасный. – DGM 4 September 2009 в 05:01
  • 2
    Я видел это прежде, чем я подумал, что это действительно громоздко, но я снова проверю его, спасибо – JasonDavis 4 September 2009 в 15:27
  • 3
    Взломать то, что мне нужно, и искать около получаса, пока я не наткнулся на ваш пост! :-) Спасибо – Liam Wheldon 9 August 2017 в 11:05

Для тех из вас, кто предлагает просто использовать strip_tags ... помните: strip_tags НЕ будет вырезать атрибуты тегов, а сломанные теги также испортят его.

Из руководства page:

Предупреждение. Поскольку strip_tags () фактически не проверяет HTML, частичные или сломанные теги, это может привести к удалению большего количества текста / данных, чем ожидалось.

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

Вы НЕ МОЖЕТЕ полагаться только на это решение.

1
ответ дан Alt-Rock Ninja Cowgirl 21 August 2018 в 12:23
поделиться

Возможно, более безопасно использовать DOMDocument для его правильного анализа, удалить запрещенные теги с помощью removeChild (), а затем получить результат. Не всегда безопасно фильтровать материал с помощью регулярных выражений, особенно если вещи начинают приобретать такую ​​сложность. Хакеры могут найти способ обмануть ваши фильтры, форумы и социальные сети. Это хорошо известно.

Например, браузеры игнорируют пробелы после & lt ;. Ваш фильтр регулярного выражения & lt; script, но если я использую & lt; скрипт ... большой FAIL!

8
ответ дан Havenard 21 August 2018 в 12:23
поделиться

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

function sanitize($html) {
  $whitelist = array(
    'b', 'i', 'u', 'strong', 'em', 'a'
  );

  return preg_replace("/<(^".implode("|", $whitelist).")(.*)>(.*)<\/(^".implode("|", $whitelist).")>/", "", $html);
}

Я не тестировал это, и там, вероятно, есть ошибка где-то, но вы получаете суть того, как это работает. Вы также можете посмотреть на язык форматирования, такой как Textile или Markdown.

Jamie

-1
ответ дан Jamie Rumbelow 21 August 2018 в 12:23
поделиться

Вы можете просто использовать функцию strip_tags ()

Поскольку функция определена как

string strip_tags  ( string $str  [, string $allowable_tags  ] )

Вы можете сделать это:

$html = $_POST['content'];
$html = strip_tags($html, '<b><a><i><u><span>');

Но обратите внимание, что с помощью strip_tags вы не сможете отфильтровать атрибуты. например,

<a href="javascript:alert('haha caught cha!');">link</a>
0
ответ дан mauris 21 August 2018 в 12:23
поделиться

HTML очиститель - лучший анализатор / очиститель HTML.

3
ответ дан MiffTheFox 21 August 2018 в 12:23
поделиться

Попробуйте эту функцию «getCleanHTML» ниже, извлеките текстовое содержимое из элементов с исключениями элементов с именем тега в белом списке. Этот код чист и понятен и отлажен.

<?php

$TagWhiteList = array(
    'b', 'i', 'u', 'strong', 'em', 'a', 'img'
);

function getHTMLCode($Node) {
    $Document = new DOMDocument();    
    $Document->appendChild($Document->importNode($Node, true));
    return $Document->saveHTML();
}
function getCleanHTML($Node, $Text = "") {
    global $TagWhiteList;

    $TextName = $Node->tagName;
    if ($TextName == null)
        return $Text.$Node->textContent;

    if (in_array($TextName, $TagWhiteList)) 
        return $Text.getHTMLCode($Node);

    $Node = $Node->firstChild;
    if ($Node != null)
        $Text = getCleanHTML($Node, $Text);

    while($Node->nextSibling != null) {
        $Text = getCleanHTML($Node->nextSibling, $Text);
        $Node = $Node->nextSibling;
    }
    return $Text;
}

$Doc = new DOMDocument();
$Doc->loadHTMLFile("Test.html");
echo getCleanHTML($Doc->documentElement)."\n";

?>

Надеюсь, это поможет.

0
ответ дан NawaMan 21 August 2018 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: