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