33 lines
2.1 KiB
JavaScript
33 lines
2.1 KiB
JavaScript
'use strict';
|
|
const assert=require('assert/strict');
|
|
const fs=require('fs');
|
|
const os=require('os');
|
|
const path=require('path');
|
|
const {spawnSync}=require('child_process');
|
|
|
|
if(process.platform!=='win32'){
|
|
console.log('Windows host-hardening smoke test skipped on this platform');
|
|
process.exit(0);
|
|
}
|
|
|
|
const root=fs.mkdtempSync(path.join(os.tmpdir(),'linkfield-host-hardening-'));
|
|
try{
|
|
const apacheRoot=path.join(root,'Apache24'),apacheConfig=path.join(apacheRoot,'conf','httpd.conf'),phpIni=path.join(root,'php.ini');
|
|
fs.mkdirSync(path.dirname(apacheConfig),{recursive:true});
|
|
fs.writeFileSync(apacheConfig,'Listen 80\nServerSignature On\n');
|
|
fs.writeFileSync(phpIni,'expose_php = On\n');
|
|
const script=path.join(__dirname,'..','scripts','harden-windows-host.ps1');
|
|
const args=['-NoProfile','-NonInteractive','-ExecutionPolicy','Bypass','-File',script,'-ApacheConfig',apacheConfig,'-PhpIni',phpIni,'-Apply','-SkipApacheSyntaxCheck'];
|
|
const first=spawnSync('powershell.exe',args,{encoding:'utf8'});assert.equal(first.status,0,first.stderr||first.stdout);
|
|
const apache=fs.readFileSync(apacheConfig,'utf8'),php=fs.readFileSync(phpIni,'utf8');
|
|
assert.match(apache,/BEGIN LINKFIELD HOST HARDENING[\s\S]*ServerTokens Prod[\s\S]*ServerSignature Off/);
|
|
assert.match(php,/BEGIN LINKFIELD HOST HARDENING[\s\S]*expose_php = Off/);
|
|
assert.equal((apache.match(/BEGIN LINKFIELD HOST HARDENING/g)||[]).length,1);
|
|
assert.equal((php.match(/BEGIN LINKFIELD HOST HARDENING/g)||[]).length,1);
|
|
assert(fs.readdirSync(path.dirname(apacheConfig)).some(name=>name.startsWith('httpd.conf.linkfield-backup-')));
|
|
assert(fs.readdirSync(root).some(name=>name.startsWith('php.ini.linkfield-backup-')));
|
|
const second=spawnSync('powershell.exe',args,{encoding:'utf8'});assert.equal(second.status,0,second.stderr||second.stdout);
|
|
assert.equal((fs.readFileSync(apacheConfig,'utf8').match(/BEGIN LINKFIELD HOST HARDENING/g)||[]).length,1);
|
|
assert.equal((fs.readFileSync(phpIni,'utf8').match(/BEGIN LINKFIELD HOST HARDENING/g)||[]).length,1);
|
|
}finally{fs.rmSync(root,{recursive:true,force:true})}
|
|
console.log('Windows Apache/PHP host hardening smoke test passed');
|