Ik ben bezig met het schrijven van een challenge-response login script in html/js/php.
Dat lukt aardig, alleen zit ik nu met een klein dilemma..
Ook al wil ik mijn gebruikers forcen een sterk paswoord te nemen.. ik block toch ook liever anonieme proxies om zo bruteforce attempts tegen te gaan.
Nu heb ik uren zitten zoeken op t net, en ben ik tot conclusie gekomen dat dit op enkele manieren te doen is;
1: Het IP adres van de gebruiker zo ver mogenlijk ontrafelen en dan kijken als er op dat adres (achter de meest bekende poorten) een proxy server draait.
2: Kijken als het IP adres geblacklist is.
3: Lijsten van de meest bekende anonymous proxy list websites samenvoegen, en daar een grote blacklist van maken.
Ik heb van wat ik hierover totnutoe gevonden heb wat samengevoegd, en dit is het geworden:
Nu heb ik echter 2 problemen.. t blijkt dat de host waar het script op gaat draaien de poorten 50050, 3128, 3124, 8080 blocked, dus /* die optie valt af */
De andere optie: blacklist checking .. kan ik echter niet verifieren omdat ik geen blacklisted IP weet.
Via google dacht ik er wel enkele gevonden te hebben, maar die bleken niet geblacklist te zijn.. ?
Mijn vragen aan jullie zijn;
Weten jullie enig blacklisted ip's ( testen door $userIP = PMA_getIp(); te vervangen door: $userIP = "12.34.567.890"; )
en Weten jullie misschien een betere/effiecientere oplossing? (Het script gaat alleen draaien bij login, dus een lag van +/- 3 sec is geen ramp)
edit: Het blijkt dat het script werkt, alleen zijn er genoeg anonymous proxies die niet geblacklist zijn, en ik merk ook false positives op .. enig idee hoe die problemen af te vangen?
Dat lukt aardig, alleen zit ik nu met een klein dilemma..
Ook al wil ik mijn gebruikers forcen een sterk paswoord te nemen.. ik block toch ook liever anonieme proxies om zo bruteforce attempts tegen te gaan.
Nu heb ik uren zitten zoeken op t net, en ben ik tot conclusie gekomen dat dit op enkele manieren te doen is;
1: Het IP adres van de gebruiker zo ver mogenlijk ontrafelen en dan kijken als er op dat adres (achter de meest bekende poorten) een proxy server draait.
2: Kijken als het IP adres geblacklist is.
3: Lijsten van de meest bekende anonymous proxy list websites samenvoegen, en daar een grote blacklist van maken.
Ik heb van wat ik hierover totnutoe gevonden heb wat samengevoegd, en dit is het geworden:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| <?php function PMA_getenv($var_name) { if (isset($_SERVER[$var_name])) $out = $_SERVER[$var_name]; else if (isset($_ENV[$var_name])) $out = $_ENV[$var_name]; else if (getenv($var_name)) $out = getenv($var_name); else if (function_exists('apache_getenv') && apache_getenv($var_name, true)) $out = apache_getenv($var_name, true); else $out = ''; return $out; } function PMA_getIp() { if (empty($REMOTE_ADDR) && PMA_getenv('REMOTE_ADDR')) $direct_ip = PMA_getenv('REMOTE_ADDR'); if (empty($HTTP_X_FORWARDED_FOR) && PMA_getenv('HTTP_X_FORWARDED_FOR')) $proxy_ip = PMA_getenv('HTTP_X_FORWARDED_FOR'); if (empty($HTTP_X_FORWARDED) && PMA_getenv('HTTP_X_FORWARDED')) $proxy_ip = PMA_getenv('HTTP_X_FORWARDED'); if (empty($HTTP_FORWARDED_FOR) && PMA_getenv('HTTP_FORWARDED_FOR')) $proxy_ip = PMA_getenv('HTTP_FORWARDED_FOR'); if (empty($HTTP_FORWARDED) && PMA_getenv('HTTP_FORWARDED')) $proxy_ip = PMA_getenv('HTTP_FORWARDED'); if (empty($HTTP_VIA) && PMA_getenv('HTTP_VIA')) $proxy_ip = PMA_getenv('HTTP_VIA'); if (empty($HTTP_X_COMING_FROM) && PMA_getenv('HTTP_X_COMING_FROM')) $proxy_ip = PMA_getenv('HTTP_X_COMING_FROM'); if (empty($HTTP_COMING_FROM) && PMA_getenv('HTTP_COMING_FROM')) $proxy_ip = PMA_getenv('HTTP_COMING_FROM'); if (!isset($proxy_ip)) $userIP = $direct_ip; else $userIP = $proxy_ip; $is_ip = preg_match('|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|', $userIP, $regs); return ($is_ip && (count($regs) > 0)) ? $regs[0] : 'unknown'; } $userIP = PMA_getIp(); $badProxy = false; $ports = array(50050, 3128, 3124, 8080); while ($port = array_pop($ports)) { $socket = @fsockopen("tcp://$userIP", $port, $errno, $errstr, 3); if ($errno == 0) { $request = "GET http://www.google.com/ HTTP/1.0\r\n"; $request .= "Proxy-Connection: Keep-Alive\r\n"; $request .= "Pragma: no-cache\r\n"; $request .= "Host: www.google.com\r\n"; $request .= "User-Agent: MSIE 6.0\r\n"; $request .= "\r\n"; fputs($socket, $request); $response = fputs($socket, 128); if (strlen(stristr($response, "200")) > 0) $badProxy = true; fclose($socket); } } function get_reversed_ip($ip) { $ip_exploded = explode('.', $ip); $reverse_ip = "$ip_exploded[3].$ip_exploded[2].$ip_exploded[1].$ip_exploded[0]"; return $reverse_ip; } $reverse_ip = get_reversed_ip($userIP); $rbl_dns_servers = array( '.bl.spamcop.net', '.blackholes.five-ten-sg.com', '.combined.njabl.org', '.dnsbl.sorbs.net', '.dynablock.easynet.nl', '.http.dnsbl.sorbs.net', '.list.dsbl.org', '.misc.dnsbl.sorbs.net', '.opm.blitzed.org', '.proxies.blackholes.easynet.nl', '.relays.ordb.org', '.sbl-xbl.spamhaus.org', '.socks.dnsbl.sorbs.net', '.spam.dnsbl.sorbs.net', '.virbl.dnsbl.bit.nl'); while ($reverse_dns = array_pop($rbl_dns_servers)) { $rlookup = $reverse_ip . $reverse_dns; if ($rlookup != gethostbyname($rlookup)) $badProxy = true; } if ($badProxy) echo "BUSTED"; else echo "TRUSTED"; ?> |
Nu heb ik echter 2 problemen.. t blijkt dat de host waar het script op gaat draaien de poorten 50050, 3128, 3124, 8080 blocked, dus /* die optie valt af */
De andere optie: blacklist checking .. kan ik echter niet verifieren omdat ik geen blacklisted IP weet.
Via google dacht ik er wel enkele gevonden te hebben, maar die bleken niet geblacklist te zijn.. ?
Mijn vragen aan jullie zijn;
Weten jullie enig blacklisted ip's ( testen door $userIP = PMA_getIp(); te vervangen door: $userIP = "12.34.567.890"; )
en Weten jullie misschien een betere/effiecientere oplossing? (Het script gaat alleen draaien bij login, dus een lag van +/- 3 sec is geen ramp)
edit: Het blijkt dat het script werkt, alleen zijn er genoeg anonymous proxies die niet geblacklist zijn, en ik merk ook false positives op .. enig idee hoe die problemen af te vangen?
[ Voor 139% gewijzigd door sjhgvr op 05-09-2006 20:44 ]