Project

General

Profile

« Previous | Next » 

Revision 640

Added by thorn almost 17 years ago

Text-captcha: moved text-file to database.

View differences:

trunk/CHANGELOG
12 12

  
13 13
------------------------------------- 2.7.0 -------------------------------------
14 14
29-Jan-2008 Thomas Hornik
15
#	Security bugfix: Text file for text-captcha was readable from everywhere
15
#	Security bugfix: Text file for text-captcha was world-readable. Moved to database.
16 16
#	Text-captcha: empty line in test file, following a question, was accepted as answer. Fixed.
17 17
28-Jan-2008 Matthias Gallas
18 18
#	Replaced all special chars in language files with htmlentities or unicode
trunk/wb/include/captcha/captchas/text.php
27 27
if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
28 28

  
29 29
global $admin;
30
global $database;
30 31
$name = 'text';
31 32
$file = WB_PATH."/temp/.captcha_$name.php";
32 33

  
......
34 35
$_SESSION['captcha'] = rand(0,99999);
35 36

  
36 37
// get questions and answers
37
$qa = array();
38
@$content = file($file);
39
if($content===FALSE) {
40
	echo '<b>Error</b>: Can not read text! Enter <b>0</b> to solve this captcha';
41
	$_SESSION['captcha'] = '0';
42
	return;
38
$text_qa='';
39
$table = TABLE_PREFIX.'mod_captcha_control';
40
if($query = $database->query("SELECT ct_text FROM $table")) {
41
	$data = $query->fetchRow();
42
	$text_qa = $admin->strip_slashes($data['ct_text']);
43 43
}
44
$content = explode("\n", $text_qa);
45

  
44 46
reset($content);
45 47
while($s = current($content)) {
46 48
	// get question
......
56 58
	}	else {
57 59
		$lang='XX';
58 60
		$q=substr($s,1);
61
		if($q=='') {
62
			next($content);
63
			continue;
64
		}
59 65
	}
60 66
	// get answer
61 67
	$s=next($content);
......
67 73
		next($content);
68 74
	}
69 75
}
70
if($qa == array()) {
76
if(!isset($qa) || $qa == array()) {
71 77
	echo '<b>Error</b>: no text defined! Enter <b>0</b> to solve this captcha';
72 78
	$_SESSION['captcha'] = '0';
73 79
	return;
......
91 97

  
92 98
echo $k;
93 99

  
94
?>
100
?>
trunk/wb/modules/captcha_control/tool.php
52 52
	");
53 53

  
54 54
	// save text-captchas
55
	if($_POST['captcha_type'] == 'text') {
55
	if($_POST['captcha_type'] == 'text') { // ct_text
56 56
		$text_qa=$_POST['text_qa'];
57 57
		if(strpos($text_qa, '### example ###') === FALSE) {
58 58
			$text_qa=$admin->add_slashes($text_qa);
59
			$text_qa="<?php die(header('Location: ../index.php')); ?>\n".$text_qa;
60
			if($fh = fopen(WB_PATH.'/temp/.captcha_text.php', 'wb')) {
61
				fwrite($fh, $text_qa);
62
				fclose($fh);
63
			}
59
			$database->query("UPDATE $table SET ct_text = '$text_qa'");
64 60
		}
65 61
	}
66 62
	
......
78 74

  
79 75
	// load text-captchas
80 76
	$text_qa='';
81
	if(file_exists(WB_PATH.'/include/captcha/captchas/text.php')) {
82
		if(file_exists(WB_PATH.'/temp/.captcha_text.php')) {
83
			@$content = file(WB_PATH.'/temp/.captcha_text.php');
84
			if($content!==FALSE) {
85
				$content[0]='';
86
				$text_qa = $admin->strip_slashes(implode('', $content));
87
			}
88
		}
77
	if($query = $database->query("SELECT ct_text FROM $table")) {
78
		$data = $query->fetchRow();
79
		$text_qa = $admin->strip_slashes($data['ct_text']);
89 80
	}
90 81
	if($text_qa == '')
91 82
		$text_qa = $MOD_CAPTCHA_CONTROL['CAPTCHA_TEXT_DESC'];
......
199 190
<?php
200 191
}
201 192

  
202
?>
193
?>
trunk/wb/modules/captcha_control/install.php
35 35
	`captcha_type` VARCHAR(255) NOT NULL DEFAULT 'calc_text',
36 36
	`asp_session_min_age` INT(11) NOT NULL DEFAULT '20',
37 37
	`asp_view_min_age` INT(11) NOT NULL DEFAULT '10',
38
	`asp_input_min_age` INT(11) NOT NULL DEFAULT '5'
38
	`asp_input_min_age` INT(11) NOT NULL DEFAULT '5',
39
	`ct_text` LONGTEXT NOT NULL DEFAULT ''
39 40
	)"
40 41
);
41 42

  

Also available in: Unified diff