Fix captcha when disabled
This commit is contained in:
@ -1,23 +1,4 @@
|
||||
<?php
|
||||
/*
|
||||
* Onion Link List - Configuration
|
||||
*
|
||||
* Copyright (C) 2016-2020 Daniel Winzen <daniel@danwin1210.de>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Configuration
|
||||
const DBHOST = 'localhost'; // Database host
|
||||
const DBUSER = 'www-data'; // Database user
|
||||
@ -36,6 +17,7 @@ const VERSION = '1.1'; // Script version
|
||||
const DBVERSION = 8; // Database layout version
|
||||
const REQUIRE_APPROVAL = false; // require admin approval of new sites? true/false
|
||||
const CANONICAL_URL = 'https://onions.danwin1210.de'; // our preferred domain for search engines
|
||||
const CAPTCHA = 0; // Captcha difficulty (0=off, 1=simple, 2=moderate, 3=extreme)
|
||||
//Categories - new links will always be put into the first one, leave it to Unsorted
|
||||
//once configured, only add new categories at the end or you have to manually adjust the database.
|
||||
$categories=['Unsorted', 'Adult/Porn', 'Communication/Social', 'Forums', 'Hacking/Programming/Software', 'Hosting', 'Libraries/Wikis', 'Link Lists', 'Market/Shop/Store', 'Other', 'Personal Sites/Blogs', 'Security/Privacy/Encryption', 'Whistleblowing', 'Empty/Error/Unknown', 'Cryptocurrencies', 'Scams', 'Fun/Games/Joke', 'Search'];
|
||||
|
115
www/index.php
115
www/index.php
@ -218,21 +218,23 @@ function send_html(): void
|
||||
echo '<p class="red" role="alert">'._('Invalid onion address!').'</p>';
|
||||
echo '<p>'.sprintf(_('A valid address looks like this: %s'), 'http://danielas3rtn54uwmofdo3x2bsdifr47huasnmbgqzfrec5ubupvtpid.onion') .'</p>';
|
||||
}else{
|
||||
if(!isset($_REQUEST['challenge'])){
|
||||
send_error(_('Error: Wrong captcha'));
|
||||
}
|
||||
$stmt=$db->prepare('SELECT code FROM ' . PREFIX . 'captcha WHERE id=?;');
|
||||
$stmt->execute([$_REQUEST['challenge']]);
|
||||
$stmt->bindColumn(1, $code);
|
||||
if(!$stmt->fetch(PDO::FETCH_BOUND)){
|
||||
send_error(_('Error: Captcha expired'));
|
||||
}
|
||||
$time=time();
|
||||
$stmt=$db->prepare('DELETE FROM ' . PREFIX . 'captcha WHERE id=? OR time<?;');
|
||||
$stmt->execute([$_REQUEST['challenge'], $time-3600]);
|
||||
if($_REQUEST['captcha']!==$code){
|
||||
if(strrev($_REQUEST['captcha'])!==$code){
|
||||
send_error(_('Error: Wrong captcha'));
|
||||
if(CAPTCHA !== 0) {
|
||||
if ( ! isset( $_REQUEST[ 'challenge' ] ) ) {
|
||||
send_error( _( 'Error: Wrong captcha' ) );
|
||||
}
|
||||
$stmt = $db->prepare( 'SELECT code FROM ' . PREFIX . 'captcha WHERE id=?;' );
|
||||
$stmt->execute( [ $_REQUEST[ 'challenge' ] ] );
|
||||
$stmt->bindColumn( 1, $code );
|
||||
if ( ! $stmt->fetch( PDO::FETCH_BOUND ) ) {
|
||||
send_error( _( 'Error: Captcha expired' ) );
|
||||
}
|
||||
$time = time();
|
||||
$stmt = $db->prepare( 'DELETE FROM ' . PREFIX . 'captcha WHERE id=? OR time<?;' );
|
||||
$stmt->execute( [ $_REQUEST[ 'challenge' ], $time - 3600 ] );
|
||||
if ( $_REQUEST[ 'captcha' ] !== $code ) {
|
||||
if ( strrev( $_REQUEST[ 'captcha' ] ) !== $code ) {
|
||||
send_error( _( 'Error: Wrong captcha' ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
$addr=strtolower($addr[4]);
|
||||
@ -489,8 +491,7 @@ function get_pagination(int $category, int $pages) : string {
|
||||
function send_captcha(): void
|
||||
{
|
||||
global $db;
|
||||
$difficulty=1;
|
||||
if($difficulty===0 || !extension_loaded('gd')){
|
||||
if(CAPTCHA === 0 || !extension_loaded('gd')){
|
||||
return;
|
||||
}
|
||||
$captchachars='ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789';
|
||||
@ -504,28 +505,80 @@ function send_captcha(): void
|
||||
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'captcha (id, time, code) VALUES (?, ?, ?);');
|
||||
$stmt->execute([$randid, $time, $code]);
|
||||
echo '<p><label>'._('Copy:');
|
||||
if($difficulty===1){
|
||||
$im=imagecreatetruecolor(55, 24);
|
||||
$bg=imagecolorallocate($im, 0, 0, 0);
|
||||
$fg=imagecolorallocate($im, 255, 255, 255);
|
||||
if(CAPTCHA === 1){
|
||||
$im = imagecreatetruecolor(55, 24);
|
||||
$bg = imagecolorallocate($im, 0, 0, 0);
|
||||
$fg = imagecolorallocate($im, 255, 255, 255);
|
||||
imagefill($im, 0, 0, $bg);
|
||||
imagestring($im, 5, 5, 5, $code, $fg);
|
||||
echo ' <img width="55" height="24" alt="captcha image" src="data:image/gif;base64,';
|
||||
}else{
|
||||
$im=imagecreatetruecolor(55, 24);
|
||||
$bg=imagecolorallocate($im, 0, 0, 0);
|
||||
$fg=imagecolorallocate($im, 255, 255, 255);
|
||||
echo ' <img width="55" height="24" alt="'._('captcha image').'" src="data:image/gif;base64,';
|
||||
}elseif(CAPTCHA === 2){
|
||||
$im = imagecreatetruecolor(55, 24);
|
||||
$bg = imagecolorallocate($im, 0, 0, 0);
|
||||
$fg = imagecolorallocate($im, 255, 255, 255);
|
||||
imagefill($im, 0, 0, $bg);
|
||||
imagestring($im, 5, 5, 5, $code, $fg);
|
||||
$line=imagecolorallocate($im, 255, 255, 255);
|
||||
for($i=0;$i<2;++$i){
|
||||
$line = imagecolorallocate($im, 255, 255, 255);
|
||||
for($i = 0; $i < 2; ++$i){
|
||||
imageline($im, 0, mt_rand(0, 24), 55, mt_rand(0, 24), $line);
|
||||
}
|
||||
$dots=imagecolorallocate($im, 255, 255, 255);
|
||||
for($i=0;$i<100;++$i){
|
||||
$dots = imagecolorallocate($im, 255, 255, 255);
|
||||
for($i = 0; $i < 100; ++$i){
|
||||
imagesetpixel($im, mt_rand(0, 55), mt_rand(0, 24), $dots);
|
||||
}
|
||||
echo ' <img width="55" height="24" alt="captcha image" src="data:image/gif;base64,';
|
||||
echo ' <img width="55" height="24" alt="'._('captcha image').'" src="data:image/gif;base64,';
|
||||
}else{
|
||||
$im = imagecreatetruecolor(150, 200);
|
||||
$bg = imagecolorallocate($im, 0, 0, 0);
|
||||
$fg = imagecolorallocate($im, 255, 255, 255);
|
||||
imagefill($im, 0, 0, $bg);
|
||||
$line = imagecolorallocate($im, 100, 100, 100);
|
||||
for($i = 0; $i < 5; ++$i){
|
||||
imageline($im, 0, mt_rand(0, 200), 150, mt_rand(0, 200), $line);
|
||||
}
|
||||
$dots = imagecolorallocate($im, 200, 200, 200);
|
||||
for($i = 0; $i < 1000; ++$i){
|
||||
imagesetpixel($im, mt_rand(0, 150), mt_rand(0, 200), $dots);
|
||||
}
|
||||
$chars = [];
|
||||
for($i = 0; $i < 10; ++$i){
|
||||
$found = false;
|
||||
while(!$found){
|
||||
$x = mt_rand(10, 140);
|
||||
$y = mt_rand(10, 180);
|
||||
$found = true;
|
||||
foreach($chars as $char){
|
||||
if($char['x'] >= $x && ($char['x'] - $x) < 25){
|
||||
$found = false;
|
||||
}elseif($char['x'] < $x && ($x - $char['x']) < 25){
|
||||
$found = false;
|
||||
}
|
||||
if(!$found){
|
||||
if($char['y'] >= $y && ($char['y'] - $y) < 25){
|
||||
break;
|
||||
}elseif($char['y'] < $y && ($y - $char['y']) < 25){
|
||||
break;
|
||||
}else{
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$chars []= ['x', 'y'];
|
||||
$chars[$i]['x'] = $x;
|
||||
$chars[$i]['y'] = $y;
|
||||
if($i < 5){
|
||||
imagechar($im, 5, $chars[$i]['x'], $chars[$i]['y'], $captchachars[mt_rand(0, $length)], $fg);
|
||||
}else{
|
||||
imagechar($im, 5, $chars[$i]['x'], $chars[$i]['y'], $code[$i-5], $fg);
|
||||
}
|
||||
}
|
||||
$follow=imagecolorallocate($im, 200, 0, 0);
|
||||
imagearc($im, $chars[5]['x']+4, $chars[5]['y']+8, 16, 16, 0, 360, $follow);
|
||||
for($i = 5; $i < 9; ++$i){
|
||||
imageline($im, $chars[$i]['x']+4, $chars[$i]['y']+8, $chars[$i+1]['x']+4, $chars[$i+1]['y']+8, $follow);
|
||||
}
|
||||
echo ' <img width="150" height="200" alt="'._('captcha image').'" src="data:image/gif;base64,';
|
||||
}
|
||||
ob_start();
|
||||
imagegif($im);
|
||||
|
Reference in New Issue
Block a user