#!/usr/bin/perl -w use strict; use CGI; use XML::DOM; use URI::Escape; sub AbortWithMessage { my ($msg) = @_; print STDOUT "Content-type: text/plain\n\n"; print "$msg\n"; die $msg; } sub ValidateAsirraChallenge { my ($cgi) = @_; my $ticket = $cgi->param("Asirra_Ticket"); if (!defined($ticket)) { AbortWithMessage("No ticket"); } my $AsirraServiceUrl = "http://challenge.asirra.com/cgi/Asirra"; my $url = $AsirraServiceUrl."?action=ValidateTicket&ticket=".$ticket; my $parser = new XML::DOM::Parser; my $dom = $parser->parsefile($url); my $value = (($dom->getElementsByTagName("Result"))[0]->getChildNodes())[0]->getData(); if ($value eq "Pass") { return; } AbortWithMessage("Asirra validation failed!"); } sub main() { my $cgi = new CGI; ValidateAsirraChallenge($cgi); my $UserName = uri_escape($cgi->param("UserName")); my $FavoriteColor = uri_escape($cgi->param("FavoriteColor")); print STDOUT "Content-type: text/html\n\n"; print STDOUT <<__EOF__; ExampleService.pl Result. Welcome, new user $UserName! You are a human! And your favorite color is $FavoriteColor. __EOF__ print STDOUT <<__EOF__; __EOF__ } main();