Member list and registration security? 1.0 This mod makes your YaBB more secure by: -Rebuilding memberlist if it ever should be zeroed out(sometimes YaBB does this when it receives a lot of signups) -Making sure that two registrations have to be delayed by x seconds where x is admin-settable Christer http://krikkert.dynu.net Sources/Register.pl fopen(FILE, ">$memberdir/memberlist.txt", 1); &CheckMemListSize; sub Register2 { ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat("$memberdir/memberlist.txt"); $nowtime = time; $resulttemp = $nowtime - $atime; if($resulttemp <= $register_timespan) { &fatal_error("$txt{'reg1'}"); } Sources/Memberlist.pl fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; fopen(MEMBERSLISTREAD,"$memberdir/memberlist.txt"); &CheckMemListSize; fopen(MEMBERLISTREAD,"$memberdir/memberlist.txt"); &CheckMemListSize; Sources/Load.pl fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; Sources/Admin.pl # Load member list &CheckMemListSize; fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; Sources/Post.pl fopen(FILE, "$memberdir/memberlist.txt") || &fatal_error("202 $txt{'106'}: $txt{'23'} memberlist.txt"); &CheckMemListSize; fopen(FILE, "$memberdir/memberlist.txt") || &fatal_error("206 $txt{'106'}: $txt{'23'} $memberlist.txt"); &CheckMemListSize; Sources/Profile.pl fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; fopen(FILE, "$memberdir/memberlist.txt"); &CheckMemListSize; Sources/Subs.pl sub MembershipCountTotal { my $membertotal = 0; my $latestmember; fopen(FILEAMEMBERS, "$memberdir/memberlist.txt"); while( ) { chomp; ++$membertotal; if( $_ ) { $latestmember = $_; } } fclose(FILEAMEMBERS); fopen(FILEAMEMBERS, "+>$memberdir/members.ttl"); print FILEAMEMBERS qq~$membertotal|$latestmember~; fclose(FILEAMEMBERS); if( wantarray() ) { return ( $membertotal, $latestmember ); } else { return $membertotal; } } sub MembershipCountTotal { my $membertotal = 0; my $latestmember; &CheckMemListSize; fopen(FILEAMEMBERS, "$memberdir/memberlist.txt"); while( ) { chomp; ++$membertotal; if( $_ ) { $latestmember = $_; } } fclose(FILEAMEMBERS); fopen(FILEAMEMBERS, "+>$memberdir/members.ttl"); print FILEAMEMBERS qq~$membertotal|$latestmember~; fclose(FILEAMEMBERS); if( wantarray() ) { return ( $membertotal, $latestmember ); } else { return $membertotal; } } } sub CheckMemListSize { if(-z("$memberdir/memberlist.txt")) { opendir(DIR, "$memberdir") || die "$txt{'230'} ($memberdir) :: $!"; @contents = readdir(DIR); closedir(DIR); fopen(MEMLIST, ">$memberdir/memberlist.txt", 1); foreach $line (sort @contents){ $line =~ m~(.+)\.(.+)~; if ($2 eq 'dat'){ print MEMLIST "$1\n"; } } fclose(MEMLIST); } } english.lng if($MenuType == 1) { $txt{'reg2'} = "Minimum time between registrations(seconds)"; $txt{'reg1'} = "Error: A member can only be registered every $register_timespan seconds! Please wait and try again!"; Sources/AdminEdit.pl $txt{'355'} $txt{'reg2'} # If empty fields are submitted, set them to default-values to save yabb from crashing $register_timespan = $FORM{'register_timespan'} || 10; ########## Directories/Files ########## \$register_timespan = $register_timespan; # Minimum time between registrations