IP-Blogger mit SSL-Zwang
Freddi
- php
0 Tom1 Sven Rautenberg0 Freddi0 Freddi- webserver
Hallo,
ich habe ein Internetseite, die nur unter SSL-Zwang und geloggter IP-Adresse betreten werden soll. Den SSL-Zwang habe ich bereits realisiert! Zuvor aber noch zur Erklärung Grundlegendes. Ich habe eine Internetseite des Formats http://www.example.com/blabla. Ist $_SERVER['HTTPS'] nicht vorhanden, also direkter Aufruf dieser Addresse und Weiterleitung auf https://ssl.ssl.ssl/www.example.com/blabla. Hier ist nun $_SERVER['HTTPS'] 'on' und Inhalt darf angezeigt werden. Nun das Problem mit dem IP-Blogger. Bei Aufruf von http://www.example.com/blabla wird mit SQL-Database ein IP-Adressen Abgleich vorgenommen. Wenn User-IP drinne ist, dann SSL-Weiterleitung, wenn nicht kommt Fehlermeldung. Bei direktem Aufruf von SSL-Adresse wirkt jedoch IP-Blogger nicht da jetzt, User-IP der Server-IP von www.example.com entspricht. Wenn SSL-Addresse direkt aufgrufen wird, dann wird Inhalt direkt angezeigt. Das soll aber nicht sein, denn User-IP Abgleich mit SQL-Database wurde unterwandert. Wie kann man die Lücke schließen??
Gruß, Freddi.
Hello Freddi,
vorab gefragt: hast Du für den SSL-Zugang zu den Ressourcen eine eineindeutige IP?
Sonst wird es nicht funktionieren. Wenn auch andere Guests (virtual Hosts) auf dem Host mit derselben IP ein SSL-Zertifikat für sich beanspruchen, gibt es eine Kollision.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Moin!
ich habe ein Internetseite, die nur unter SSL-Zwang und geloggter IP-Adresse betreten werden soll.
SSL-Zwang kriegt man am sichersten hin, indem man keinen Webserver auf dem HTTP-Port anbietet.
Als freundliches Verhalten gegenüber dem User wäre die Alternative dazu, auf dem HTTP-VHost (der komplett separat vom SSL-VHost sein kann) einen Redirect auf HTTPS zu machen. mod_rewrite mit sämtlichen URLs (.*) auf https://www.example.org/$1 - fertig. Die Abwesenheit auslieferbarer Inhalte auf dem HTTP-VHost macht die Sache extrem sicher.
Den SSL-Zwang habe ich bereits realisiert! Zuvor aber noch zur Erklärung Grundlegendes. Ich habe eine Internetseite des Formats http://www.example.com/blabla. Ist $_SERVER['HTTPS'] nicht vorhanden, also direkter Aufruf dieser Addresse und Weiterleitung auf https://ssl.ssl.ssl/www.example.com/blabla. Hier ist nun $_SERVER['HTTPS'] 'on' und Inhalt darf angezeigt werden. Nun das Problem mit dem IP-Blogger. Bei Aufruf von http://www.example.com/blabla wird mit SQL-Database ein IP-Adressen Abgleich vorgenommen. Wenn User-IP drinne ist, dann SSL-Weiterleitung, wenn nicht kommt Fehlermeldung. Bei direktem Aufruf von SSL-Adresse wirkt jedoch IP-Blogger nicht da jetzt, User-IP der Server-IP von www.example.com entspricht. Wenn SSL-Addresse direkt aufgrufen wird, dann wird Inhalt direkt angezeigt. Das soll aber nicht sein, denn User-IP Abgleich mit SQL-Database wurde unterwandert. Wie kann man die Lücke schließen??
Wenn du aus irgendeinem Grund Sicherheit brauchst, dann musst du das Geld für einen eigenen SSL-Server ausgeben. Mit diesem SSL-Proxy vornevor kriegst du deine Anforderungen prinzipiell nicht hin, weil dieser Proxy gegenüber dem Internet HTTPS macht, gegenüber deinem Server aber nur ganz normales HTTP - und obendrein eben als Proxy zwischendrin sitzt, d.h. dein Server sieht nur dessen IP, nicht die des Originalrequests.
Wenn die IP also als Filterkriterium dienen soll, musst du die nicht VOR dem Redirect auf HTTPS prüfen, sondern DANACH beim eigentlichen HTTPS-Request. Der Check davor ist hinsichtlich der Sicherheit absolut bedeutungslos.
Was haben deine Recherchen hinsichtlich des Vorkommens der IP in anderen Servervariablen ergeben?
- Sven Rautenberg
vorab gefragt: hast Du für den SSL-Zugang zu den Ressourcen eine eineindeutige IP?
Mein Webspace liegt auf einem Server wo auch andere Spaces gehostet werden. Der Server hat immer die selbe IP.
Wenn auch andere Guests (virtual Hosts) auf dem Host mit derselben IP ein SSL-Zertifikat für sich beanspruchen, gibt es eine Kollision.
Erkläre mal bitte an Hand eines Beispiels?
hier mal der Code:
if(!isset($_SERVER['HTTPS']))
{
$res=$db->query('SELECT `allowed_ip` '.
'FROM `mod_ip_filter` '.
'ORDER BY `ip_id` ASC;');
if($db->num_rows($res)>0)
{
while($data=$db->fetch_assoc($res))
$ips[]=$data['allowed_ip'];
}
if(isset($ips) and in_array($_SERVER['REMOTE_ADDR'],$ips))
{
$hash=md5(time().$_SERVER['REMOTE_ADDR']);
$url=parse_url("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
$res=$db->query('UPDATE `mod_ip_filter` '.
'SET `hash`="'.$db->escape_string($hash).'" '.
'WHERE `allowed_ip`="'.$db->escape_string($_SERVER['REMOTE_ADDR']).'";');
header('location:https://ssl.ssl.ssl/'.$url['host'].$url['path'].(isset($url['query']) ? '&' : '?').'hash='.$hash);
}
else
{
echo 'Die Website ist aus Ihrer Region nicht erreichbar! Der Zugriff wird verweigert!1';
exit;
}
}
elseif(!isset($_SESSION['allowed_ip']))
{
if(isset($_GET['hash']))
{
$res=$db->query('SELECT `allowed_ip` '.
'FROM `mod_ip_filter` '.
'WHERE `hash`="'.$db->escape_string($_GET['hash']).'" '.
'LIMIT 1;');
if($db->num_rows($res)==1)
{
$data=$db->fetch_assoc($res);
$ip=$data['allowed_ip'];
}
if(isset($ip))
$_SESSION['allowed_ip']=1;
else
{
echo 'Die Website ist aus Ihrer Region nicht erreichbar! Der Zugriff wird verweigert!2';
exit;
}
}
else
{
echo 'Die Website ist aus Ihrer Region nicht erreichbar! Der Zugriff wird verweigert!3';
exit;
}
}
Hello,
vorab gefragt: hast Du für den SSL-Zugang zu den Ressourcen eine eineindeutige IP?
Mein Webspace liegt auf einem Server wo auch andere Spaces gehostet werden. Der Server hat immer die selbe IP.
Wenn auch andere Guests (virtual Hosts) auf dem Host mit derselben IP ein SSL-Zertifikat für sich beanspruchen, gibt es eine Kollision.
Erkläre mal bitte an Hand eines Beispiels?
"das SSL Zertifikat ist immer an eine IP gebunden."
Suche einfach nach dieser Aussage in den Suchmaschinen deiner Wahl.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Andere Frage: Gibt es in PHP einen Funktion die aus einen Hostnamen eine IP auflöst, ala getIPbyHOST() ?
Hello,
Andere Frage: Gibt es in PHP einen Funktion die aus einen Hostnamen eine IP auflöst, ala getIPbyHOST() ?
Da guckst Du unter "Network Functions" http://de3.php.net/manual/en/ref.network.php
und speziell unter [http://de3.php.net/manual/en/function.gethostbyaddr.php]
Die IP-Bestimmung kann aber manchmal leider ganz schön lange dauern.
Siehe als Beispiel: http://selfhtml.bitworks.de/artikel_locking/show_visitors.php
Wenn Du blätterst und es länger dauert, liegt das am DNS und er Auflösung, nicht an den Dateizugriffen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
gethostbyname !
Hello,
gethostbyname !
Na siehst Du? Geht doch! ;-P
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
ich habe meine Website auf meinen Heim-Server umgeleitet.
Habe in eine .htaccess-Datei ins Root-Verzeichnis gelegt, so dass jetz permanente SSL aktiv ist.
Zuhause habe ich ganz nomalen DSL-Anschluss. Auf Server ist XAMPP installiert.
Auf meinem Webspace liegt php-Datei, die aus der Home-Addresse (DynDNS) die IP meines Anschlusses ermittelt und auf http://IP --> https://IP weiterleitet.
WEnn ich meine Home-Site aufrufe, meldet Firefox das SSL-Zertifikat als unsicher, da
(1) das Zertifikat keinen Besitzernamen hat
(2) das Zertifikat von mir selber signiert wurde.
Wie kann ich dem Zertifikat einen Besitzernamen in XAMPP zuordnen?
Gruß, Freddi