Captcha с Google AppEngine

Имам уебсайт, където i want to put a custom made captcha, не мога да използвам онлайн captcha услуги поради необходимост от оформление. Работи на google appengine. Appengine API има ли нещо за писане на знаци върху дадено изображение?

Преминах през appengine Python Image API, но изглежда не е от голяма полза .

Някакви предложения как да генерирам captcha в инфраструктурата на google appengine?


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


Отговори (5)


Като цяло не можете.

API за изображения е предназначен за трансформиране на съществуващи изображения, а не за генериране на нови.

Теоретично, ако намерите чиста библиотека за създаване на изображения на Python, тя ще работи на App Engine, но ще бъде бавна.

Защо просто не използвате външна CAPTCHA услуга?

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

Бързо търсене в Google ще ви предостави много ръководства за интегриране на captch услуги с вашето приложение AppEngine. Ето едно, което използва reCaptcha.

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

Вместо да създадете свой собствен impl. Препоръчвам да използвате надеждна услуга като 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

Ето една изцяло php версия на кода на Saladin, използваща стандартния if/else синтаксис:

<?php
 if ($comment->user_ID) {
    echo "<div class='comment_registeredUser'>";
 }
 else { // The user is not logged in
    echo "<div class='commentdetails'>";
 }
?>

Поставянето на целия код в php поправи грешките при изпълнение за мен. Разбира се, това може да е било, защото правех нещо друго грешно.

- person Shiv Deepak; 16.10.2010
comment
@Idlecool И това наистина е най-важното съображение при прилагането на CAPTCHA? Над сигурността? - person Nick Johnson; 18.10.2010
comment
@Nick: Не точно, но прилагането на обща captcha не изисква много опит. Не управлявам google или facebook, за да се тревожа много за спам, дори ако се сблъскам с повече спам в бъдеще, мога лесно да го заменя с recaptcha или ще подобря собствената си captcha до марката. - person Shiv Deepak; 18.10.2010
comment
Внедряването на captcha, която не се разбива тривиално от автоматизирана система, наистина изисква опит. Ако не се притеснявате много от спама, използвайте нещо по-просто, като например да помолите потребителите да повторят дума или да отговорят на прост въпрос. - person Nick Johnson; 19.10.2010

Бих предложил да използвате услуга на трета страна като reCaptcha, но в случай, че наистина трябва да предоставите свое собствено внедряване, можете да използвате наскоро представения Matplotlib за GAE+Python, за да генерирате свои собствени изображения.

Matplotlib е библиотека за чертане за Python и наскоро беше представена като част от GAE през декември 2012 г. Можете да използвате Matplotlib за изобразяване на текст, както е показано в този пример. Ако имате естетически ограничения върху вашата captcha, можете да изобразите много фантастичен текст и числа с 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();

Благодаря ти, Navdeep Singh

person user1788142    schedule 13.06.2013