2010-12-08 1 views
1

Я пытаюсь найти лучший способ санации и проверки ключа reCAPTCHA. Проблема в том, что у меня нет большой информации о том, как формируются ключи. Я думаю, что лучший способ - это просто проверить, содержит ли строка 40 указателей длиной и содержит буквы, цифры, тире и символы подчеркивания. Вот информация, которую я имею в документах.validate reCAPTCHA Key

invalid-site-public-key: Вы обязательно скопировали весь ключ со всеми дефисами и подчеркиваниями, но без пробелов? Ключ должен составлять ровно 40 букв. Source

Мой открытый ключ выглядит следующим образом 6Ler570SAAAAAOfjh3CNFPtuBSH_QdavHc5x_JUv Я просто беспокоюсь о написании проверки, которая является слишком строгим и не позволит некоторым людям использовать плагин, который я пишу.

Это то, что я использую сейчас, но не уверен, есть ли лучший способ.

if($recaptcha_public_key) { 
    //validate the key 
     $recaptcha_public_key = filter_var($recaptcha_public_key, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/[0-9a-zA-Z_-]{40}/"))); 
    // Update value in database 
    update_option('recaptcha_public_key', $recaptcha_public_key); 
} 

Спасибо!

ответ

1

Что у вас ("/[0-9a-zA-Z_-]{40}/") так же строги, как и вы. Точка ключа заключается в том, что она случайна - если она соответствует строгому набору правил форматирования, ее легко взломать.

Не анализируя набор открытых ключей, справедливо предположить, что каждый символ полностью случайный в пределах набора [0-9a-zA-Z_-]. Даже если это предположение неверно и существует более конкретный шаблон, это, вероятно, изменится в какой-то момент в будущем, поэтому не рекомендуется передавать ваше приложение в текущий шаблон.

2

Почему вы проверяете это самостоятельно? Вы не попадаете в свою базу данных с информацией или отображаете ее на странице? Если вы помещаете его на страницу html, закодируйте его, и это должно предотвратить запуск формы скриптов.

Вы должны просто отправить его третьему лицу, используя http://www.google.com/recaptcha/api/verify, и он будет его проверять (как указано в http://code.google.com/apis/recaptcha/docs/verify.html).

+0

Я создаю плагин для YOURLS и на странице администратора. У меня есть пользователь, который вводит свой закрытый и открытый ключ, который хранится в базе данных, пока мне не нужно получить ключи, чтобы проверить капчу. – BandonRandon 2010-12-09 22:53:19

0

Это кажется идеальным

if(preg_match('#^6[0-9a-zA-Z_-]{39}$#', $key)){ 
    // Valid key 
} 

Это текущие условия ключей:

  • 40 символов
  • начать с "6"
  • только буквенно-цифровые, подчеркивание и тире знаков
+0

Спасибо за ваш ответ. Однако ключ не всегда начинается с 6, что было просто примером. Хотя я понимаю, что ваш ответ в основном касался проверки регулярных выражений, которую я хотел бы упомянуть, поскольку этот вопрос сейчас составляет 6 лет, Google/reCAPCHA больше не использует [секретную проверку маркера] (https://developers.google.com/recaptcha/документы/secure_token). Вместо этого они используют [Проверка имени домена] (https://developers.google.com/recaptcha/docs/domain_validation) – BandonRandon 2016-11-18 20:54:51

Смежные вопросы