Использование Powershell v1 для удаления скрипта с веб-страниц - PullRequest
0 голосов
/ 18 августа 2011

Мой сайт был взломан, в результате чего на некоторых страницах был добавлен скрипт (я думаю, vbScript) перед тегом / body. Я могу выбрать все страницы, на которые настроен таргетинг, используя

$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}

Заранее спасибо,

Эрик Ф

1 Ответ

1 голос
/ 18 августа 2011

Отказ от ответственности: Regex не является анализатором HTML.Вы столкнетесь с угловыми случаями.

Теги сценария, вероятно, многострочные, поэтому вы хотите:

1) Получить все строки файла (get-content и передать его так, как у вас)done будет обрабатывать только построчно)

2) Использовать регулярное выражение, которое может заменить / обработать несколько строк (используемое регулярное выражение будет выглядеть только в одной строке)

ТакВы можете попробовать что-то вроде ниже для получения контента и замены тегов:

$content = [System.IO.File]::ReadAllText($f)
$content -replace "(?s)<script>.+?</script>","" | out-file $f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...