Patch: add support of Phishing Database

Kirill A. Korinsky <[email protected]>
Newsgroups gmane.mail.spam.spamassassin.general
Message-ID <[email protected]>
Greetings,

I'd like to share a patch which added to Phishing.pm one more source:
so-called Phishing Database.

Details here: https://github.com/mitchellkrogza/Phishing.Database

diff --git a/lib/Mail/SpamAssassin/Plugin/Phishing.pm b/lib/Mail/SpamAssassin/Plugin/Phishing.pm
index 310dffcf0..0c6010ac2 100644
--- a/lib/Mail/SpamAssassin/Plugin/Phishing.pm
+++ b/lib/Mail/SpamAssassin/Plugin/Phishing.pm
@@ -32,6 +32,7 @@ Mail::SpamAssassin::Plugin::Phishing - check uris against phishing feed
     phishing_openphish_feed /etc/mail/spamassassin/openphish-feed.txt
     phishing_phishtank_feed /etc/mail/spamassassin/phishtank-feed.csv
     phishing_phishstats_feed /etc/mail/spamassassin/phishstats-feed.csv
+    phishing_phishing_database_feed /etc/mail/spamassassin/phishing-database-feed.csv
     body     URI_PHISHING      eval:check_phishing()
     describe URI_PHISHING      Url match phishing in feed
   endif
@@ -51,6 +52,9 @@ To avoid download limits a registration is required.
 The PhishStats feed is updated every 90 minutes and can be downloaded from
 https://phishstats.info/phish_score.csv.
 
+The Phishing Database feed is updated every few hours and can be downloaded from
+https://phish.co.za/latest/ALL-phishing-domains.lst
+
 =cut
 
 package Mail::SpamAssassin::Plugin::Phishing;
@@ -177,6 +181,29 @@ from PhishStats datafeed.
 
 =back
 
+=cut
+    push(@cmds, {
+        setting => 'phishing_phishing_database_feed',
+        is_admin => 1,
+        type => $Mail::SpamAssassin::Conf::CONF_TYPE_STRING,
+        }
+    );
+
+=over 4
+
+=item phishing_phishing_database_feed
+
+Absolute path of the downloaded Phishing Database datafeed.
+
+=back
+
+=cut
+
+=head1 ADMIN PREFERENCES
+
+The following options can be used in site-wide (C<local.cf>)
+configuration files to customize how the module handles phishing uris
+
 =cut
     $conf->{parser}->register_commands(\@cmds);
 }
@@ -284,6 +311,30 @@ sub _read_configfile {
     close(F) or die "error closing config file: $!";
   }
 
+  if ( defined($conf->{phishing_phishing_database_feed}) && ( -f $conf->{phishing_phishing_database_feed} ) ) {
+    open(F, '<', $conf->{phishing_phishing_database_feed});
+    for ($!=0; <F>; $!=0) {
+        chomp;
+        #lines that start with pound are comments
+        next if(/^\s*\#/);
+        $stripped_cluri = $_;
+	my $dcnt = $stripped_cluri =~ tr/\///;
+	if ( ($conf->{phishing_uri_noparam} eq 1) && ($dcnt >= 3) && ($stripped_cluri =~ /\?/) ) {
+          $stripped_cluri =~ s/\?.*//;
+	}
+	$stripped_cluri =~ s/\=$//;
+        my $phishdomain = $self->{main}->{registryboundaries}->uri_to_domain($_);
+        if ( defined $phishdomain ) {
+          push @{$self->{PHISHING}->{$stripped_cluri}->{phishdomain}}, $phishdomain;
+          push @{$self->{PHISHING}->{$stripped_cluri}->{phishinfo}->{$phishdomain}}, "PhishingDatabase";
+        }
+    }
+
+    defined $_ || $!==0  or
+      $!==EBADF ? dbg("PHISHING: error reading config file: $!")
+                : die "error reading config file: $!";
+    close(F) or die "error closing config file: $!";
+  }
 }
 
 sub check_phishing {


-- 
wbr, Kirill
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.