OK, here's the full code that creates the image password:
$cities = "cities.txt"; # number/letters - city correspondences
$cities_st = "cities_st.txt"; # city standard file
$tmp = "temp.txt"; # temp file to keep the password
# choose random letters or numbers
@array = (0..9,a..z,A..Z);
srand;
foreach (1..5) {
$rand = int(rand scalar(@array));
push (@selected, $rand);
}
# save the chosen password to file
open TMP, ">$tmp";
print TMP @selected;
close TMP;
# open file with number/letter - cities correspondences
open CITIES, $cities;
while (<CITIES>) {
for ($x; $x<5; $x++) {
$match = $selected[$x];
if (/\+$match\+(\w+)/) {$selected[$x] = $1;}
}
}
close CITIES;
# erase file with number/letter - city correspondences
unlink $cities;
# read "cities_st.txt"
open CITIES_ST, $cities_st;
while (<CITIES_ST>) {
/(\w+)/;
push (@cities, $1);
}
close CITIES_ST;
# randomize cities
foreach (0..99) {
$rand = int(rand scalar(@cities));
splice (@cities, $rand, 1);
push (@cities, $_);
}
# create new "cities.txt"
open CITIES, ">$cities";
foreach (a..z) {
$city = 0;
$out = "+",$_,"+",$cities[$city];
$city++;
print CITIES $out;
}
foreach (A..Z) {
$city = 26;
$out = "+",$_,"+",$cities[$city];
$city++;
print CITIES $out;
}
foreach (0..9) {
$city = 51;
$out = "+",$_,"+",$cities[$city];
$city++;
print CITIES $out;
}
close CITIES;
# print the html code
for ($i; $i<5; $i++){
print "<img src='image_dir/$selected[$i].jpg' border=0>";
}
No hidden field is involved, which, of course, would have compromised any kind of security. The script that is called to check the password will read it from the $tmp file, erase it, and erase/create all the image files based on the file ($cities) that contains the new correspondences.
I don't think there is a way that a bot or even a mischievous individual could bypass this password check without hacking into the system first.
PS: Of course, the code that changes the correspondences is only included here for reference purposes. It should be included in the second perl script that checks the password as $cities should change together with the image files. |