使用Powershell v1从网页中删除脚本

时间:2011-08-17 21:47:04

标签: regex powershell

我的网站遭到黑客攻击,其效果是在某些网页上的/ 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

1 个答案:

答案 0 :(得分:1)

免责声明:Regex不是HTML解析器。你会遇到极端情况。

脚本标记可能是多行的,因此您需要:

1)获取文件的所有行(get-content并像你所做的那样管道只会逐行处理)

2)使用可以替换/处理多行的正则表达式(您使用的正则表达式只能在一行中查看)

因此,您可以尝试以下内容来获取内容并替换标记:

$content = [System.IO.File]::ReadAllText($f)
$content -replace "(?s)<script>.+?</script>","" | out-file $f