Files
portal/tools/powershell-destructive.mjs
T
Дмитрий 91af38ca11 feat(m7-floor): powershell-destructive psContentBlock (V1-PS)
Task 1.2 Фазы 1 М7. Новый модуль tools/powershell-destructive.mjs — psContentBlock
для PowerShell-tool (PS-нативные глаголы Remove-Item/-Recurse/iwr/iex/Start-Process/
Out-File/redirect НЕ матчат unix-regex classify-destructive). Реоткрытие v3.8 F1:
PowerShell-tool был полностью вне scope content-floor. 16 GREEN.
2026-06-08 08:55:30 +03:00

21 lines
1.3 KiB
JavaScript

#!/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));
}