Wert in Datei schreiben
Moin, ich versuche gerade eine Möglichkeit zu finden mit der User über den Browser sich bzw. ihre IP freischalten müssen.
Dabei dachte ich an eine einfache Seite, welche die eigene IP via PHP anzeigt, welche dann in ein Formular eingegeben werden muss und dann z.B. mit CGI/Perl in eine .htaccess eingefügt wird.
Das Formular:
Das ist das Perlscript:
Google, Bing und Co. wollte ich aber nicht aussperren, also die IP 66.249.64.1 z.B. sollte prinzipiell Zugang haben.
Am Ende sollte dann eine .htaccess entstehen die in etwa so aussieht:
Dabei dachte ich an eine einfache Seite, welche die eigene IP via PHP anzeigt, welche dann in ein Formular eingegeben werden muss und dann z.B. mit CGI/Perl in eine .htaccess eingefügt wird.
Das Formular:
<p>Kopiere die angezeigte IP-Adresse, füge sie in das Feld unten ein und drücke den Knopf "Senden"
<br>
<?php echo $_SERVER['REMOTE_ADDR']; ?>
</p>
<form action="ip.pl" method="post" enctype="multipart/form-data" >
<table align="left">
</td>
<td>IP:</td>
<td><textarea name=IP size=15></textarea></td>
<td colspan=2 align=center>
<input type=submit value="Senden"></td>
</table>
</form>
#!/pfad/zu/perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
my $param_IP = $cgi->param('IP'); # Hole den Parameter IP (=Inhalt der Textarea)
my @IP = split /\cM?\cJ/, $param_IP if defined($param_IP) and length($param_IP); # Teile mehrzeilige Einträge im Textfeld in einzelne Zeilen und speicher sie ins Array
my %IP; # Hash zum merken der IPs
open(my $fh,"<", ".htaccess") or die "Cant open .htaccess: $!"; # Datei zum Lesen öffnen
while (my $line = <$fh>) { # IP zeilenweise einlesen
next if not $line =~ m|allow\s+from\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*$|i; # ist keine numerische IP, dann weiter bei while
$IP{$1}++; # numerische IP merken
}
close($fh) or die "Cant close .htaccess: $!";
foreach my $IP (@IP) {
$IP =~ s/[\cM\cJ]//g; # entferne alle Zeilenenden
next if not $IP =~ m|^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$|; # ist keine numerische IP
$IP{$1}++;
}
use Fcntl qw(:flock);
open(my $fh,">", ".htaccess") or die "Cant open .htaccess: $!";
flock ($fh, LOCK_EX) or die "Cant lock .htaccess: $!"; # Datei sperren gegen mehrfache Schreibzugriffe
print $fh "allow from ",$_,"\n" for sort keys %IP; #
close($fh) or die "Cant close .htaccess: $!";
print $cgi->header(
-status => '204 No Content',); # only HTTP header is in response
Google, Bing und Co. wollte ich aber nicht aussperren, also die IP 66.249.64.1 z.B. sollte prinzipiell Zugang haben.
Am Ende sollte dann eine .htaccess entstehen die in etwa so aussieht:
order deny, allow
#google#
allow from 66.249.64.1
#yandex#
allow from 141.8.147.1
#bing#
allow from 157.55.34.181
#msn#
allow from 199.30.20.58
#user#
allow from 12.34.56.78
deny from all
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 224870
Url: https://administrator.de/contentid/224870
Ausgedruckt am: 05.11.2024 um 00:11 Uhr