1: #!/usr/bin/perl
2: # spamtrap_encode/spamtrap_decode
3: # zeitform Internet Dienste (c) 2003
4: # alex@zeitform.de - Version 0.1
5: #
6: # encrypt timestamp and ip address for random mail-addresses
7: #
8: # spamtrap_encode creates a blowfish encrypted hex string
9: # based on a given ip address and timestamp to construct
10: # dynamic mail addresses for online publishing
11: #
12: # If you publish your email address on your web site, you will
13: # be spammed. To minimize this, you can use methods to
14: # trick address harvesters:
15: #
16: # * "user at domain dot com"
17: # * "user-nospam@domain.com"
18: # * HTML encoded mailto
19: # * JavaScript generated mailto
20: # * other methods
21: #
22: # The method proposed by this encoder creates mail addresses
23: # that include a timestamp and the ip address of the remote
24: # host (i.e. of the harvester). This enables you to reveal
25: # the harvester's ip adress for received spam.
26: #
27: # usage:
28: #
29: # my $ip = $ENV{REMOTE_ADDR}; # e.g. "146.140.8.123"
30: # my $time = time; # unix timestamp
31: # my $key = "0123456789ABCDEF"; # key for Blowfish
32: #
33: # to generate the spamtrap string:
34: #
35: # my $string = spamtrap_encode($ip, $time, $key); # e.g. 78c1ed6da0322b3a
36: #
37: # to decode:
38: #
39: # ($ip, $time) = spamtrap_decode($string, $key); # returns ip address and timestamp
40: #
41: # Example:
42: #
43: # If you have an E-Mail address "joe@domain.com" and use qmail
44: # extensions to have addresses like "joe-anything@domain.com"
45: # you could publish your E-Mail address on websites with:
46: #
47: # print '<a href="mailto:joe-' . spamtrap_encode($ip, $time, $key) . '@domain.com">Joe</a>';
48: #
49: # which prints:
50: #
51: # <a href="mailto:joe-78c1ed6da0322b3a@domain.com">Joe</a>
52: #
53: # A perfect trap for address harvesters!
54: #
55: # Many thanks to Daniel A. Rehbein (http://daniel.rehbein.net/)
56: # for the idea to this code.
57: #
58: #### some dumy input
59: #
60: # $ip = quad-dooted ip address
61: # $time = unix timestamp
62: # $key = your secret key
63:
64: my $ip = "146.140.8.123";
65: my $time = time;
66: my $key = "0123456789ABCDEF";
67:
68: #### end dummy input
69:
70: my $string = spamtrap_encode($ip, $time, $key);
71:
72: print "time: $time\n";
73: print "ip: $ip\n";
74: print "cipher: $string\n";
75:
76: ($ip, $time) = spamtrap_decode($string, $key);
77:
78: print "time: $time\n";
79: print "ip: $ip\n";
80:
81: exit;
82:
83: ### sub land
84:
85: sub spamtrap_encode
86: {
87: my ($ip, $time, $key) = @_;
88: return unless $key;
89: return unless $time > 0;
90: return unless $ip =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/o;
91: my $inkey = pack("H16", $key);
92: my $plaintext = join("", map { chr } split (/\./, $ip)) . pack("L", $time);
93: use Crypt::Blowfish;
94: my $cipher = new Crypt::Blowfish $inkey;
95: my $string = unpack("H*", $cipher->encrypt($plaintext));
96: return $string;
97: }
98:
99: sub spamtrap_decode
100: {
101: my ($string, $key) = @_;
102: return unless $key;
103: return unless $string =~ /[0-9a-f]{16}/o;
104: my $inkey = pack("H16", $key);
105: use Crypt::Blowfish;
106: my $cipher = new Crypt::Blowfish $inkey;
107: my $plaintext = $cipher->decrypt(pack("H*", $string));
108: my $time = unpack("L", substr($plaintext, 4, 4));
109: my $ip = join(".", map { ord } split //, substr($plaintext, 0, 4));
110: return wantarray ? ($ip, $time) : "$ip $time";
111: }
112:
113: ###-fin
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Anti-Spam Mail Address Encoding (with encrypted IP-Address)
by projekt21 (Friar) on Jul 14, 2003 at 13:23 UTC | |
|
Re: Anti-Spam Mail Address Encoding (with encrypted IP-Adress)
by allolex (Curate) on Jul 10, 2003 at 21:42 UTC | |
|
Re: Anti-Spam Mail Address Encoding (with encrypted IP-Address)
by chanio (Priest) on Jul 11, 2003 at 05:40 UTC | |
|
Re: Anti-Spam Mail Address Encoding (with encrypted IP-Adress)
by Intrepid (Curate) on Jul 10, 2003 at 20:01 UTC | |
|
Re: Anti-Spam Mail Address Encoding (with encrypted IP-Address)
by YAFZ (Pilgrim) on Jul 14, 2003 at 10:10 UTC | |
|
Re: Anti-Spam Mail Address Encoding (with encrypted IP-Address)
by OverlordQ (Hermit) on Jul 16, 2003 at 05:13 UTC |