2011-08-17 35 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