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