Browse Source

fixed to actually work

pull/40/head
asiekierka 12 years ago
parent
commit
091216082a
  1. 10
      inc/ic-encrypt.php
  2. 24
      inc/imgcaptcha.php
  3. 8
      post.php

10
inc/ic-encrypt.php

@ -1,8 +1,6 @@
<?php <?php
// Z internetow. // Z internetow.
class Encryption { class Encryption {
var $skey = $config["imgcaptcha_key"];
public function safe_b64encode($string) { public function safe_b64encode($string) {
$data = base64_encode($string); $data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data); $data = str_replace(array('+','/','='),array('-','_',''),$data);
@ -18,21 +16,21 @@ class Encryption {
return base64_decode($data); return base64_decode($data);
} }
public function encode($value){ public function encode($key, $value){
if(!$value){return false;} if(!$value){return false;}
$text = $value; $text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv); $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
return trim($this->safe_b64encode($crypttext)); return trim($this->safe_b64encode($crypttext));
} }
public function decode($value){ public function decode($key, $value){
if(!$value){return false;} if(!$value){return false;}
$crypttext = $this->safe_b64decode($value); $crypttext = $this->safe_b64decode($value);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $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); return trim($decrypttext);
} }
} }

24
inc/imgcaptcha.php

@ -1,19 +1,25 @@
<?php <?php
// Wiem, ze ten kod to czysta ohyda. Coz. // Wiem, ze ten kod to czysta ohyda. Coz.
require("ic-encrypt.php"); require_once("inc/functions.php");
require_once("inc/ic-encrypt.php");
global $config;
function getImages() { function getImages() {
$lines = split("\n",file_get_contents($config["imgcaptcha_list"])); global $config;
for($i=0;$i<count($lines);$i++) { $lines[$i] = split(",",$lines[$i]); } $lines = explode("\n",file_get_contents($config["imgcaptcha_list"]));
for($i=0;$i<count($lines);$i++) { $lines[$i] = explode(",",$lines[$i]); }
return $lines; return $lines;
} }
function getIPath($img) { function getIPath($img) {
global $config;
return $config["imgcaptcha_images"] . "/" . $img; return $config["imgcaptcha_images"] . "/" . $img;
} }
function pickImage($lines) { function pickImage($lines) {
$src = FALSE; $src = FALSE;
while($src == FALSE) { while($src == FALSE) {
$pick = rand(0,count($lines)-1); $pick = rand(0,count($lines)-1);
$src = imagecreatefrompng(getIPath($lines[$pick][0])); if($lines[$pick][0] != "") $src = imagecreatefrompng(getIPath($lines[$pick][0]));
} }
imagedestroy($src); imagedestroy($src);
return $pick; return $pick;
@ -33,16 +39,18 @@
return $str; return $str;
} }
function generateCaptchaHash() { function generateCaptchaHash() {
global $config;
$lines = getImages(); $lines = getImages();
$pick = pickImage($lines); $pick = pickImage($lines);
$enctext = $pick . ",," . time() . ",," . $_SERVER["REMOTE_ADDR"] . ",," . randString(12); $enctext = $pick . ",," . time() . ",," . $_SERVER["REMOTE_ADDR"] . ",," . randString(12);
$converter = new Encryption; $converter = new Encryption;
return $converter->encode($enctext); return $converter->encode($config["imgcaptcha_key"],$enctext);
} }
function ic_verifyHash($enctext, $output) { function ic_verifyHash($enctext, $output) {
global $config;
//print "VERIFY: " . $enctext . " " . $output . "<br>"; //print "VERIFY: " . $enctext . " " . $output . "<br>";
$converter = new Encryption; $converter = new Encryption;
$dectext = split(",,",$converter->decode($enctext)); $dectext = explode(",,",$converter->decode($config["imgcaptcha_key"],$enctext));
if(count($dectext)<4) return true; if(count($dectext)<4) return true;
$lines = getImages(); $lines = getImages();
$pick = $dectext[0]; $pick = $dectext[0];
@ -56,14 +64,16 @@
} }
function getPick($enctext) function getPick($enctext)
{ {
global $config;
$converter = new Encryption; $converter = new Encryption;
$dectext = split(",,",$converter->decode($enctext)); $dectext = explode(",,",$converter->decode($config["imgcaptcha_key"],$enctext));
if(count($dectext)<=1) return; //SC if(count($dectext)<=1) return; //SC
$lines = getImages(); $lines = getImages();
return $dectext[0]; return $dectext[0];
} }
function generateImage($enctext) function generateImage($enctext)
{ {
global $config;
$lines = getImages(); $lines = getImages();
$pick = getPick($enctext); $pick = getPick($enctext);
if(!isset($lines[$pick])) return; //SC if(!isset($lines[$pick])) return; //SC

8
post.php

@ -6,6 +6,7 @@
require 'inc/functions.php'; require 'inc/functions.php';
require 'inc/anti-bot.php'; require 'inc/anti-bot.php';
require 'inc/imgcaptcha.php';
// Fix for magic quotes // Fix for magic quotes
if (get_magic_quotes_gpc()) { if (get_magic_quotes_gpc()) {
@ -192,7 +193,12 @@ if (isset($_POST['delete'])) {
error($config['error']['captcha']); 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']) { if ($post['mod'] = isset($_POST['mod']) && $_POST['mod']) {
require 'inc/mod.php'; require 'inc/mod.php';
if (!$mod) { if (!$mod) {

Loading…
Cancel
Save