Web Application Firewall (WAF) Custom Rule Set Generator
Define security rules, priorities, and actions to generate a structured WAF policy for your application.
WAF POLICY EXPORT
Policy: | Default Action:
Generated Rule Set (JSON/Pseudo-Code)
// Configure rules in the Builder tab to see the generated JSON structure.
Policy Summary
Policy Name:
Default Action:
Total Custom Rules:
0
Block Rules:
0
Count Rules:
0
*Rules are evaluated by Priority (lowest number first).
Add New Rule
Current Custom Rules (0)
WAF Policy Configuration
No rules defined yet.
'; } customRules.forEach(rule => { const ruleDiv = document.createElement('div'); ruleDiv.className = 'waf-rule-entry'; const content = ` P${rule.priority} | ${rule.action} ${rule.name} Match: ${rule.matchType} on ${rule.target} (${rule.pattern}) `; ruleDiv.innerHTML = content; container.appendChild(ruleDiv); }); document.getElementById('current-rule-count').innerText = customRules.length; } function wafUpdateDashboard() { const policyName = document.getElementById('inp-policy-name').value || 'WAF-Policy-01'; const defaultAction = document.getElementById('inp-default-action').value || 'Allow'; // 1. Build JSON/Pseudo-code let ruleJson = { PolicyName: policyName, DefaultAction: defaultAction, Rules: [] }; let blockCount = 0; let countCount = 0; customRules.sort((a, b) => a.priority - b.priority); ruleJson.Rules = customRules.map(rule => { const ruleData = { Name: rule.name, Priority: rule.priority, Action: rule.action, Statement: { Type: rule.matchType, Target: rule.target, } }; if (rule.matchType !== 'SQL_INJECTION' && rule.matchType !== 'XSS') { ruleData.Statement.Pattern = rule.pattern; } else { ruleData.Statement.Sensitivity = "High"; } if (rule.action === 'Block') blockCount++; if (rule.action === 'Count') countCount++; return ruleData; }); // 2. Output document.getElementById('out-code').innerText = JSON.stringify(ruleJson, null, 2); // 3. Update Stats document.getElementById('out-policy-name').innerText = policyName; document.getElementById('out-default-action').innerText = defaultAction; document.getElementById('out-rule-count').innerText = customRules.length; document.getElementById('out-block-count').innerText = blockCount; document.getElementById('out-count-count').innerText = countCount; document.getElementById('out-pdf-policy').innerText = policyName; document.getElementById('out-pdf-default-action').innerText = defaultAction; } function wafDownloadPDF() { const element = document.getElementById('waf-print-area'); // Show PDF header and hide controls const headers = element.querySelectorAll('.pdf-header'); headers.forEach(h => h.style.display = 'block'); const controls = element.querySelectorAll('.pdf-hide'); controls.forEach(c => c.style.display = 'none'); // Ensure code block is readable in PDF const codeOutput = document.getElementById('out-code'); codeOutput.style.backgroundColor = '#fff'; codeOutput.style.color = '#1f2937'; const opt = { margin: 0.5, filename: `${document.getElementById('inp-policy-name').value.replace(/\s/g, '_')}_Rule_Set.pdf`, image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2 }, jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } }; html2pdf().set(opt).from(element).save().then(function() { // Revert changes after download headers.forEach(h => h.style.display = 'none'); controls.forEach(c => c.style.display = 'flex'); codeOutput.style.backgroundColor = '#1e1e1e'; codeOutput.style.color = '#d4d4d4'; // Re-show button container that was hidden by pdf-hide class document.querySelector('.waf-btn-container').style.display = 'flex'; }); }