Ich habe ein Universitäts-Internet. Es hat IP, sagen wir 220.81.184.12. Ich habe Projekt namens sagen wir MyProject (es ist der Ordner). Wenn ich versuche, 220.81.184.12/MyProject einzugeben, wird meine Site gestartet. Das bedeutet, dass jeder in der Universität auf meinen Ordner und meine Site zugreifen kann? Ich benutze Ubuntu und habe PHP und MySQL installiert. Und ich kann auch phpmyadmin über IP wie 220.81.184.12 / phpmyadmin zugreifen.
Also, was ist los?
EDIT: Und was bedeutet das? Wenn andere PHP in seinem PC installiert haben, was würde passieren?
Es gibt eine Menge zu besprechen, also tauchen wir ein ...
Wie von Marc B erwähnt, wenn Sie einen Webserver auf eine nicht-Firewall öffentliche IP-Adresse setzen, alle im Internet kann darauf zugreifen. Das bedeutet nicht, dass Sie sich in dieser Situation befinden - Sie sagen, Sie sind in einem Universitätsnetzwerk und Sie werden höchstwahrscheinlich feststellen, dass sie eine Art von lokalem Netzwerk implementieren, das eine NAT Schicht und / oder Firewall zwischen Ihrem PC und der Internet. Sie können jedoch immer noch feststellen, dass jeder im Netzwerk der Universität (oder zumindest Ihr Segment - siehe Subnetting und VLANs ) kann auf Ihren Webserver zugreifen.
Was können Sie tun, um dies zu verhindern?
Dies ist auf keinen Fall eine erschöpfende Liste, aber hier sind einige der am häufigsten verwendeten Ansätze zur Steuerung der Webserver-Sicherheit.
Richten Sie Ihren Webserver so ein, dass er nur localhost abhört (Mark B hat dies bereits erläutert, aber um es zu verdeutlichen):
Die Haupt-Apache-Konfigurationsdatei, Ссылка , verwendet eine Anweisung namens Listen
, um zu ermitteln, welche Listening-Sockets beim Starten erstellt und gebunden werden sollen. Der Standardwert ist normalerweise Listen 80
, was bedeutet, dass der Server auf TCP Port 80 auf jeder registrierten IP-Adresse wartet Die Maschine. Diese IP-Adressen lauten 127.0.0.1
, die Loopback-Adresse und alle IP-Adressen, die mit den von Ihnen installierten Netzwerkschnittstellen verknüpft sind. wie das obige Beispiel von 220.81.184.12
.
Sie können diese Anweisung restriktiver gestalten. Wenn Sie beispielsweise nur Verbindungen von Ihrem lokalen Computer akzeptieren möchten, können Sie sie in Listen 127.0.0.1 80
ändern. Auf diese Weise können Sie von Ihrem lokalen Rechner aus auf den Webserver zugreifen: http://127.0.0.1/
, http://localhost/
, und http://220.81.184.12/
- ja, Sie können weiterhin jede Adresse verwenden, die mit dem Rechner verbunden ist , weil Loopback funktioniert - aber keine andere Maschine irgendwo auf der Welt kann direkt über eine beliebige Adresse darauf zugreifen.
Konfigurieren Sie eine Firewall, um Verbindungen von anderen Computern zu blockieren:
Fast alle Firewalls blockieren standardmäßig jede eingehende Anfrage und Sie müssen explizit zulassen, dass offene Ports und / oder Anwendungen eingehende Verbindungen akzeptieren. Wenn Sie nicht möchten, dass andere Computer auf Ihren Server zugreifen können, öffnen Sie nicht den Port, der die Anwendung zulässt. Viele Firewalls ermöglichen es Ihnen, diese Regeln genauer zu wählen, indem Sie eingehende Anfragen von bestimmten IP-Adressen zulassen, nicht jedoch von anderen.
Wenn Sie verhindern möchten, dass andere Personen auf Netzwerkressourcen zugreifen, die von Ihrem Computer gehostet werden, ist eine Firewall normalerweise ein guter Ausgangspunkt. Sie sollten feststellen, dass Ihre Ubuntu-Installation mit iptables geliefert wird .
Beschränken Sie die Remote-Clients, die auf Verzeichnisse in Ihrer Apache-Konfigurationsdatei zugreifen können:
Bitte beachten Sie: Diese Informationen beschreiben die Verwendung von Apache-Anweisungen jetzt veraltet. Siehe Fußnote 1
Wie Sie wahrscheinlich bereits wissen, müssen Sie, um Apache ein Verzeichnis zu liefern, ein <Directory>
Abschnitt dafür in httpd.conf
. In der Standardkonfigurationsdatei finden Sie einen Abschnitt, der für die Bereitstellung DocumentRoot
, die einige Zeilen enthalten wird, die wie folgt aussehen:
Dies ermöglicht alle Anfragen von jedem Client. Wie Sie sehen, gibt es dort zwei Direktiven - Order
und Allow
(mit einer ergänzenden Direktive, %Co_de% ). Zu verstehen, was diese Direktiven tun und wie sie funktionieren, ist wesentlich, wenn Sie einen Apache-Server verwalten. Sie werden in den verlinkten Handbuchseiten sehr ausführlich erklärt, daher werde ich hier nicht näher darauf eingehen - haben wir nur ein Beispiel:
Wenn Sie den Standardwert ändern, wird jede Anfrage abgelehnt, es sei denn, sie stammt von Deny
- Ihrem lokalen Rechner.Nehmen wir nun an, Sie möchten zulassen, dass Ihr Freund, dessen IP-Adresse 127.0.0.1
ist, auch auf die Seite zugreift - wir fügen eine 172.32.64.218
-Direktive für seine IP-Adresse am Ende der obigen Konfiguration hinzu:
Nachdem Sie dies eingerichtet haben, teilt Ihnen Ihr Freund mit, dass er alle IP-Adressen zwischen Allow
und 172.32.64.216
besitzt und in der Lage sein möchte, alle von ihnen für den Zugriff auf Ihren Server zu verwenden. Anstatt 8 separate 172.32.64.223
-Direktiven zu erstellen, können wir sie in einem definieren: Mit CIDR können wir uns eine Kurzschrift ausdrücken dieses Subnetz als Allow
, und wir können dies in einer 172.32.64.216/29
Direktive verwenden:
Die Abschnitte Allow
definieren Regeln für ein Verzeichnis und alle Unterverzeichnisse. Wenn Sie also eine Regel auf <Directory>
anwenden, gelten dieselben Regeln auch für /myDir
und /myDir/subDir
. Sie können diese Regeln jedoch in der Baumstruktur überschreiben - Sie können also einen Abschnitt /myDir/subDir/subSubDir
für <Directory>
mit unterschiedlichen Regeln erstellen. Sie können auch .htaccess Dateien verwenden, um die Regeln zu definieren, solange Sie sie mit einem aktivieren /myDir/subDir/subSubDir
Direktive.
Wie Sie sehen können, ist diese Methode der Kontrolle darüber, wer auf Ihre Site zugreifen darf, relativ einfach zu konfigurieren und bietet eine leistungsstarke und flexible Regelkontrolle.
Um Ihre Frage zu beantworten AllowOveride
- nichts. PHP ist eine serverseitige Skriptsprache und kann auf keinem anderen Computer irgendetwas direkt beeinflussen, insbesondere was den kontrollierenden Zugriff auf einen entfernten Rechner betrifft.
Fußnote # 1 06/2012
Ich möchte nur kurz erwähnen, dass die Anweisungen If other person installed PHP in his PC, what would happen?
, Order
und Allow
in Apache 2.4 veraltet sind. Diese Art von Zugriffskontrolle wurde nun mit dem Standardauthentifizierungsprozess zusammengeführt und wird nun mit Deny
, Require ip
und Require host
Direktiven bereitgestellt, wie von mod_authz_host .
Die Unterstützung für Require local
, Order
und Allow
wird weiterhin über mod_access_compat Aus Gründen der Abwärtskompatibilität sollten neue Konfigurationen für die 2.4-Verzweigung und darüber hinaus die entsprechenden Deny
-Strukturen verwenden, und alte Konfigurationen sollten so konvertiert werden, dass sie die neuen Mechanismen verwenden, sobald sie migriert werden. Die alten Kontrollmechanismen werden in einer zukünftigen Version von Apache entfernt.
Ein Dokument, das eine Einführung in die Verwendung der neuen Direktiven bietet, finden Sie hier .
Sie haben einen Webserver auf eine öffentliche IP gestellt ... er wird von überall auf der Welt zugänglich sein. Wenn Sie den Server privat halten wollen, müssen Sie Apache so konfigurieren, dass NOT auf dem öffentlichen IP-Port abgehört wird und dass er so eingestellt wird, dass er nur auf 127.0.01 antwortet. Dies geschieht über die Listen
-Direktiven in der httpd.conf.
Eine weitere Alternative ist die Verwendung einer Firewall, um den Zugriff auf Apache-Ports von anderen als autorisierten IPs zu blockieren.
Ich würde empfehlen, HTTP Auth zu verwenden, um die Verzeichnisse zu schützen, die nicht freigegeben werden sollen. Auf diese Weise können Sie, wenn Sie eines von ihnen teilen möchten, nur die Anmeldedaten mit der Person teilen, der Sie Zugriff gewähren möchten.
PHP wird auf dem Server selbst ausgeführt. Es ist nur eine Möglichkeit, HTML zu generieren, es ist keine Skriptsprache wie Javascript, die Teil des Browsers des Benutzers ist.