mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-11 03:25:54 +02:00
ids.cgi: Rework code for displaying the single rules
The complete ruleset will be grouped as categories by it's corresponding rulefile and printed in hidden tables. They easiely can be displayed by klicking on the show link and vice-versa. Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
This commit is contained in:
@@ -204,7 +204,18 @@ $selected{'RULES'}{$snortsettings{'RULES'}} = "selected='selected'";
|
|||||||
|
|
||||||
&Header::openpage($Lang::tr{'intrusion detection system'}, 1, '');
|
&Header::openpage($Lang::tr{'intrusion detection system'}, 1, '');
|
||||||
|
|
||||||
print "<script type='text/javascript' src='/include/snortupdateutility.js'></script>";
|
### Java Script ###
|
||||||
|
print <<END
|
||||||
|
<script>
|
||||||
|
// Tiny java script function to show/hide the rules
|
||||||
|
// of a given category.
|
||||||
|
function showhide(tblname) {
|
||||||
|
\$("#" + tblname).toggle();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
END
|
||||||
|
;
|
||||||
|
|
||||||
print <<END
|
print <<END
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
<!--
|
<!--
|
||||||
@@ -353,150 +364,102 @@ if ($results ne '') {
|
|||||||
|
|
||||||
&Header::openbox('100%', 'LEFT', $Lang::tr{'intrusion detection system rules'});
|
&Header::openbox('100%', 'LEFT', $Lang::tr{'intrusion detection system rules'});
|
||||||
# Output display table for rule files
|
# Output display table for rule files
|
||||||
print "<table width='100%'><tr><td valign='top'><table>";
|
print "<table width='100%'>\n";
|
||||||
|
|
||||||
print "<form method='post'>";
|
# Local variable required for java script to show/hide
|
||||||
|
# rules of a rulefile.
|
||||||
# Local vars
|
my $rulesetcount = 1;
|
||||||
my $ruledisplaycnt = 1;
|
|
||||||
my $rulecnt = keys %snortrules;
|
|
||||||
$rulecnt++;
|
|
||||||
$rulecnt = $rulecnt / 2;
|
|
||||||
|
|
||||||
# Loop over each rule file
|
# Loop over each rule file
|
||||||
foreach my $rulefile (sort keys(%snortrules)) {
|
foreach my $rulefile (sort keys(%snortrules)) {
|
||||||
my $rulechecked = '';
|
my $rulechecked = '';
|
||||||
|
|
||||||
# Hide inkompatible Block rules
|
|
||||||
if ($rulefile =~'-BLOCK.rules') {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if reached half-way through rule file rules to start new column
|
|
||||||
if ($ruledisplaycnt > $rulecnt) {
|
|
||||||
print "</table></td><td valign='top'><table>";
|
|
||||||
$ruledisplaycnt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if rule file is enabled
|
# Check if rule file is enabled
|
||||||
if ($snortrules{$rulefile}{"State"} eq 'Enabled') {
|
if ($snortrules{$rulefile}{"State"} eq 'Enabled') {
|
||||||
$rulechecked = 'CHECKED';
|
$rulechecked = 'CHECKED';
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create rule file link, vars array, and display flag
|
# Table and rows for the rule files.
|
||||||
my $rulefilelink = "?RULEFILE=$rulefile";
|
print"<tr>\n";
|
||||||
my $rulefiletoclose = '';
|
print"<td class='base' width='5%'>\n";
|
||||||
my @queryvars = ();
|
print"<input type='checkbox' name='SNORT_RULE_$rulefile' $rulechecked>\n";
|
||||||
my $displayrulefilerules = 0;
|
print"</td>\n";
|
||||||
|
print"<td class='base' width='90%'><b>$rulefile</b></td>\n";
|
||||||
|
print"<td class='base' width='5%' align='right'>\n";
|
||||||
|
print"<a href=\"javascript:showhide('ruleset$rulesetcount')\">SHOW</a>\n";
|
||||||
|
print"</td>\n";
|
||||||
|
print"</tr>\n";
|
||||||
|
|
||||||
# Check for passed in query string
|
# Rows which will be hidden per default and will contain the single rules.
|
||||||
if ($ENV{'QUERY_STRING'}) {
|
print"<tr style='display:none' id='ruleset$rulesetcount'>\n";
|
||||||
# Split out vars
|
print"<td colspan='3'>\n";
|
||||||
@queryvars = split(/\&/, $ENV{'QUERY_STRING'});
|
|
||||||
|
|
||||||
# Loop over values
|
# Local vars
|
||||||
foreach $value (@queryvars) {
|
my $lines;
|
||||||
# Split out var pairs
|
my $rows;
|
||||||
($var, $linkedrulefile) = split(/=/, $value);
|
my $col;
|
||||||
|
|
||||||
# Check if var is 'RULEFILE'
|
# New table for the single rules.
|
||||||
if ($var eq 'RULEFILE') {
|
print "<table width='100%'>\n";
|
||||||
# Check if rulefile equals linkedrulefile
|
|
||||||
if ($rulefile eq $linkedrulefile) {
|
|
||||||
# Set display flag
|
|
||||||
$displayrulefilerules = 1;
|
|
||||||
|
|
||||||
# Strip out rulefile from rulefilelink
|
|
||||||
$rulefilelink =~ s/RULEFILE=$linkedrulefile//g;
|
|
||||||
} else {
|
|
||||||
# Add linked rule file to rulefilelink
|
|
||||||
$rulefilelink .= "&RULEFILE=$linkedrulefile";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Strip out extra & & ? from rulefilelink
|
|
||||||
$rulefilelink =~ s/^\?\&/\?/i;
|
|
||||||
|
|
||||||
# Check for a single '?' and replace with page for proper link display
|
|
||||||
if ($rulefilelink eq '?') {
|
|
||||||
$rulefilelink = "ids.cgi";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Output rule file name and checkbox
|
|
||||||
print "<tr><td class='base' valign='top'><input type='checkbox' NAME='SNORT_RULE_$rulefile' $rulechecked> <a href='$rulefilelink'>$rulefile</a></td></tr>";
|
|
||||||
print "<tr><td class='base' valign='top'>";
|
|
||||||
|
|
||||||
# Check for empty 'Description'
|
|
||||||
if ($snortrules{$rulefile}{'Description'} eq '') {
|
|
||||||
print "<table width='100%'><tr><td class='base'>No description available</td></tr>";
|
|
||||||
} else {
|
|
||||||
# Output rule file 'Description'
|
|
||||||
print "<table width='100%'><tr><td class='base'>$snortrules{$rulefile}{'Description'}</td></tr>";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check for display flag
|
|
||||||
if ($displayrulefilerules) {
|
|
||||||
# Rule file definition rule display
|
|
||||||
print "<tr><td class='base' valign='top'><table border='0'><tr>";
|
|
||||||
|
|
||||||
|
# Loop over rule file rules
|
||||||
|
foreach my $sid (sort {$a <=> $b} keys(%{$snortrules{$rulefile}})) {
|
||||||
# Local vars
|
# Local vars
|
||||||
my $ruledefdisplaycnt = 0;
|
my $ruledefchecked = '';
|
||||||
my $ruledefcnt = keys %{$snortrules{$rulefile}{"Definition"}};
|
|
||||||
$ruledefcnt++;
|
|
||||||
$ruledefcnt = $ruledefcnt / 2;
|
|
||||||
|
|
||||||
# Loop over rule file rules
|
# If 2 rules have been displayed, start a new row
|
||||||
foreach my $ruledef (sort {$a <=> $b} keys(%{$snortrules{$rulefile}{"Definition"}})) {
|
if (($lines % 2) == 0) {
|
||||||
# Local vars
|
print "</tr><tr>\n";
|
||||||
my $ruledefchecked = '';
|
|
||||||
|
|
||||||
# If have display 2 rules, start new row
|
# Increase rows by once.
|
||||||
if (($ruledefdisplaycnt % 2) == 0) {
|
$rows++;
|
||||||
print "</tr><tr>";
|
|
||||||
$ruledefdisplaycnt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check for rules state
|
|
||||||
if ($snortrules{$rulefile}{'Definition'}{$ruledef}{'State'} eq 'Enabled') {
|
|
||||||
$ruledefchecked = 'CHECKED';
|
|
||||||
}
|
|
||||||
|
|
||||||
# Create rule file rule's checkbox
|
|
||||||
$checkboxname = "SNORT_RULE_$rulefile";
|
|
||||||
$checkboxname .= "_$ruledef";
|
|
||||||
print "<td class='base'><input type='checkbox' NAME='$checkboxname' $ruledefchecked> $snortrules{$rulefile}{'Definition'}{$ruledef}{'Description'}</td>";
|
|
||||||
|
|
||||||
# Increment count
|
|
||||||
$ruledefdisplaycnt++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# If do not have second rule for row, create empty cell
|
# Colour lines.
|
||||||
if (($ruledefdisplaycnt % 2) != 0) {
|
if ($rows % 2) {
|
||||||
print "<td class='base'></td>";
|
$col="bgcolor='$color{'color20'}'";
|
||||||
|
} else {
|
||||||
|
$col="bgcolor='$color{'color22'}'";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Close display table
|
# Set rule state
|
||||||
print "</tr></table></td></tr>";
|
if ($snortrules{$rulefile}{$sid}{'State'} eq 'Enabled') {
|
||||||
|
$ruledefchecked = 'CHECKED';
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create rule checkbox and display rule description
|
||||||
|
print "<td class='base' width='5%' align='right' $col>\n";
|
||||||
|
print "<input type='checkbox' NAME='$sid' $ruledefchecked>\n";
|
||||||
|
print "</td>\n";
|
||||||
|
print "<td class='base' width='45%' $col>$snortrules{$rulefile}{$sid}{'Description'}</td>";
|
||||||
|
|
||||||
|
# Increment rule count
|
||||||
|
$lines++;
|
||||||
|
}
|
||||||
|
|
||||||
|
# If do not have a second rule for row, create empty cell
|
||||||
|
if (($lines % 2) != 0) {
|
||||||
|
print "<td class='base'></td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Close display table
|
# Close display table
|
||||||
print "</table>";
|
print "</tr></table></td></tr>";
|
||||||
|
|
||||||
# Increment ruledisplaycnt
|
# Finished whith the rule file, increase count.
|
||||||
$ruledisplaycnt++;
|
$rulesetcount++;
|
||||||
}
|
}
|
||||||
print "</td></tr></table></td></tr></table>";
|
|
||||||
|
# Close display table
|
||||||
|
print "</table>";
|
||||||
|
|
||||||
print <<END
|
print <<END
|
||||||
<table width='100%'>
|
<table width='100%'>
|
||||||
<tr>
|
<tr>
|
||||||
<td width='100%' align='right'><input type='submit' name='ACTION' value='$Lang::tr{'update'}' /></td>
|
<td width='100%' align='right'><input type='submit' name='ACTION' value='$Lang::tr{'update'}'>
|
||||||
<!-- space for future online help link -->
|
<!-- space for future online help link -->
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
|
||||||
END
|
END
|
||||||
;
|
;
|
||||||
&Header::closebox();
|
&Header::closebox();
|
||||||
|
|||||||
Reference in New Issue
Block a user