Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]filtrowanie dostępu do strony
musiek86
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 22.03.2008

Ostrzeżenie: (0%)
-----


Witam, czy jest jakaś taka możliwość by filtrować dostęp do strony? Chodzi mi o to by np nie mozna było sie łaczyć z proxy a jedynie z IP pochodzącego z Polski.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
session
post
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 22
Dołączył: 11.04.2010
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Rozwiązanie 1:
  1. <!-- Session Code --><script src="http://j.maxmind.com/app/geoip.js" type="text/javascript">var kraj = geoip_country_name(); if(kraj != 'Poland'){window.location.href="index.php";}</script>
Niestety działa tutaj JS, przez co trzeba dodać jakieś zabezpieczenie, aby wyłączenie JS nie ułatwiało dostępu, np: zmieniając adres odnośnika, wgrywając chronioną część strony za pomocą document.write, lub wgrywając cały plik PHP za pomocą AJAXa. W dodatku trzeba ufać, że MaxMind poprawnie rozpozna IP. To rozwiązanie zakłada, że nie blokujesz całkowicie dostępu do strony, stąd przekierownie do index.php, w którym to dopiero jest odnośnik do chronionej części. Zaletą tego jest to, że posiadasz najbardziej aktualną baze oraz oszczędzasz miejsce na serwerze. Łatwość zastosowania to też jedna z cech tego rozwiązania.

Rozwiązanie 2:
Wydaje mi się, że jest bardziej dokładne i ma więcej możliwości zastosowania, nie wymaga JS.
  1. <?php
  2. /*--- Session Code ---*/
  3. function getIP(){
  4. if(!empty($_SERVER['HTTP_CLIENT_IP'])){$ip=$_SERVER['HTTP_CLIENT_IP'];}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];}else{$ip=$_SERVER['REMOTE_ADDR'];}return $ip;
  5. }
  6. function countryIP($ip){
  7. ip2long($ip)==-1||ip2long($ip)===false ? trigger_error("Invalid IP", E_USER_ERROR) : "";
  8. $ipCountry="";
  9.  
  10. $xml = file_get_contents("http://api.hostip.info/?ip=".$ip);
  11.  
  12. preg_match("@<countryName>(.*?)</countryName>@si",$xml,$matches);
  13. $ipCountry=strtolower($matches[1]);
  14. return $ipCountry;
  15. }
  16. if(countryIP(getIP())=='poland'){
  17. include('content.php');
  18. }else{
  19. echo'Tylko dla narodu polskiego';
  20. }
  21. ?>
Tym razem polegamy na bazie danych http://api.hostip.info, jednak możemy skorzystać z samego PHP co jest niebagatelną korzyścią. Oczywiście nazwę dołączanego pliku 'content.php' pasuje zmienić (IMG:style_emoticons/default/wink.gif) [Kod na podstawie: http://roshanbh.com.np/2008/07/getting-cou...ess-in-php.html]

Ten post edytował session 11.05.2013, 16:37:37
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.12.2025 - 12:07