2011-08-17 37 views
0

我的网站已被黑客入侵,其效果是在某些页面的/ body标记之前添加了一个脚本(我认为是vbScript)。我可以选择所有使用的目标页面使用Powershell v1从网页中删除脚本

$files=get-childitem . -recurse -include $a | where {$_.LastWriteTime -gt 
[datetime]::parse("08/14/2011")} 

其中$ a是文件规格的数组。我想通过get-content | -replace | set-content管道运行这些文件中的每一个,但我无法获得正确的替换参数。基本上,我想用空格或HTML注释替换和标签之间的所有内容,包括标签。我敢肯定,这可以用正则表达式来解决,但我只是无法得到它的权利 - 是这样的:提前

foreach ($f in $files) 
{(get-content $f)|foreach-object {$_ -replace "<script>\w+</script>","<!--Script Replaced-->"}|set-content $f} 

感谢,

埃里克˚F

+0

预防未来的措施,维护多个备份(并保留其中的许多备份)。如果您的网站不复杂,另一个简单的选择是将这些备份签入某种源代码管理。然后你可以看到变化发生的时间和变化。此外,您可以删除这些修改,同时保留以后可能发生的良好更改。 – JasonMArcher

回答

1

免责声明:正则表达式是不是HTML解析器。你会遇到角落案件。

脚本标记可能多,所以要:

1)获取该文件的所有行(get-content和管道像你这样做只会工艺生产线,由线)

2)使用正则表达式,可以替换/过程在多个行(你已经使用将只有一个行内看)

所以,你可以尝试像下面获取内容和更换标签的正则表达式:

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