Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
С недавних пор эта штука работает здесь, на форуме "Русское сообщество fluxbb". Название было трудно придумать, поэтому назову просто по заметной особенности: это такая каптча, которую реально выделить мышкой и скопировать-вставить.
Как такое может быть и неужели такая каптча может защищать? По факту — да, она работает. В ней заложены такие ключевых идеи:
универсальные регистрационные боты ищут картинку — у нас её не будет
в отличие от ботов, человек видит в браузере только то, что не скрыто стилями — используем это
раз уж мы видим не то же самое, что бот, незачем делать этот образ плохо различимым
используем те же механизмы, что и авторизация fluxbb: куки "подпиcанные" секретным ключем, устаревающим по времени.
дополнительных зависимостей вроде новых таблиц, сессии или javascript не будет!
<strong class="masq"><i>R</i><i>S</i><i>D</i><i>1</i><i>m</i><i>j</i><i>M</i></strong>
При этом некоторые из элементов <i> сделаны невидимыми. Поэтому мы видим
RDmjM, а не
RSD1mjM.
Скачайте ZIP и распакуйте во временное место.
Если у вас fluxbb v1.5.9 без модов, то можете просто скопировать файлы из папки /files/ поверх ваших. Если версия другая, кастомная сборка или ставились моды, то НЕ копируйте, а меняйте всё по инструкции из readme.txt!
Edited: используйте релиз 1.0.1, с ним можно ничего не редактировать и не менять в ядре.
http://fluxbb.org/resources/mods/copyable-captcha/
http://fluxbb.org/forums/viewtopic.php?id=8738
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
@artoodetoo, надо было капчу делать в виде расширения, чтобы код файла не менять
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Это интересно. Ты имеешь в виду эту хрень addons? Как раз думал спросить: у неё вообще есть примеры применения?
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
@artoodetoo, я на основе каптчи от Франца делал свои расширения.
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Лениво что-то менять. Это сделал только потому что ты попросил на форум что-то такое поставить.
И вообще не фанат флаксбб.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
P.S. Если поможешь, я буду благодарен. Конечно хуки это прогрессивно, они облегчают обновления.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
1. Файл /addons/copyable_captcha.php
<?php
/**
* Copyright (C) 2016
* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
*/
class addon_copyable_captcha extends flux_addon
{
var $lang;
var $user_lang;
var $styles;
var $spans;
function register($manager)
{
global $pun_user;
if (!$pun_user['is_guest']) return;
$this->user_lang = $pun_user['language'];
$manager->bind('register_after_validation', array($this, 'hook_register_after_validation'));
$manager->bind('register_before_header', array($this, 'hook_register_before_header'));
$manager->bind('register_before_submit', array($this, 'hook_register_before_submit'));
}
function load_lang()
{
if (is_array($this->lang)) return;
if (file_exists(PUN_ROOT.'lang/'.($this->user_lang).'/copyable_captcha.php'))
require PUN_ROOT.'lang/'.($this->user_lang).'/copyable_captcha.php';
else
require PUN_ROOT.'lang/English/copyable_captcha.php';
$this->lang = $lang;
}
function hook_register_after_validation()
{
global $errors, $cookie_seed;
if (isset($_POST['req_word']) && isset($_COOKIE['sign']) && substr_count($_COOKIE['sign'], '-') === 1) { // strpos($_COOKIE['sign'], '-')
list($hash, $time) = explode('-', $_COOKIE['sign']);
$word = $_POST['req_word'];
if ((int)$time <= time() - 120 || $hash !== sha1(strtolower($word).$cookie_seed.'secret'.$time)) {
$this->load_lang();
$errors[] = $this->lang['Captcha error'];
}
} else {
$this->load_lang();
$errors[] = $this->lang['Captcha error'];
}
}
function hook_register_before_header()
{
global $required_fields, $errors, $cookie_seed;
$this->load_lang();
$required_fields['req_word'] = $this->lang['Captcha'];
$time = time();
$word = random_pass(mt_rand(4, 6));
$hash = sha1(strtolower($word).$cookie_seed.'secret'.$time);
setcookie('sign', $hash.'-'.$time, 0, '/');
$array = str_split($word);
$mixin = random_pass(mt_rand(1, 3));
$i = -1;
$this->styles = '';
foreach (str_split($mixin) as $ch) {
$i = mt_rand($i+1, count($array));
array_splice($array, $i, 0, $ch);
$this->styles .= '.masq i:nth-child('.($i + 1).'){display:none;} ';
}
$this->spans = '<i>'.implode('</i><i>', $array).'</i>';
}
function hook_register_before_submit()
{
global $lang_common;
$this->load_lang();
?>
<div class="inform">
<fieldset>
<legend><?php echo $this->lang['Captcha legend'] ?></legend>
<div class="infldset">
<style> .masq i {font-style:normal;} <?php echo $this->styles ?></style>
<p><?php echo sprintf($this->lang['Captcha info'], $this->spans) ?></p>
<label class="required"><strong><?php echo $this->lang['Captcha'] ?> <span><?php echo $lang_common['Required'] ?></span></strong><br /><input type="text" name="req_word" size="25" maxlength="25" /><br /></label>
</div>
</fieldset>
</div>
<?php
}
}
2. Файл /lang/English/copyable_captcha.php
<?php
$lang = array (
// Captcha
'Captcha' => 'Captcha',
'Captcha legend' => 'Confirm that you\'re not robot',
'Captcha info' => 'Captcha is valid for 2 min only. Refresh page if needed.<br />Please enter this characters: <strong class="masq">%1$s</strong>',
'Captcha error' => 'Wrong or expired captcha',
);
3. Файл /lang/Russian/copyable_captcha.php
<?php
$lang = array (
// Captcha
'Captcha' => 'Каптча',
'Captcha legend' => 'Подтвердите, что вы не робот',
'Captcha info' => 'Каптча действительна только в течении 2 мин. Обновите страницу если надо.<br />Пожалуйста введите эти символы: <strong class="masq">%1$s</strong>',
'Captcha error' => 'Неправильная или устаревшая каптча',
);
Моя сборка FluxBB 1.5, ForkBB · сообщество
Offline
Большое спасибо! Оформил так с небольшими изменениями.
http://fluxbb.org/resources/mods/copyab … ses/1.0.1/
https://github.com/fluxbb-org-ru/copyable-captcha
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Offline
Страницы 1