From 549ecc200e16789f5b0cde8b38b0c4a70759da1f Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sat, 22 Dec 2012 17:38:49 +0100 Subject: added imgcaptcha files --- inc/imgcaptcha.php | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 inc/imgcaptcha.php (limited to 'inc/imgcaptcha.php') diff --git a/inc/imgcaptcha.php b/inc/imgcaptcha.php new file mode 100644 index 00000000..dae42752 --- /dev/null +++ b/inc/imgcaptcha.php @@ -0,0 +1,126 @@ +255) { return 255; } + if($a<0) { return 0; } + return $a; + } + function randString($length, $charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+=') + { + $str = ''; + $count = strlen($charset); + while ($length--) { + $str .= $charset[rand(0, $count-1)]; + } + return $str; + } + function generateCaptchaHash() { + $lines = getImages(); + $pick = pickImage($lines); + $enctext = $pick . ",," . time() . ",," . $_SERVER["REMOTE_ADDR"] . ",," . randString(12); + $converter = new Encryption; + return $converter->encode($enctext); + } + function ac_verifyHash($enctext, $output) { + //print "VERIFY: " . $enctext . " " . $output . "
"; + $converter = new Encryption; + $dectext = split(",,",$converter->decode($enctext)); + if(count($dectext)<4) return true; + $lines = getImages(); + $pick = $dectext[0]; + $time = time()-$dectext[1]; + if($time>$config["imgcaptcha_time_limit"]) return true; + $lp = $lines[$pick]; + for($i=1;$idecode($enctext)); + if(count($dectext)<=1) return; //SC + $lines = getImages(); + return $dectext[0]; + } + function generateImage($enctext) + { + $lines = getImages(); + $pick = getPick($enctext); + if(!isset($lines[$pick])) return; //SC + $src = imagecreatefrompng(getIPath($lines[$pick][0])); + if($src == FALSE) return; //SC + $maxc = 8; + $icw = $config["imgcaptcha_width"]; + $ich = $config["imgcaptcha_height"]; + $dst = imagecreatetruecolor($icw,$ich); + $srcxm = imagesx($src)-$icw; + $srcym = imagesy($src)-$ich; + $srcx = rand(0,$srcxm-1); + $srcy = rand(0,$srcym-1); + imagecopy($dst,$src,0,0,$srcx,$srcy,$icw,$ich); + + // Obfuscation step 1 + imagecopymergegray($dst,$dst,0,0,0,0,$icw,$ich,rand(20,45)); + // Obfuscation step 1.5 + for($i=0;$i<8;$i++) { + $w = rand(5,10); $h = rand(5,10); + $x = rand(0,$icw-1-$w); $y = rand(0,$ich-1-$h); + $x2 = rand(0,$icw-1); $y2 = rand(0,$ich-1); + imagefilledrectangle($dst,$x,$y,$x+$w,$y+$h,imagecolorat($dst,$x2,$y2)); + } + for($i=0;$i<5;$i++) { + $w = rand(20,40); $h = rand(20,40); + $x = rand(0,$icw-1-$w); $y = rand(0,$ich-1-$h); + imagecopymergegray($dst,$dst,$x,$y,$x,$y,$w,$h,0); + } + // Obfuscation step 2 + for($i=0;$i<$icw*$ich;$i++) { + $x = $i%$icw; $y = $i/$icw; + $c = imagecolorat($dst,$x,$y); + if(rand(0,4) == 2) { $nc = $c ^ rand(0,16777215); } + else { $nc = imagecolorat($dst,rand(0,$icw-1),rand(0,$ich-1)); } + if(rand(18,24)!=21 and $c != 0 and $c != 0xFF00FF) + { + $nc = ncfix(($c&0xFF) + rand(-16,16)) | ncfix((($c>>8)&0xFF) + rand(-8,8))<<8 | ncfix((($c>>16)&0xFF) + rand(-32,32))<<16; + $nc1 = $nc&0xFF ^ ($nc>>8)&0xFF ^ ($nc>>16)&0xFF; + } else { + $nc1 = $nc&0xFF; + if($nc1>($maxc*25)) $nc1 = $nc % ($maxc*25); + } + $nc2 = $nc1 | $nc1<<8 | $nc1<<16; + if(rand(0,1)==0) $nc2=$nc; + imagesetpixel($dst,$x,$y,$nc2); + } + // Obfuscation step 3 + for($i=0;$i -- cgit v1.3 From f754fcaea1bd4b67cd4d7a8fb90ed9f52f0605f2 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sat, 22 Dec 2012 17:44:43 +0100 Subject: integrated imgcaptcha with Tinyboard --- imgcaptcha_im.php | 7 +++++++ imgcaptcha_p.php | 5 +++++ inc/imgcaptcha.php | 2 +- js/imgcaptcha.js | 4 ++-- 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 imgcaptcha_im.php create mode 100644 imgcaptcha_p.php (limited to 'inc/imgcaptcha.php') diff --git a/imgcaptcha_im.php b/imgcaptcha_im.php new file mode 100644 index 00000000..152d92ad --- /dev/null +++ b/imgcaptcha_im.php @@ -0,0 +1,7 @@ + diff --git a/imgcaptcha_p.php b/imgcaptcha_p.php new file mode 100644 index 00000000..9543dc6c --- /dev/null +++ b/imgcaptcha_p.php @@ -0,0 +1,5 @@ + diff --git a/inc/imgcaptcha.php b/inc/imgcaptcha.php index dae42752..77441fce 100644 --- a/inc/imgcaptcha.php +++ b/inc/imgcaptcha.php @@ -39,7 +39,7 @@ $converter = new Encryption; return $converter->encode($enctext); } - function ac_verifyHash($enctext, $output) { + function ic_verifyHash($enctext, $output) { //print "VERIFY: " . $enctext . " " . $output . "
"; $converter = new Encryption; $dectext = split(",,",$converter->decode($enctext)); diff --git a/js/imgcaptcha.js b/js/imgcaptcha.js index dd313fad..d8f922fe 100644 --- a/js/imgcaptcha.js +++ b/js/imgcaptcha.js @@ -3,9 +3,9 @@ //} function imgcaptcha_odswiezKapcze() { - $.get("/inc/imgcaptcha_p.php", function(data) { + $.get("/imgcaptcha_p.php", function(data) { $("#imgcaptcha_hash").val(data); - $("#imgcaptcha_img").prop("src","/inc/imgcaptcha_im.php?cr=" + data); + $("#imgcaptcha_img").prop("src","/imgcaptcha_im.php?cr=" + data); }); } //function resetujKapcze() { -- cgit v1.3 From 091216082aafb74b95ff4f79b3acc5e7184db404 Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sat, 22 Dec 2012 18:16:09 +0100 Subject: fixed to actually work --- inc/ic-encrypt.php | 10 ++++------ inc/imgcaptcha.php | 24 +++++++++++++++++------- post.php | 8 +++++++- 3 files changed, 28 insertions(+), 14 deletions(-) (limited to 'inc/imgcaptcha.php') diff --git a/inc/ic-encrypt.php b/inc/ic-encrypt.php index c0f499bd..5d73126b 100644 --- a/inc/ic-encrypt.php +++ b/inc/ic-encrypt.php @@ -1,8 +1,6 @@ skey, $text, MCRYPT_MODE_ECB, $iv); + $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); return trim($this->safe_b64encode($crypttext)); } - public function decode($value){ + public function decode($key, $value){ if(!$value){return false;} $crypttext = $this->safe_b64decode($value); $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); - $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv); + $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv); return trim($decrypttext); } } diff --git a/inc/imgcaptcha.php b/inc/imgcaptcha.php index 77441fce..ab6db68f 100644 --- a/inc/imgcaptcha.php +++ b/inc/imgcaptcha.php @@ -1,19 +1,25 @@ encode($enctext); + return $converter->encode($config["imgcaptcha_key"],$enctext); } function ic_verifyHash($enctext, $output) { + global $config; //print "VERIFY: " . $enctext . " " . $output . "
"; $converter = new Encryption; - $dectext = split(",,",$converter->decode($enctext)); + $dectext = explode(",,",$converter->decode($config["imgcaptcha_key"],$enctext)); if(count($dectext)<4) return true; $lines = getImages(); $pick = $dectext[0]; @@ -56,14 +64,16 @@ } function getPick($enctext) { + global $config; $converter = new Encryption; - $dectext = split(",,",$converter->decode($enctext)); + $dectext = explode(",,",$converter->decode($config["imgcaptcha_key"],$enctext)); if(count($dectext)<=1) return; //SC $lines = getImages(); return $dectext[0]; } function generateImage($enctext) { + global $config; $lines = getImages(); $pick = getPick($enctext); if(!isset($lines[$pick])) return; //SC diff --git a/post.php b/post.php index 16566b51..f21b6164 100644 --- a/post.php +++ b/post.php @@ -6,6 +6,7 @@ require 'inc/functions.php'; require 'inc/anti-bot.php'; +require 'inc/imgcaptcha.php'; // Fix for magic quotes if (get_magic_quotes_gpc()) { @@ -192,7 +193,12 @@ if (isset($_POST['delete'])) { error($config['error']['captcha']); } } - + if ($config['imgcaptcha']) { + if (!isset($_POST['imgcaptcha_verify']) || !isset($_POST['imgcaptcha_hash'])) + error($config['error']['bot']); + if (ic_verifyHash($_POST['imgcaptcha_hash'],$_POST['imgcaptcha_verify'])) + error($config['error']['captcha']); + } if ($post['mod'] = isset($_POST['mod']) && $_POST['mod']) { require 'inc/mod.php'; if (!$mod) { -- cgit v1.3