Botdetect Captcha(laravel-captcha)出错

时间:2018-04-05 07:29:20

标签: php laravel captcha cjk botdetect

我使用Laravel 5.5并且我有日语验证码的错误。

我找不到原因,有时它发生在最近几天(我没有改变任何东西):

  

未定义的偏移量:-1 {“exception”:“[object](ErrorException(code:0):   未定义的偏移量:-1 at   ... /供应商/验证码-COM /验证码/ LIB / botdetect / CaptchaIncludes.php:2)

#0 .../vendor/captcha-com/captcha/lib/botdetect/CaptchaIncludes.php(2): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'Undefined offse...', '/home/reportbea...', 2, Array)
#1 .../vendor/captcha-com/captcha/lib/botdetect/CaptchaIncludes.php(2): BDC_StringHelper::ConvertCharToCase('\\xE3\\x81\\xBE\\xE3\\x81\\xBF\\xE3\\x82\\x8F\\xE3\\x81\\x8D\\xE3\\x81\\x91', 1425)
#2 .../vendor/captcha-com/captcha/lib/botdetect/CaptchaIncludes.php(2): BDC_CodeCollection->Validate('\\xE3\\x81\\xAD\\xE3\\x81\\x8D\\xE3\\x82\\x8C\\xE3\\x81\\x8D\\xE3\\x82\\x82', '2f4e2c7bb45326e...', 1425, 1, 1200)
#3 .../vendor/captcha-com/captcha/lib/botdetect/CaptchaClass.php(2): BDC_CaptchaBase->Validate('\\xE3\\x81\\xAD\\xE3\\x81\\x8D\\xE3\\x82\\x8C\\xE3\\x81\\x8D\\xE3\\x82\\x82', '2f4e2c7bb45326e...', 1, false)
#4 [internal function]: Captcha->Validate('\\xE3\\x81\\xAD\\xE3\\x81\\x8D\\xE3\\x82\\x8C\\xE3\\x81\\x8D\\xE3\\x82\\x82', '2f4e2c7bb45326e...')
#5 .../vendor/captcha-com/laravel-captcha/src/BotDetectCaptcha.php(101): call_user_func_array(Array, Array)
#6 .../vendor/captcha-com/laravel-captcha/src/BotDetectCaptcha.php(101): call_user_func_array(Array, Array)
#7 .../vendor/captcha-com/laravel-captcha/src/Support/helpers.php(84): LaravelCaptcha\\BotDetectCaptcha->__call('Validate', Array)
#8 Modules/Admin/Http/Controllers/Auth/AdminLoginController.php(55): captcha_validate('\\xE3\\x81\\xAD\\xE3\\x81\\x8D\\xE3\\x82\\x8C\\xE3\\x81\\x8D\\xE3\\x82\\x82')
#9 [internal function]: Modules\\Admin\\Http\\Controllers\\Auth\\AdminLoginController->login(Object(Illuminate\\Http\\Request))
#10 .../vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#11 .../vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('login', Array)
#12 .../vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Modules\\Admin\\Http\\Controllers\\Auth\\AdminLoginController), 'login')
#13 .../vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): Illuminate\\Routing\\Route->runController()
#14 .../vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\\Routing\\Route->run()
#15 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#16 /app/Http/Middleware/RedirectIfAuthenticated.php(40): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#17 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\RedirectIfAuthenticated->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'admin')
#18 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#19 .../vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#20 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#21 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(67): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#23 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 .../vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#26 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 .../vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#28 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 .../vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#31 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 .../vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#34 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#37 .../vendor/laravel/framework/src/Illuminate/Routing/Router.php(660): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 .../vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#39 .../vendor/laravel/framework/src/Illuminate/Routing/Router.php(601): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#40 .../vendor/laravel/framework/src/Illuminate/Routing/Router.php(590): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#41 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#42 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#43 .../vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#44 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#45 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#46 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#47 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#50 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#51 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#52 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#53 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#54 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#55 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#56 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#57 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#58 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#59 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#60 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#61 .../public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))

请帮我解决这个问题,这对我来说非常重要。

谢谢&问候。

修改 我的功能

public function login(Request $request)
    {
        // Delete old session (error validation)
        $request->session()->forget('wrong_captcha');
        $request->session()->forget('wrong_fivetimes');

        $throttler = Throttle::get($request, env('LOGIN_TIMES'), env('WAITING_TIME'));
        // login fail > 5 times
        if(count($throttler) > 5) {
            // message input invalid over 5 times
            $request->session()->put('wrong_fivetimes', 'Input wrong 5 times!');
            return redirect()->back()->withInput();
        }

        // Get data from 'Login form'
        $email = filter_var($request['email'], FILTER_SANITIZE_STRING);
        $password = filter_var($request['password'], FILTER_SANITIZE_STRING);
        $captcha_code = filter_var($request['captcha_code'], FILTER_SANITIZE_STRING);
        $isHuman = captcha_validate($captcha_code);

        // Validate the form data
        $this->validate($request, [
            'email'   => 'required|email|max:255',
            'password' => 'required|min:6|max:100',
            'captcha_code' => 'required'
        ]);

        // check count fail times
        if(count($throttler) <= 5) {
            // admin input captcha code equal to generated captcha system
            if ($isHuman) {
                // Attempt to log the user in
                if (Auth::guard('admin')->attempt(['email' => $email, 'password' => $password])) {
                    Throttle::clear($request);

                    // if successful, then redirect to their intended location
                    return redirect()->intended('admin/dashboard');
                }
                // count up (login fail times)
                Throttle::hit($request);

                // if unsuccessful, then redirect back to the login with the form data
                return redirect()->back()->withInput($request->only('email'));
            }
            // count up (login fail times)
            Throttle::hit($request);

            // message input captcha code is wrong
            $request->session()->put('wrong_captcha', 'Input captcha is wrong!');
            return redirect()->back()->withInput();
        }
    }

1 个答案:

答案 0 :(得分:0)

我无法提供完整的答案,但也许我可以让你更近一点。

这里是ConvertCharToCase函数(变量名称被混淆,所以我用更容易阅读的东西替换它们):

<?php

function ConvertCharToCase($first_arg, $second_arg)
    {
    $second_arg_split = str_split(decbin($second_arg) , 1);
    $count_of_split = count($second_arg_split);
    $first_arg_split = str_split($first_arg, 1);
    $upperorlower = "";
    $result = "";
    for ($first_arg_strlen = strlen($first_arg) - 1; $first_arg_strlen >= 0; $first_arg_strlen--)
        {
        $second_arg_split_element = null;
        $second_arg_split_element = $second_arg_split[$count_of_split-- - 1];
        if ($second_arg_split_element != null && strcasecmp($second_arg_split_element, "\61") == 0)
            {
            $upperorlower = strtoupper($first_arg_split[$first_arg_strlen]);
            }
          else
            {
            $upperorlower = strtolower($first_arg_split[$first_arg_strlen]);
            }

        $result = $upperorlower . $result;
        }

    return $result;
}

echo ConvertCharToCase("\xE3\x81\xBE\xE3\x81\xBF\xE3\x82\x8F\xE3\x81\x8D\xE3\x81\x91", 1425);

?>

使用1425进行调用的确会打印出如下通知:

PHP Notice:  Undefined offset: -1 in /home/sneep/src/stackoverflow/japanese/captcha/test.php on line 13
PHP Notice:  Undefined offset: -2 in /home/sneep/src/stackoverflow/japanese/captcha/test.php on line 13
PHP Notice:  Undefined offset: -3 in /home/sneep/src/stackoverflow/japanese/captcha/test.php on line 13
PHP Notice:  Undefined offset: -4 in /home/sneep/src/stackoverflow/japanese/captcha/test.php on line 13
まみわきけ

通常,这些通知不会导致程序崩溃,但是您可能无意中打开了导致它们被视为错误的模式?

如果您需要一个起点,这是一个可以帮助您的主题:Laravel 5 Error Reporting Suppression