Я создаю XSS-сканер, теперь хочу узнать местоположение вывода строки.
Возможно,
<h2>string</h2>
<h2 class=string></h2>
Теперь мне нужно знать, в каком случае он принадлежит. Если я просмотрю все теги и все их атрибуты, это будет болезненно медленным, поэтому мне нужен более быстрый способ.
Любое предложение? Запуск perl
string
PS тщательно обработана, что не повредит HTML-структуре нигде.
Я не уверен, понимаю ли я вашу проблему, но вот моя попытка ответить. Этот код проверяет, является ли $string
единственной вещью в атрибуте/теге, например <h2>string</h2>
а не <h2>hello string</h2>
.
print "String '$string' found between HTML tags.\n" if ($file =~ /<(\w+).*?>$string<\/\1>/);
print "String '$string' found in HTML attribute.\n" if ($file =~ /<\w+ (?:.+? )?\w+="$string"(?: .+?)?>/);
Обратите внимание, что в обоих случаях произойдет сбой при print
, например, <h2 class=string>string</h2>
. Если вам нужно объяснение того, что делают регулярные выражения, прокомментируйте, и я отредактирую свой ответ. Предполагается, что весь файл HTML находится в $file
а строка - в $string
. Первое может быть достигнуто с чем-то вроде этого:
$FILE = 'C:/path/to/file.html';
open FILE or die "Cannot open $FILE for read: $!";
while (<FILE>) {
$file .= $_;
}
close FILE;
string
внутри файла HTML? Почему бы не использоватьgrep
илиsed
?