1

Тема: phpMyAdmin и CAPTCHA

Помогите прикрутить CAPTCHA к phpMyAdmin  по авторизации cookie

2

Re: phpMyAdmin и CAPTCHA

viktor6
Если проблема в том, что подбирают к phpMyAdmin пароль, то лучшим решением будет закрыть каталог с помощью .htaccess

3

Re: phpMyAdmin и CAPTCHA

Hanut
Шеф сказал поставит CAPTCHA и не хочет не чего другого слышать

4

Re: phpMyAdmin и CAPTCHA

viktor6
Если у вас есть какие-то наработки, то покажите где возникли трудности, может смогу что-нибудь подсказать. Но уже готовых решений я не знаю.

5

Re: phpMyAdmin и CAPTCHA

Hanut
Особых наработок нету, есть то, что я пробовал.

Использовал Kcaptha http://www.captcha.ru/kcaptcha/
phpmyadmin размещаю в корне веб-сервера
Потом нашол что поля (логин, пароль) на авторизацию по методу cookie находятся в файле /libraries/auth/cookie.auth.lib.php

И вот после строчки запроса логина и пароля вставил код (270 строка):

        <div class="item">
            <label><?php echo $GLOBALS['strKCaptcha']; ?></label>
            <input type="text" name="keystring" size="8">
            <img src="./kcaptcha/?<?php echo session_name()?>=<?php echo session_id()?>">
        </div>

* Где $GLOBALS['strKCaptcha'] - переменная языкового файла (в языковый файл добавил $strKCaptcha = 'Введите код с картинки'; )

Продолжаем по файлу /libraries/auth/cookie.auth.lib.php
После строк где проверка коректности логина и пароля, добавил (стока 521):

    //kcaptcha

    if (isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
        return true;
    }else{
        return false;
    }
    unset($_SESSION['captcha_keystring']);

В результате капча не работает: авторизация проходит без участия капчи...

Увадаемые форумчане, Hanut, буду рад за любую помощь!
Заранее спасибо!

6

Re: phpMyAdmin и CAPTCHA

ashasmod
По сути все правильно вы делали при редактировании /libraries/auth/cookie.auth.lib.php. Попробуйте простой вариант, который отправил вам на почту, при желании его можно существенно улучшить, но и сейчас он вполне рабочий. Папку img с файлами img.php и arialbd.ttf, положите в корень phpMyAdmin.

Поле ввода с динамичной картинкой кода (270 строка).

        <div class="item">
            <label>Test</label>
            <input type="text" name="keystring" size="8">
            <img src="img/img.php?" style="cursor: pointer;" alt="" onclick="javascript:this.src+=Math.ceil(Math.random()*10);" />
        </div>

Проверка. Строка 455. Перед:
    if (! empty($_REQUEST['pma_username'])) {

if (isset($_POST['keystring']) && md5($_POST['keystring']) != $_SESSION['code_session']) {
    return false;
}

После того, как внесете изменения в скрипт, обязательно почистите кеш и куки браузера.

Генерация картинки. Файл /img/img.php

<?php

header('Content-Type: image/png');
header('Cache-control: no-cache, no-store');

session_name('phpMyAdmin');
session_start();
$im       = imagecreatetruecolor(120, 30);
$white    = imagecolorallocate($im, 255, 255, 255);
$black    = imagecolorallocate($im, 0, 0, 0);
$font     = 'arialbd.ttf';
imagefilledrectangle($im, 0, 0, 119, 29, $white);
$code = '';
$j = 10;

for($i = 0; $i < 5; $i++) {
    $number = mt_rand(0, 9);
    $color = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
    imagettftext($im, mt_rand(15, 25), mt_rand(-20, 20), $j, 25, $color, $font, $number);
    $j += mt_rand(15, 23);
    $code .= $number;
}

while($i < 500) {
    imagesetpixel($im, mt_rand(0, 120), mt_rand(0, 30), $black);
    $i++;
}

$_SESSION['code_session'] = md5($code);
imagepng($im);
imagedestroy($im);
exit();

?>

7

Re: phpMyAdmin и CAPTCHA

Hanut
Спасибо за помошь, все работает!
Благодаря вам уже есть готовое решение!
А дальше можно усовершенствовать, по желанию!