确定HTML中字符串输出位置的最佳算法是什么?

时间:2013-10-20 15:28:29

标签: html perl html-parsing

我正在创建一个XSS扫描程序,现在我想知道字符串的输出位置。

可能是,

  • 在HTML标记之间,例如<h2>string</h2>
  • 标记的属性,例如<h2 class=string></h2>

现在我需要知道它属于哪种情况。如果我浏览所有标签及其所有属性,那将会非常缓慢,所以我需要更快的方式。

有什么建议吗?运行perl

P.S string经过精心设计,不会破坏任何地方的HTML结构。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但这是我尝试回答的问题。 此代码检查$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;