Login | ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/php_antispam/trunk/v4.inc.php
Revision: 5
Committed: Sat Jan 8 23:46:35 2022 UTC (10 months, 2 weeks ago) by daniel-marschall
File size: 3645 byte(s)

File Contents

# User Rev Content
1 daniel-marschall 5 <?php
2    
3     /*
4     * ViaThinkSoft Anti-Spam Script for PHP
5     * (C) 2009-2013 ViaThinkSoft
6     * Revision: 2013-03-04 (Version 4.01)
7     */
8    
9     function secure_email($email, $linktext, $crypt_linktext)
10     {
11     // No new lines to avoid a JavaScript error!
12     $linktext = str_replace("\r", ' ', $linktext);
13     $linktext = str_replace("\n", ' ', $linktext);
14    
15     if (!defined('ALAS_INCLUDED')) {
16     // Anfagswert über aktuelle Mikrosekunde setzen
17     // http://de2.php.net/manual/de/function.srand.php
18     function make_seed() {
19     list($usec, $sec) = explode(' ', microtime());
20     return (float) $sec + ((float) $usec * 100000);
21     }
22     srand(make_seed());
23    
24     define('ALAS_GARBARGE_LENGTH', 5);
25    
26     // http://www.jonasjohn.de/snippets/php/rand-str.htm
27     function RandomString($len) {
28     $randstr = '';
29     srand((double)microtime()*1000000);
30     for($i=0;$i<$len;$i++) {
31     $n = rand(48,120);
32     while (($n >= 58 && $n <= 64) || ($n >= 91 && $n <= 96)) {
33     $n = rand(48,120);
34     }
35     $randstr .= chr($n);
36     }
37     return $randstr;
38     }
39    
40     function js_randombreaks() {
41     $len = rand(0, ALAS_GARBARGE_LENGTH);
42     $r = '';
43     $one_line_comment = false;
44     for($i=0;$i<$len;$i++) {
45     $m = rand(0, 3);
46     if ($m == 0) {
47     $r .= ' ';
48     } else if ($m == 1) {
49     $r .= '//';
50     $r .= RandomString($i);
51     $one_line_comment = true;
52     } else if ($m == 2) {
53     $r .= "\r\n";
54     $one_line_comment = false;
55     } else {
56     $r .= "\t";
57     }
58     }
59     if ($one_line_comment) $r .= "\r\n";
60     return $r;
61     }
62    
63     function alas_js_crypt($text) {
64     $tmp = '';
65     for ($i=0; $i<strlen($text); $i++) {
66     $tmp .= js_randombreaks();
67     $tmp .= 'document.write("&#'.ord(substr($text, $i, 1)).';");';
68     $tmp .= js_randombreaks();
69     }
70     $tmp = js_randombreaks().$tmp.js_randombreaks();
71     return $tmp;
72     }
73    
74     function alas_noscript_crypt($text){
75     $tmp = '';
76     for ($i=0; $i<strlen($text); $i++) {
77     $tmp .= '<span style="display:inline;">&#'.ord(substr($text, $i, 1)).';</span>';
78     $tmp .= '<!--'.js_randombreaks().'-->';
79     $tmp .= '<span style="display:none;">'.RandomString(rand(0, ALAS_GARBARGE_LENGTH)).'</span>';
80     }
81     return $tmp;
82     }
83    
84     function alas_js_write($text) {
85     $text = str_replace('\\', '\\\\', $text);
86     $text = str_replace('"', '\"', $text);
87     $text = str_replace('/', '\/', $text); // W3C Validation </a> -> <\/a>
88    
89     $ret = '';
90     $ret .= js_randombreaks();
91     $ret .= 'document.write("'.$text.'");';
92     $ret .= js_randombreaks();
93    
94     return $ret;
95     }
96    
97     define('ALAS_INCLUDED', true);
98     }
99    
100     $aus = '';
101     if ($email != '') {
102     $zid = 'ALAS-4.0-'.DecHex(crc32($email)).'-'.DecHex(crc32($linktext)).'-'.($crypt_linktext ? 'S' : 'L');
103     $title = 'ViaThinkSoft "ALAS" Anti-Spam';
104    
105     $aus .= "<!-- BEGIN $title [ID $zid] -->\r\n";
106     $aus .= '<script language="JavaScript" type="text/javascript"><!--'."\n";
107     $aus .= alas_js_write('<a href="');
108     $aus .= alas_js_crypt('mailto:'.$email);
109     $aus .= alas_js_write('">');
110     $aus .= $crypt_linktext ? alas_js_crypt($linktext) : alas_js_write($linktext);
111     $aus .= alas_js_write('</a>').'// --></script>';
112    
113     $aus .= '<noscript>';
114     if ($linktext != $email) $aus .= ($crypt_linktext ? alas_noscript_crypt($linktext) : $linktext).' ';
115     $aus .= alas_noscript_crypt("[ $email ]");
116     $aus .= '</noscript>';
117     $aus .= "\r\n<!-- END $title [ID $zid] -->\r\n";
118     }
119    
120     return $aus;
121     }
122    
123     function secure_email_autodetect($email, $linktext) {
124     // Automatisch erkennen, ob der $linktext für Spambots interessant ist oder nicht
125     $pos = strpos($linktext, '@');
126    
127     return secure_email($email, $linktext, $pos !== false);
128     }
129    
130     function secure_email_identical_text($email) {
131     return secure_email_autodetect($email, $email);
132 daniel-marschall 2 }