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
Не делайте этого с регулярными выражениями. Помните, Вы не защищаете только от допустимого 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<SCRIPT DEFER>alert("XSS")</SCRIPT>">
</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();
}
Открытый проект безопасности веб-приложения (OWASP) имеют некоторых предложение для очистки Вашего входа. Посмотрите, например:
Я не к убежденному, что использование регулярного выражения является лучшим способом для нахождения всего подозрительного кода. Регулярные выражения довольно легко обмануть особенно при контакте с поврежденным HTML. Например, регулярное выражение, перечисленное в Санировать ссылке HTML, не удалит все элементы, которые имеют атрибут между именем элемента и атрибут 'href':
< высокий звук = "xss инжекция" href = "http://www.malicous.com/bad.php">
А, больше устойчивого способа удалить вредоносный код состоит в том, чтобы полагаться на Синтаксический анализатор XML, который может обработать весь вид документов HTML (Опрятный, TagSoup, и т.д.) и выбрать элементы для удаления с выражением XPath. После того как документ HTML анализируется в документ DOM, которым элементы к revome могут быть найдены легко и безопасно. Это даже легко сделать с XSLT.
Самая большая проблема при помощи кода jeffs, который в настоящее время не доступен.
я, вероятно, просто взял бы "сырые данные" regexp от кода jeffs, если бы мне был нужен он, и вставьте его в
http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html
и посмотрите, что вещей должным быть выйти оставляют, и затем используйте его.
<час>Взятие использования этого regex в памяти я лично удостоверился бы, что понял точно, что я делал, почему и чем были бы последствия то, если бы я не успешно выполнялся, перед копией/вставкой что-либо, как другие ответы пытается помочь Вам с.
(Довольно разумный совет Thats propbably для любого скопировать/вставить)
[\s\w\.]*
. Если это не соответствует, у Вас есть XSS. Возможно. Обратите внимание, что это выражение только позволяет буквы, числа, и периоды. Это избегает всех символов, даже полезных, из страха перед XSS. После того как Вы позволяете & у Вас есть заботы. И просто заменяя все экземпляры & с &
не достаточно. Слишком сложный для доверия :P. Очевидно, это запретит много законного текста (Можно просто заменить все символы несоответствия a! или что-то), но я думаю, что это уничтожит XSS.
идея просто проанализировать его, поскольку HTML и генерировать новый HTML, вероятно, лучше.
^(\s|\w|\d|<br>)*?$
Это будет проверять символы, цифры, пробелы, а также тег
.
Если вы хотите повысить риск, вы можете добавить больше тегов, например
^(\s|\w|\d|<br>|<ul>|<\ul>)*?$