Капча с Google AppEngine

У меня есть веб-сайт, на котором i want to put a custom made captcha нельзя использовать онлайн-сервисы проверки подлинности из-за необходимости макета. Он работает на Google appengine. Есть ли в appengine API что-то для написания символов на данном изображении?

Я прошел через appengine Python Image API, но это не очень помогло .

Любые предложения, как генерировать капчу в инфраструктуре Google appengine?


person Shiv Deepak    schedule 15.10.2010    source источник


Ответы (5)


Как правило, вы не можете.

Image API предназначен для преобразования существующих изображений, а не для создания новых.

Теоретически, если бы вы нашли чистую библиотеку для создания образов Python, она бы работала в App Engine, но работала бы медленно.

Почему бы просто не использовать внешний сервис CAPTCHA?

person Drew Sears    schedule 15.10.2010
comment
знаете ли вы какой-нибудь сервис проверки капчи, который предоставляет варианты цвета и макета? я думаю, что ReCaptcha не делает. - person Shiv Deepak; 15.10.2010
comment
Python/GAE не является идеальным языком для создания растровых изображений и тому подобного из-за соображений производительности, поэтому я думаю, что найти библиотеку для этого сложно. Может быть, вы можете сделать капчу с помощью CSS, холста HTML5 или SVG или чего-то еще? - person pthulin; 19.10.2010

Быстрый поиск в Google предоставит вам множество руководств по интеграции служб перехвата данных с вашим приложением AppEngine. Вот один, использующий reCaptcha.

person Adam Crossland    schedule 15.10.2010
comment
я хочу сгенерировать его самостоятельно в самом appengine custom captcha, я знаю о recaptcha и использовал его много раз, но на этот раз я должен ограничить размер изображения + пользовательские цвета. поэтому я не могу полагаться на какой-либо сервис .. - person Shiv Deepak; 15.10.2010
comment
Нет хороших ответов на то, что вы хотите сделать. Как отмечает @Drew, вы ограничены чистым Python, и выполнение работы по созданию осмысленно сложной для решения капчи займет много времени, и это встречный вариант использования AppEngine. - person Adam Crossland; 15.10.2010
comment
спасибо .. вместо этого мне нужно попробовать такой модуль python .. я знаю, что это займет время, но он нужен моему клиенту .. знаете ли вы какой-либо такой модуль .. альтернатива PHP GD Library. - person Shiv Deepak; 15.10.2010
comment
@Idlecool, я не удивлюсь, если есть какие-то чистые библиотеки Python для создания изображений, но я лично не использовал ни одну из них, поэтому не могу порекомендовать. Тем не менее, в заключение я хотел бы предложить вам, как эксперту в предметной области вашего клиента, сделать сильный толчок, чтобы отговорить их от создания собственного решения по капче. Это ужасная идея на многих уровнях. Сделайте им большую услугу и откажитесь от этого требования. - person Adam Crossland; 15.10.2010
comment
@Adam: необходимо, чтобы у капчи был собственный фон / текст + макет, который должен соответствовать веб-сайту, который я не могу получить от recaptcha или любого другого сервиса. Я работал над пользовательской капчей в прошлом. но на пхп. теперь я работаю над appengine .. тоже новичок в веб-разработке python .. означает ли чистый модуль python, что сам модуль должен содержать только скрипты python без файлов c или другого? - person Shiv Deepak; 15.10.2010
comment
@Idlecool, чистый Python означает, что вы можете использовать только библиотеки, которые на 100% состоят из Python, поэтому вы не можете использовать библиотеку Python, которая является просто оболочкой для некоторого C или C ++. Это значительно сократит ваши возможности, и я не удивлюсь, если графические операции, необходимые для создания эффективной капчи, потребуют больше времени и ресурсов ЦП, чем это практично для приложения AppEngine. - person Adam Crossland; 15.10.2010

Вместо создания собственного импл. Я рекомендую использовать надежный сервис, такой как reCaptcha: http://www.google.com/recaptcha.

person Alois Cochard    schedule 15.10.2010
comment
мне это нужно в эстетических целях. можно рассчитывать на любые услуги. - person Shiv Deepak; 15.10.2010
comment
У вас есть эстетические ограничения на вашу captcha? Хм? - person Nick Johnson; 15.10.2010
comment
@Nick: веб-сайт двухцветный.. не может испортить внешний вид. :) - person Shiv Deepak; 16.10.2010
comment
@Idlecool И это действительно самое важное соображение при внедрении CAPTCHA? Сверх безопасности? - person Nick Johnson; 18.10.2010
comment
@Nick: Не совсем так, но реализация общей капчи не требует большого опыта. Я не управляю Google или Facebook, чтобы сильно беспокоиться о спаме, даже если я столкнусь с большим количеством спама в будущем, я могу легко заменить его recaptcha или я улучшу свою собственную captcha до отметки. - person Shiv Deepak; 18.10.2010
comment
Внедрение капчи, которую автоматическая система не взломает тривиально, действительно требует опыта. Если вас не слишком беспокоит спам, используйте что-нибудь попроще, например, попросите пользователей повторить слово или ответить на простой вопрос. - person Nick Johnson; 19.10.2010

Я бы предложил использовать сторонний сервис, такой как reCaptcha, но если вам действительно нужно предоставить свою собственную реализацию, вы можете использовать недавно представленную Matplotlib для GAE+Python для создания собственных изображений.

Matplotlib — это библиотека для построения графиков для Python, которая была недавно представлена ​​как часть GAE в декабре 2012 года. Вы можете использовать Matplotlib для рендеринга текста, как показано в этот пример. Если у вас есть эстетические ограничения на вашу капчу, вы можете отображать очень причудливый текст и числа с помощью Matplotlib. Посмотрите на этот пример.

person Jaime Ivan Cervantes    schedule 24.01.2013

Вы можете использовать следующий код для создания Captcha. Обратите внимание, что вы должны добавить commons-lang-2.5.jar в свой путь к классам.

        String secutiryCode = RandomStringUtils.random(5, new char[]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'});
        req.getSession().setAttribute("secutiryCode", secutiryCode);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        URL url = new URL("http://util.krispot.com/util/SecurityImage.jpg?secutiryCode=" + secutiryCode);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
            BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
            for(int i = bis.read(); i > -1;i = bis.read()) {
                baos.write(i);
            }
        BufferedOutputStream bos = new BufferedOutputStream(resp.getOutputStream());
        bos.write(baos.toByteArray());
        bos.close();

Спасибо, Навдип Сингх.

person user1788142    schedule 13.06.2013