Add basic captcha
This commit is contained in:
parent
1fa3f225ad
commit
a1bdba3770
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'inc/functions.php';
|
||||||
|
require_once 'inc/lib/securimage/securimage.php';
|
||||||
|
|
||||||
|
if(!isset($config['securimage']) || !$config['securimage']){
|
||||||
|
error('Securimage captcha not enabled.'); //TODO error image
|
||||||
|
}
|
||||||
|
|
||||||
|
$image=new Securimage(array('config_file'=>__DIR__ . '/inc/captchaconfig.php'));
|
||||||
|
|
||||||
|
$image->show();
|
||||||
|
|
||||||
|
$code=$image->getCode(false, true);
|
||||||
|
|
||||||
|
$ip=$_SERVER['REMOTE_ADDR'];
|
||||||
|
|
||||||
|
$query=prepare('INSERT INTO captchas(ip, code, time) VALUES(:ip, :code, NOW())');
|
||||||
|
$query->bindValue(':ip', $ip);
|
||||||
|
$query->bindValue(':code', $code);
|
||||||
|
$query->execute() or error(db_error($query));
|
||||||
|
|
||||||
|
$query=prepare('SELECT count(*) from captchas where ip=:ip');
|
||||||
|
$query->bindValue(':ip', $ip);
|
||||||
|
$query->execute() or error(db_error($query));
|
||||||
|
|
||||||
|
$count=$query->fetch()[0];
|
||||||
|
if($count>10){
|
||||||
|
$query=prepare('DELETE from captchas where ip=:ip ORDER BY time asc LIMIT 1');
|
||||||
|
$query->bindValue(':ip', $ip);
|
||||||
|
$query->execute()or error(db_error($query));
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
Securimage sample config file (rename to config.inc.php to activate)
|
||||||
|
Place your custom configuration in this file to make settings global so they
|
||||||
|
are applied to the captcha image, audio playback, and validation.
|
||||||
|
Using this file is optional but makes settings managing settings easier,
|
||||||
|
especially when upgrading to a new version.
|
||||||
|
When a new Securimage object is created, if config.inc.php is found in the
|
||||||
|
Securimage directory, these settings will be applied *before* any settings
|
||||||
|
passed to the constructor (so options passed in will override these).
|
||||||
|
This file is especially useful if you use a custom database or session
|
||||||
|
configuration and is easier than modifying securimage.php directly.
|
||||||
|
Any class property from securimage.php can be used here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return array(
|
||||||
|
/**** CAPTCHA Appearance Options ****/
|
||||||
|
|
||||||
|
'image_width' => 275, // width of captcha image in pixels
|
||||||
|
'image_height' => 100, // height of captcha image in pixels
|
||||||
|
'code_length' => 6, // # of characters for captcha code
|
||||||
|
'image_bg_color' => '#770000', // hex color for image background
|
||||||
|
'text_color' => '#DDDD64', // hex color for captcha text
|
||||||
|
'line_color' => '#DDDD64', // hex color for lines over text
|
||||||
|
'noise_color' => '#DDDD64', // color of random noise to draw under text
|
||||||
|
'num_lines' => 5, // # of lines to draw over text
|
||||||
|
'noise_level' => 0.5, // how much random noise to add (0-10)
|
||||||
|
'perturbation' => 0.75, // distoration level
|
||||||
|
|
||||||
|
'use_random_spaces' => true,
|
||||||
|
'use_random_baseline' => true,
|
||||||
|
'use_text_angles' => true,
|
||||||
|
'use_random_boxes' => false,
|
||||||
|
'use_transparent_text' => false,
|
||||||
|
|
||||||
|
'wordlist_file' => 'words/words.txt', // text file for word captcha
|
||||||
|
'use_wordlist' => false, // true to use word list
|
||||||
|
'wordlist_file_encoding' => null, // character encoding of word file if other than ASCII (e.g. UTF-8, GB2312)
|
||||||
|
|
||||||
|
// example UTF-8 charset (TTF file must support symbols being used
|
||||||
|
// 'charset' => "абвгдeжзийклмнопрстуфхцчшщъьюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯ",
|
||||||
|
'charset' => "2345689abdfgkmnpqsuwxyz", // capitals are more effort to type, removed confusable characters like o,O,0,1,l
|
||||||
|
|
||||||
|
// 'ttf_file' => './AHGBold.ttf', // TTF file for captcha text
|
||||||
|
|
||||||
|
//'captcha_type' => Securimage::SI_CAPTCHA_WORDS, // Securimage::SI_CAPTCHA_STRING || Securimage:: SI_CAPTCHA_MATHEMATIC || Securimage::SI_CAPTCHA_WORDS
|
||||||
|
|
||||||
|
//'display_value' => 'ABC 123', // Draws custom text on captcha
|
||||||
|
|
||||||
|
|
||||||
|
/**** Code Storage & Database Options ****/
|
||||||
|
|
||||||
|
// true if you *DO NOT* want to use PHP sessions at all, false to use PHP sessions
|
||||||
|
'no_session' => true,
|
||||||
|
|
||||||
|
// the PHP session name to use (null for default PHP session name)
|
||||||
|
// do not change unless you know what you are doing
|
||||||
|
'session_name' => null,
|
||||||
|
|
||||||
|
// change to true to store codes in a database
|
||||||
|
'use_database' => false,
|
||||||
|
|
||||||
|
// database engine to use for storing codes. must have the PDO extension loaded
|
||||||
|
// Values choices are:
|
||||||
|
// Securimage::SI_DRIVER_MYSQL, Securimage::SI_DRIVER_SQLITE3, Securimage::SI_DRIVER_PGSQL
|
||||||
|
'database_driver' => Securimage::SI_DRIVER_MYSQL,
|
||||||
|
|
||||||
|
'database_host' => 'localhost', // database server host to connect to
|
||||||
|
'database_user' => 'lainchan', // database user to connect as
|
||||||
|
'database_pass' => '', // database user password
|
||||||
|
'database_name' => 'lainchan', // name of database to select (you must create this first or use an existing database)
|
||||||
|
'database_table' => 'captcha_codes', // database table for storing codes, will be created automatically
|
||||||
|
|
||||||
|
// Securimage will automatically create the database table if it is not found
|
||||||
|
// change to true for performance reasons once database table is up and running
|
||||||
|
'skip_table_check' => false,
|
||||||
|
|
||||||
|
/**** Audio Options ****/
|
||||||
|
|
||||||
|
//'audio_path' => __DIR__ . '/audio/en/',
|
||||||
|
//'audio_use_noise' => true,
|
||||||
|
//'audio_noise_path' => __DIR__ . '/audio/noise/',
|
||||||
|
//'degrade_audio' => true,
|
||||||
|
|
||||||
|
'no_exit'=>true,
|
||||||
|
|
||||||
|
|
||||||
|
'log_file'=>'/dev/null', //This should be placed somewhere sensible.
|
||||||
|
);
|
|
@ -1779,6 +1779,16 @@
|
||||||
* ====================
|
* ====================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//Securimage captcha
|
||||||
|
//Note from lainchan PR: "TODO move a bunch of things here"
|
||||||
|
|
||||||
|
$config['spam']['valid_inputs'][]='captcha';
|
||||||
|
$config['error']['securimage']=array(
|
||||||
|
'missing'=>'The captcha field was missing. Please try again',
|
||||||
|
'empty'=>'Please fill out the captcha',
|
||||||
|
'bad'=>'Incorrect captcha',
|
||||||
|
);
|
||||||
|
|
||||||
// Meta keywords. It's probably best to include these in per-board configurations.
|
// Meta keywords. It's probably best to include these in per-board configurations.
|
||||||
// $config['meta_keywords'] = 'chan,anonymous discussion,imageboard,tinyboard';
|
// $config['meta_keywords'] = 'chan,anonymous discussion,imageboard,tinyboard';
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,11 @@ $config['url_banner'] = '/banners.php';
|
||||||
*/
|
*/
|
||||||
$config['spam']['enabled'] = false;
|
$config['spam']['enabled'] = false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Basic captcha. See also: captchaconfig.php
|
||||||
|
*/
|
||||||
|
$config['securimage'] = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Permissions
|
* Permissions
|
||||||
*/
|
*/
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
16
post.php
16
post.php
|
@ -491,6 +491,22 @@ function handle_post(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isset($config['securimage']) && $config['securimage']){
|
||||||
|
if(!isset($_POST['captcha'])){
|
||||||
|
error($config['error']['securimage']['missing']);
|
||||||
|
}
|
||||||
|
if(empty($_POST['captcha'])){
|
||||||
|
error($config['error']['securimage']['empty']);
|
||||||
|
}
|
||||||
|
$query=prepare('DELETE FROM captchas WHERE time<DATE_SUB(NOW(), INTERVAL 30 MINUTE)');
|
||||||
|
$query=prepare('DELETE FROM captchas WHERE ip=:ip AND code=:code LIMIT 1');
|
||||||
|
$query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
|
||||||
|
$query->bindValue(':code', $_POST['captcha']);
|
||||||
|
$query->execute();
|
||||||
|
if($query->rowCount()==0){
|
||||||
|
error($config['error']['securimage']['bad']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!(($post['op'] && $_POST['post'] == $config['button_newtopic']) ||
|
if (!(($post['op'] && $_POST['post'] == $config['button_newtopic']) ||
|
||||||
(!$post['op'] && $_POST['post'] == $config['button_reply']))) {
|
(!$post['op'] && $_POST['post'] == $config['button_reply']))) {
|
||||||
|
|
|
@ -96,6 +96,17 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if config.securimage %}
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
Captcha
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<img src="{{ config.root }}/captcha.php"><br />
|
||||||
|
<input type="text" name="captcha" size="25" maxlength="10" autocomplete="off">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
{% if config.user_flag %}
|
{% if config.user_flag %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% trans %}Flag{% endtrans %}</th>
|
<th>{% trans %}Flag{% endtrans %}</th>
|
||||||
|
|
Loading…
Reference in New Issue