Забыли пароль?
Запросите новый здесь.

Автор темы: Rikki
ID темы: 2516
Информация:
Тема содержит 25 сообщения, была просмотрена 33993 раз.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Народное творчество
 Распечатать тему
Суперклевая g-recaptcha
Rikki
Доброго времени суток, уважаемые форумчане!
Представляю вашему вниманию обновленную recaptcha, получите здесь ключи:
https://www.googl...index.html
установка очень проста:
этот код в maincore:
Загрузить источник  GeSHi: PHP
  1. function getCurlData($url) {
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, $url);
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($curl, CURLOPT_TIMEOUT, 10);
  6. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16");
  7. $curlData = curl_exec($curl);
  8. curl_close($curl);
  9. return $curlData;
  10. }
Добавлено за 0.030 секунд, используя GeSHi 1.0.8.10

этот код на страницу где будет форма с проверкой:
Загрузить источник  GeSHi: PHP
  1. add_to_head("<script src='https://www.google.com/recaptcha/api.js'></script>\n");
  2. .....
  3. if (!isset($_POST['g-recaptcha-response']) || empty($_POST['g-recaptcha-response'])) {
  4. НЕ ПРОШЛИ ЗАЩИТУ
  5. } else {
  6. $google_url="https://www.google.com/recaptcha/api/siteverify";
  7. $secret='YOURS google secret key';
  8. $url=$google_url."?secret=".$secret."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR'];
  9. $res=getCurlData($url);
  10. $res= json_decode($res, true);
  11. if($res['success']) {
  12. ОТПРАВКА В БАЗУ ИЛИ ДРУГИЕ ДЕЙСТВИЯ
  13. } else {
  14. НЕ ПРОШЛИ ЗАЩИТУ
  15. }
  16. }
  17. }
  18.  
  19.  
Добавлено за 0.025 секунд, используя GeSHi 1.0.8.10

сама капча
Загрузить источник  GeSHi: PHP
  1. echo "<div class='g-recaptcha' data-sitekey=ваш публичный ключ' data-size='compact'></div>\n";
Добавлено за 0.018 секунд, используя GeSHi 1.0.8.10

смотреть пример: http://rikki.xp3....&id3=0
источники:
http://ruseller.c...mp;id=2178
http://www.9lesso...e-you.html
менять настройки:
https://developer...cs/display

x1 x1 x1 x1 x1
 
lucky
строка:
Скачать исходники  Код
if (!isset($_POST['g-recaptcha-response']) || empty($_POST['g-recaptcha-response'])) {




а чем Вас не устраивает такая проверка:
Скачать исходники  Код
if (empty($_POST['g-recaptcha-response'])) {




для справки - http://php.net/manual/ru/function.empty.php

 
Rikki
lucky, это 200% уверенность)

 
lucky
ясно ))

 
Rikki
lucky, ну вот нашла подтверждение http://php.ru/for...hp?t=34304 empty медленнее, а если на тебя натравили много ботов, то я думаю имеет значение, что первым отмахивает isset, а empty здесь скорей на случай сбоя при обработке переменной, не знаю, разработчики ее ставят значит нужна, там у них такого пугающего размера js скрипт, что я его сразу и закрыла


Изменил(а) Rikki, 20.06.2015 13:43
 
Pisatel
Вообще, это разные проверки. Перевод:
если (пост-запрос g_recaptcha_response не задан/отсутствует) или (пост-запрос g_recaptcha_response пуст))


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rikki
Pisatel, empty может выполнять функцию isset, а если разработчики используют empty, значит по каким-то причинам post может быть пуст

 
Pisatel
empty и isset - это не функции, а языковые конструкции. Скорость здесь вообще ни при чем, по ссылке выше на форуме вообще бред какой-то про скорость. А если даже допустить это, то в конкретном случае это ничто. Повторяю: в условии делается две разных проверки: на наличие и на пустоту, и это правильно в данном случае.


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rikki
empty и isset - это не функции, а языковые конструкции
тогда поправьте ребят на этом ресурсе http://www.php.su...s/?cat=var
а здесь правильно http://php.net/ma...ctions.php
и вообще я не называла их функциями, я имела ввиду сходный функционал
даже допустить это, то в конкретном случае это ничто
если автозапросы с 10000 компьютеров, то не такое уж ничто
сделать такую каку элементарно, берешь обычный сетевой сканер и комп с мощным процем вставляешь код регистрации в нужной форме и за 5-15сек в зависимости от набраных проксиков регишся в форме с капчей и тд в зависимости от цели, все тестировать надо, времени нет, поэтому лучше подстраховаться и поставить так как у меня в скрипте


Изменил(а) Rikki, 20.06.2015 16:21
 
Razor
lel, empty и isset - это функции.
Удивительное рядом, вот официальная либа от гугла.
Загрузить источник  GeSHi: PHP
  1.  
  2. $recaptcha = new \ReCaptcha\ReCaptcha($secret);
  3. $resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
  4. if ($resp->isSuccess()) {
  5. // verified!
  6. } else {
  7. $errors = $resp->getErrorCodes();
  8. }
  9.  
Добавлено за 0.022 секунд, используя GeSHi 1.0.8.10


Sr. Software developer
plesk.com
 
Pisatel
lel, правь ман тада
Примечания
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Razor
И что?
Данное примечание говорит о том, что это встроенная в среду функция и не может быть вызвана с помощью переменных функций, т.е. нельзя сделать так:
Скачать исходники  Код

function empty() {
   
    return true;
}


$func = 'empty';
 
$func();       




Т.к. данные _функции_ уже зарезервированы и реализованы средой. И использовать их через переменные функции, можно только через свои функции-обёртки.
И если мы внимательно будем читать мануал, можно даже просто взглянуть на ссылку http://php.net/manual/ru/function.empty.php
скрин1
скрин2
И напоследок, если вот такая конструкция, вам не напоминает вид функции: bool empty ( mixed $var ), то я умываю руки.
lel.


Sr. Software developer
plesk.com
 
Polarfox
Ок, померялись, но мне кажется это оффтоп.


Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Pisatel
То, что isset и empty ведут себя как функции не значит, что они оными являются, к сожалению. Это языковые конструкции: die, exit, echo, print, isset unset, include, include_once, require, require_once, empty, eval, list, return. Некоторые языковые конструкции можно использовать без круглых скобок, и это можно отнести к различиям языковых конструкций и функций. Если мы посмотрим ман к echo, то тоже, к своему удивлению обнаружим, что его поведение похоже на функцию, да и раздел тоже function.echo.php, но мы ж не станем утверждать, что это функция, м? Честно говоря, я не знаю, чем конкретно обусловлено то, что empty и isset являются языковыми конструкциями, а не функциями. Возможно, это наследие других яп'ов, возможно что-то еще: разбираться и искать первопричину банально лень.
Можно еще долго рассуждать на эту тему, но мы сделаем проще:
Загрузить источник  GeSHi: PHP
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10

Смотрим и удивляемся.
... я умываю руки
Та хоть ноги. lel ))
... померялись...
даже не доставал, Кэп )))


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rush
языковые конструкции пхп это просто зарезервированные функции, о чем спор вообще?


x1
 
Web
Razor
Pisatel написал:

То, что isset и empty ведут себя как функции не значит, что они оными являются, к сожалению.

К сожалению они таковыми являются:(
Вот _функция_ empty и isset(2 в 1 прям), можете воочию на неё посмотреть.
Ссылка на исходник.
Загрузить источник  GeSHi: PHP
  1.  
  2. void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */
  3. {
  4. zend_ast *var_ast = ast->child[0];
  5.  
  6. znode var_node;
  7. zend_op *opline = NULL;
  8.  
  9. ZEND_ASSERT(ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY);
  10.  
  11. if (!zend_is_variable(var_ast) || zend_is_call(var_ast)) {
  12. if (ast->kind == ZEND_AST_EMPTY) {
  13. /* empty(expr) can be transformed to !expr */
  14. zend_ast *not_ast = zend_ast_create_ex(ZEND_AST_UNARY_OP, ZEND_BOOL_NOT, var_ast);
  15. zend_compile_expr(result, not_ast);
  16. return;
  17. } else {
  18. zend_error_noreturn(E_COMPILE_ERROR,
  19. "Cannot use isset() on the result of an expression "
  20. "(you can use \"null !== expression\" instead)");
  21. }
  22. }
  23.  
  24. switch (var_ast->kind) {
  25. case ZEND_AST_VAR:
  26. if (zend_try_compile_cv(&var_node, var_ast) == SUCCESS) {
  27. opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_VAR, &var_node, NULL);
  28. opline->extended_value = ZEND_FETCH_LOCAL | ZEND_QUICK_SET;
  29. } else {
  30. opline = zend_compile_simple_var_no_cv(result, var_ast, BP_VAR_IS, 0);
  31. opline->opcode = ZEND_ISSET_ISEMPTY_VAR;
  32. }
  33. break;
  34. case ZEND_AST_DIM:
  35. opline = zend_compile_dim_common(result, var_ast, BP_VAR_IS);
  36. opline->opcode = ZEND_ISSET_ISEMPTY_DIM_OBJ;
  37. break;
  38. case ZEND_AST_PROP:
  39. opline = zend_compile_prop_common(result, var_ast, BP_VAR_IS);
  40. opline->opcode = ZEND_ISSET_ISEMPTY_PROP_OBJ;
  41. break;
  42. case ZEND_AST_STATIC_PROP:
  43. opline = zend_compile_static_prop_common(result, var_ast, BP_VAR_IS, 0);
  44. opline->opcode = ZEND_ISSET_ISEMPTY_VAR;
  45. break;
  46. EMPTY_SWITCH_DEFAULT_CASE()
  47. }
  48.  
  49. result->op_type = opline->result_type = IS_TMP_VAR;
  50. opline->extended_value |= ast->kind == ZEND_AST_ISSET ? ZEND_ISSET : ZEND_ISEMPTY;
  51. }
  52. /* }}} */
  53.  
Добавлено за 0.026 секунд, используя GeSHi 1.0.8.10


Rush написал:
о чем спор вообще?

Если в 2 словах, точнее в одно - ниочем.


Изменил(а) Razor, 26.06.2015 18:54
Sr. Software developer
plesk.com
 
Rikki
Razor, в фреймворке можно что угодно накомпилировать, я не спорю, мне если честно пофигу, так просто, раз пошла такая пляска. Не самое весомое доказательство, аргументация Rusha больше подходит, просто принять это за аксиому и успокоиться

 
Razor
Rikki написал:

Razor, в фреймворке можно что угодно накомпилировать, я не спорю, мне если честно пофигу, так просто, раз пошла такая пляска. Не самое весомое доказательство, аргументация Rusha больше подходит, просто принять это за аксиому и успокоиться

В каком фреймворке?


Sr. Software developer
plesk.com
 
Rikki

 
Razor
Это исходники языка php, а тот кусок что я скинул - это как раз реализация тех самых функций empty и isset.
Это не zend framework, вы путаете немножко.


Sr. Software developer
plesk.com
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Топ 5 пользователей форума
Zaxap Zaxap (1,090)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)   SchreiBear SchreiBear (625)