Files
portal/tools/powershell-destructive.mjs
T

21 lines
1.3 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
/**
* powershell-destructive — content-block для PowerShell-tool (V1-PS, правило 8 §4.1).
* PS-нативные глаголы НЕ матчат unix-regex classify-destructive → отдельный набор.
* Дополняет несущий пол: floor-decide зовёт это для name==='PowerShell' (Task 1.4).
* Реоткрытие v3.8 F1: PowerShell-tool был полностью вне scope content-floor.
*/
const PS_CONTENT_BLOCK_RE = [
/\bRemove-Item\b[^\n]*-(?:Recurse|Force)\b/i, // рекурсивное/форс-удаление
/\brm\b[^\n]*-[a-z]*r[a-z]*\s[^\n]*-[a-z]*f/i, // PS-алиас rm -r -fo
/\b(?:Invoke-WebRequest|iwr|curl|wget|Invoke-RestMethod|irm)\b/i, // egress
/\b(?:Invoke-Expression|iex)\b/i, // произвольное исполнение
/\bStart-Process\b/i, // запуск интерпретатора/процесса
/\bOut-File\b/i, // запись в файл
/(?:^|[^0-9>&])>{1,2}(?![>&])/, // redirect >/>>
];
export function psContentBlock(command) {
const cmd = String(command || '');
return PS_CONTENT_BLOCK_RE.some((re) => re.test(cmd));
}