我的网站遭到黑客攻击,其效果是在某些网页上的/ body标记之前添加了一个脚本(我认为是vbScript)。我可以使用
选择所有目标页面$files=get-childitem . -recurse -include $a | where {$_.LastWriteTime -gt
[datetime]::parse("08/14/2011")}
其中$ a是文件规范的数组。我想通过get-content | -replace | set-content管道运行这些文件中的每一个,但我无法正确获取-replace参数。基本上,我想用空格或HTML注释替换和标签之间的所有内容,包括标签。我很确定这可以通过正则表达式解决,但我无法正确使用它 - 例如:
foreach ($f in $files)
{(get-content $f)|foreach-object {$_ -replace "<script>\w+</script>","<!--Script Replaced-->"}|set-content $f}
提前致谢,
Eric F
答案 0 :(得分:1)
免责声明:Regex不是HTML解析器。你会遇到极端情况。
脚本标记可能是多行的,因此您需要:
1)获取文件的所有行(get-content
并像你所做的那样管道只会逐行处理)
2)使用可以替换/处理多行的正则表达式(您使用的正则表达式只能在一行中查看)
因此,您可以尝试以下内容来获取内容并替换标记:
$content = [System.IO.File]::ReadAllText($f)
$content -replace "(?s)<script>.+?</script>","" | out-file $f