Лучший regex для ловли XSS (Сценарии перекрестного сайта) нападение (в Java)?

Angular4

Вместо

    this.renderer.invokeElementMethod(
        this.fileInput.nativeElement, 'dispatchEvent', [event]);

используйте

    this.fileInput.nativeElement.dispatchEvent(event);

, потому что invokeElementMethod больше не будет частью рендеринга.

Angular2

Используйте ViewChild с переменной шаблона, чтобы получить ссылку на ввод файла, затем используйте Renderer , чтобы вызвать dispatchEvent, чтобы запустить событие:

import { Component, Renderer, ElementRef, ViewChild } from '@angular/core';
@Component({
  ...
  template: `
...

...`
})
class MyComponent {
  @ViewChild('fileInput') fileInput:ElementRef;

  constructor(private renderer:Renderer) {}

  showImageBrowseDlg() {
    // from http://stackoverflow.com/a/32010791/217408
    let event = new MouseEvent('click', {bubbles: true});
    this.renderer.invokeElementMethod(
        this.fileInput.nativeElement, 'dispatchEvent', [event]);
  }
}

Обновить

Поскольку прямой доступ DOM больше не обескуражен командой Angular, этот простой код также может использоваться

this.fileInput.nativeElement.click()

См. также https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent

23
задан Jonathan Leffler 14 May 2017 в 05:52
поделиться

6 ответов

Не делайте этого с регулярными выражениями. Помните, Вы не защищаете только от допустимого HTML; Вы защищаете от DOM, который создают веб-браузеры. Браузеры могут быть обмануты в создание допустимого DOM от недопустимого HTML довольно легко.

, Например, см. этот список запутываемые нападения на XSS . Вы готовы адаптировать regex для предотвращения этого нападения реального мира на Yahoo и Hotmail на IE6/7/8?

<HTML><BODY>
<?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time">
<?import namespace="t" implementation="#default#time2">
<t:set attributeName="innerHTML" to="XSS&lt;SCRIPT DEFER&gt;alert(&quot;XSS&quot;)&lt;/SCRIPT&gt;">
</BODY></HTML>

Как насчет этого нападения, которое работает над IE6?

<TABLE BACKGROUND="javascript:alert('XSS')">

Как насчет нападений, которые не перечислены на этом сайте? Проблема с подходом Jeff состоит в том, что это не белый список, как требуется. Как кто-то на , что страница умело отмечает:

проблема с ним, то, что HTML должен быть чистым. Существуют случаи, куда можно передать во взломанном HTML, и он не будет соответствовать ему, в этом случае он возвратит взломанную строку HTML, поскольку он не будет соответствовать ничему для замены. Это строго не добавляет в белый список.

я предположил бы, что цель создала инструмент как AntiSamy. Это работает путем фактического парсинга HTML, и затем пересечения DOM и удаления чего-либо, что это не находится в настраивающееся белый список. Существенным различием является способность корректно обработать уродливый HTML.

большая часть - то, что это на самом деле модульные тесты на весь XSS нападает на вышеупомянутом сайте. Кроме того, что могло быть легче, чем этот вызов API:

public String toSafeHtml(String html) throws ScanException, PolicyException {

    Policy policy = Policy.getInstance(POLICY_FILE);
    AntiSamy antiSamy = new AntiSamy();
    CleanResults cleanResults = antiSamy.scan(html, policy);
    return cleanResults.getCleanHTML().trim();
}
69
ответ дан Chase Seibert 29 November 2019 в 00:49
поделиться

Я не к убежденному, что использование регулярного выражения является лучшим способом для нахождения всего подозрительного кода. Регулярные выражения довольно легко обмануть особенно при контакте с поврежденным HTML. Например, регулярное выражение, перечисленное в Санировать ссылке HTML, не удалит все элементы, которые имеют атрибут между именем элемента и атрибут 'href':

< высокий звук = "xss инжекция" href = "http://www.malicous.com/bad.php">

А, больше устойчивого способа удалить вредоносный код состоит в том, чтобы полагаться на Синтаксический анализатор XML, который может обработать весь вид документов HTML (Опрятный, TagSoup, и т.д.) и выбрать элементы для удаления с выражением XPath. После того как документ HTML анализируется в документ DOM, которым элементы к revome могут быть найдены легко и безопасно. Это даже легко сделать с XSLT.

4
ответ дан potyl 29 November 2019 в 00:49
поделиться

Самая большая проблема при помощи кода jeffs, который в настоящее время не доступен.

я, вероятно, просто взял бы "сырые данные" regexp от кода jeffs, если бы мне был нужен он, и вставьте его в

http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

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

<час>

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

(Довольно разумный совет Thats propbably для любого скопировать/вставить)

0
ответ дан svrist 29 November 2019 в 00:49
поделиться

[\s\w\.]*. Если это не соответствует, у Вас есть XSS. Возможно. Обратите внимание, что это выражение только позволяет буквы, числа, и периоды. Это избегает всех символов, даже полезных, из страха перед XSS. После того как Вы позволяете & у Вас есть заботы. И просто заменяя все экземпляры & с &amp; не достаточно. Слишком сложный для доверия :P. Очевидно, это запретит много законного текста (Можно просто заменить все символы несоответствия a! или что-то), но я думаю, что это уничтожит XSS.

идея просто проанализировать его, поскольку HTML и генерировать новый HTML, вероятно, лучше.

0
ответ дан Brian 29 November 2019 в 00:49
поделиться
^(\s|\w|\d|<br>)*?$ 

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

^(\s|\w|\d|<br>|<ul>|<\ul>)*?$
1
ответ дан 29 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

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