2008-10-03 6 views
10

Dort gibt es eine einfache Möglichkeit, dies in PHP zu tun. Ich möchte sicherstellen, dass nur Webanfragen aus bestimmten Ländern auf meine Website zugreifen können.Wie beschränke ich, welche Länder meine Website (PHP) anzeigen können

Irgendwelche Ideen?

+3

Ich werde nicht die Frage abstimmen (Ich bin aus technischer Sicht ein bisschen interessiert), aber ich hasse es, wenn Websites das tun. Ich war immer in der Lage, es trotzdem zu umgehen, indem ich das Recht nutze Proxy. – wcm

+0

Proxies können ebenfalls blockiert werden und erinnern, dass er den Zugriff aus rechtlichen Gründen blockieren muss. In vielen Fällen ist es für US-amerikanische Unternehmen illegal, ihre Websites einigen Ländern zur Verfügung zu stellen, die auf einer offiziellen schwarzen Liste stehen (z. B. Iran). – Gilles

+1

Und wenn ich in diesen Ländern leben würde, würde ich es auch nicht mögen. Ich mag einfach keine Zensur. Ich habe die Frage (und Ihre Antwort) tatsächlich abgestimmt, weil ich weiß, dass es legitime Gründe dafür gibt. Ich muss es einfach nicht mögen. – wcm

Antwort

13

Verwenden Sie eine IP Geolocation-Datenbank (einige sind kostenlos) und $ _SERVER ["REMOTE_ADDR"], um die IP-Adresse des Besuchers zu erhalten.

http://www.maxmind.com/app/geolitecity ist eine kostenlose (weniger genaue) Version eines kommerziellen.

-2

Es gibt bestimmte Klassen, die das Gebietsschema des Benutzeragenten erkennen können. Probieren Sie so etwas aus. Zend Framework hat eine großartige Klasse für diese Zend_Locale

+0

Erzeugt ein "Locale" nicht nur, wie ein Client konfiguriert ist, wo er ist? Konnte nicht jemand sein Gebietsschema auf "en_US" setzen, sondern in Australien sein? –

+0

Ja genau, das Gebietsschema ist die Sprache des Browsers, nichts mit Standort zu tun. – Gilles

+0

Aber es kann Leute herausfiltern, die Sie nicht mögen. Zum Beispiel schließe ich russische und indische Besucher auf meiner Website durch lang. Zum größten Teil funktioniert es. – flaab

4

Beide Antworten (Geolocation, User Agent) werden funktionieren, können aber besiegt werden. Jemand kann einen Proxyserver verwenden oder seinen Benutzeragenten ändern. Firefox hat sogar ein Plugin für diesen Zweck.

+0

Proxys können auf einer niedrigen Protokollebene blockiert werden. Hulu.com macht genau das. User-Agenten haben hier nichts mit dem Problem zu tun. – Gilles

+0

Wie werden Sie alle Proxies zuverlässig blockieren? Die einzige zuverlässige Lösung ist das Blacklisting, aber es erscheinen immer neue Proxies. – ceejayoz

+0

Sie erkennen sie auf einer * niedrigen Protokollebene * und verwenden keine Blacklist. Ich erinnere mich nicht an die Einzelheiten, ich erinnere mich nur daran, dass ich gelesen habe, dass eine solche Technik von Hulu benutzt wird, das ist alles. – Gilles

1

Es gibt auch eine Birne Paket

http://pear.php.net/package/Net_Geo

+0

Es sieht so aus, als ob es eine Website abfragt, um die Informationen jedes Mal zu bekommen? Die Daten sind möglicherweise genauer als die freie Datenbank, die ich erwähnt habe. – Gilles

9

wie Gilles, die ich verwendet habe in der Vergangenheit für diese GeoIP Sachen MaxMinds - konfiguriert mit der PECL-Erweiterung für die Geschwindigkeit. Es funktioniert einigermaßen gut, aber ...

Die Anforderung für diese Art von Sache neigt dazu, von jemandem zu kommen, der nicht versteht, dass es unmöglich ist, einen Besucherstandort auf diese Weise zuverlässig zu bestimmen. Es ist sehr wichtig, dass die Person, die darum bittet, ermutigt wird zu verstehen, dass es fast nutzlos ist. Typische Sache, die mit Geo-Location in diesem Fall:

Kunde: Ich möchte Inhalte zu beschränken, um der Lage sein, durch IP
Dev: Sie wissen, dass das nicht möglich ist, zuverlässig zu tun?
Auftraggeber: Ah ja, aber diese Unternehmen sagen, dass sie mir etwas verkaufen, die es
Dev tun wird: Ja, aber es ist nicht genau und ist leicht zu umgehen und zeigt in der Regel ein schlechtes Geschäftsmodell für Internet-basierte Inhalte
-Client : Kannst du es machen?
Dev: Was auch immer ...

... sechs Monate später ...

Kunde: Einige meiner Besucher haben sich beschwert, sie können nicht sehe meinen Inhalt und einige schlechte Leute die es nicht sehen konnten waren dazu in der Lage!
Dev:/me ohrfeigt Kopf

Es ist nur ein Schritt von dort zu „Ich kann es haben, so dass, wenn ein Benutzer in ihrem Browser klickt rechts ein kleines Zeichen erscheint sagen ' Diese Bilder sind Copyright Idiot Inc. '?"

Sorry, offensichtlich in einer zynischen Stimmung heute

+1

Denken Sie daran, dass er * gesetzlich verpflichtet sein könnte, einige Länder zu blockieren. Ich arbeitete für eine große amerikanische Korporation, die den Zugang von einer staatlich ausgestellten schwarzen Liste von Ländern legal sperren musste. Nichtbefolgung hätte Leute ins Gefängnis bringen können. Ich kann nicht über die Besonderheiten sprechen, aber das war sehr real. – Gilles

+0

Aye, in dem Fall, dass ich gebeten wurde, es zu verwenden, war Teil einer rechtlichen Vereinbarung zwischen einem Inhaltsanbieter und einem Herausgeber. Aber das ist mein Standpunkt - das ist falsches Denken, das Gesetz verpflichtet das Unmögliche. Immer noch implementieren, aber Feedback zur Realität der Situation! –

+0

Oh, und in diesem Sinne habe ich gesehen, dass Leute die Rechtsklick-Copyright-Nachricht auch "gesetzlich benötigen". Es geht um Glauben! –

2

wenn Sie die Antwort von Ben Dowling und der Code verwenden nicht funktioniert, versuchen Sie dies:

if (!in_array(substr($country, 0, 2), $allowed_countries)) { 

statt:

if(!in_array($country, $allowed_countries)) { 
Verwandte Themen