91af38ca11
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.
21 lines
1.3 KiB
JavaScript
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));
|
|
}
|