Moin, ich wollte einen kleinen Stolperstein bauen, um nur Leute auf einen bestimmten Bereich der Webseite zu lassen, welche ihre IP kopieren und in ein Textfeld einfügen können:
ip.php
<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="/cgi-bin/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>
Alles anzeigen
Der Inhalt soll dann in eine .htaccess angehängt werden und in etwa so ausehen:
order deny, allow
allow from 123.123.123.123
allow from 2a02:8001:b30e:fb00:b4b4:fe8d:f123:abba
deny from all
Jetzt muss ich aber zuvor prüfen, ob es sich um eine IP4/IPv6 handelt, damit nicht gleich der ganze Webserver einen 500 Fehler ausspuckt, wenn jemand z.B. Quarktaschensalat in das Feld schreibt. Da ist der Apache ja sehr empfindlich. In welcher Sprache das passiert ist mir eigentlich egal, in Perl gibts aber schon etwas fertiges für IPv4 und IPv6:
http://search.cpan.org/~drolsky/Data-…/Validate/IP.pm
Und da versagen schon wieder meine Programmierkünste
Ein Beispiel ist zwar schon dabei, aber bei der Umsetzung hakts wieder:
use Data::Validate::IP qw(is_ipv4 is_ipv6);
my $suspect = '1.2.3.4';
if (is_ipv4($suspect)) {
print "Looks like an IPv4 address";
}
else {
print "Not an IPv4 address\n";
}
$suspect = '::1234';
if (is_ipv6($suspect)) {
print "Looks like an IPv6 address";
}
else {
print "Not an IPv6 address\n";
}
Alles anzeigen
Also statt 1.2.3.4 soll der Wert aus der ip.php genommen werden, zwischen order deny, allow und deny from all und ein "allow from" vorne angestellt werden:
Ich habe schon in einem Perlforum nachgefragt, aber die sind schon an mir verzweifelt.
Bin über jede Hilfe dankbar.
MfG