[PHP] o [APACHE] - Filtro geo per accesso sito

MaryDB

Nuovo Utente
23 Nov 2017
17
0
1
Ciao,

non ho ben capito dove postare questa discussione; se a livello di web server oppure di sviluppo sito.
La mia necessità primaria è quella di limitare l'accesso ad un sito web solo a indirizzi IP o nazioni che decido io, tramite identificazione indirizzo ip utente.
So benissimo che si possono usare proxy, vpn e tanto altro per 'apparire' con un altro IP, ma questo, per ora non mi interessa. Quello che voglio capire e se si può fare, in che modo, e nel caso se avete idea di possibili "costi" in termini di prestazioni.

Grazie
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Ciao, prova questo si basa su un servizio gratuito per un massimo di 10000 chiamate l'ora....
PHP:
/**
 * Created by PhpS.
 * User: Marco A.
 * Date: 23/02/2018
 * Time: 08:05
 */


class Geocode{

    /**
     * Indirizzo Servizio
     * @var string
     */
    private $service='http://freegeoip.net/json/';

    /**
     * Indirizzo IP Client
     * @var string
     */
    private $ip_request='0.0.0.0';

    /**
     * Dcodifica Risposta
     * @var array
     */
    private $response=[];

    /**
     * Codice stati abilitati a visualizzare il contenuto X
     * @var array
     */
    private $state_enable=['IT'];


    public function __construct()
    {
        $this->ip_request=$_SERVER['REMOTE_ADDR'];
    }


    /**
     * Inizializza la richiesta
     * @return $this
     */
    public function init_(){
        if($this->ip_request!='0.0.0.0')$this->response=json_decode(file_get_contents($this->service.$this->ip_request));
        $this->model_response();
        return $this;
    }

    /**
     * Funzione per effettuare il match per visualizzare lo stato in or out dell'utente nell'applicazione
     * @return bool
     */
    public function check_permision(){
        if($this->response->country_code!=NULL && in_array($this->response->country_code,$this->state_enable))return TRUE;
        else return FALSE;
    }


    private function model_response(){
        $model=['ip','country_code','country_name','regione_code','region_name','city','zip_code','time_cone','latitude','longitude','metro_code'];
        if(empty($this->response)){
            $this->response=new stdClass();
            foreach ($model as $items){
                $this->response->$items=NULL;
            }
        }
    }




    public function get_country(){
        return $this->response->country_code;
    }
    public function get_country_name(){

        return $this->response->country_name;
    }
    public function get_regione_code(){
        return $this->response->region_code;
    }
    public function get_region_name(){
        return $this->response->region_name;
    }


    public function free_param($param='country_code'){
        return $this->response->$param;
    }

}

Per usarlo basta richiamarlo così
PHP:
$geo=new Geocode();
if($geo->init_()->check_permision()){
    //utente abilitato

}else{
    //utente non abilitato
}
Dimenticavo se lo testi in locale ricordati che il tuo ind. ip sarà 127.0.0.1 quindi la lib non funziona... quindi per testarlo in local nella __construct inserisci il tuo indirizzo manualmente
Spero sia utile
 
Ultima modifica:

mr.x

Utente Attivo
9 Apr 2016
252
25
28
.. Quello che voglio capire e se si può fare, in che modo, e nel caso se avete idea di possibili "costi" in termini di prestazioni.

Grazie

Ciao, dipende dache accesso hai alla macchina.
puoi farlo attraverso firewall, es. con iptables; tramite direttive apache, nella configurazione (anche a livello vhost in caso di più siti sullo stesso server) o tramite .htaccess; tramite script , es. php.
In termini di prestazioni prima metti il blocco e meglio è, ad esempio se blocchi tramite firewall le richieste non passano ad apache che non deve quindi elaborarle.
 

MaryDB

Nuovo Utente
23 Nov 2017
17
0
1
Grazie Macus_adi e Mr.x,

un paio di domande/chiarimenti :
@mr.x
Se dovessi utilizzare il firewall/iptables, è certamente un buon metodo di filtro a monte, ma dovrei inserire una quantità di reti notevole (appesantendo il firewall stesso) e soprattutto io devo limitare l'accesso ad uno specifico sito e sulla macchina ce ne sono altri che non devono avere questa limitazione

@macus_adi
lo script che hai riportato, può gestire anche più di una nazione in "allow" ? Il limite delle 10.000 è abbastanza alto (per ora), quindi mi va bene. Almeno posso testare la sua bontà di funzionamento. Tu hai avuto modo di provarlo ?
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
Grazie Macus_adi e Mr.x,

un paio di domande/chiarimenti :
@mr.x
Se dovessi utilizzare il firewall/iptables, è certamente un buon metodo di filtro a monte, ma dovrei inserire una quantità di reti notevole (appesantendo il firewall stesso)
Puoi anche inserire solo i range che devono avere accesso..
e soprattutto io devo limitare l'accesso ad uno specifico sito e sulla macchina ce ne sono altri che non devono avere questa limitazione
in questo caso potresti agire sulla configurazione apache.

Personalmente utilizzo i 2 metodi insieme su alcuni server, es. tramite firewall mi blocco il traffico cinese e tramite direttive apache filtro il traffico per i virtualhost, ad esempio per il sito della parrucchiera italiana permetto chiamate POST solo dall' Italia (improbabile che una persona dall'inghilterra voglia inviare una preotazione tramite form), e ciò non compromette le prenotazione per il ristorante alle Canarie che riceve per lo più prenotazioni dall'inghilterra.
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
lo script che hai riportato, può gestire anche più di una nazione in "allow" ? Il limite delle 10.000 è abbastanza alto (per ora), quindi mi va bene. Almeno posso testare la sua bontà di funzionamento. Tu hai avuto modo di provarlo ?
Lo script accetta un qualsiasi array con all'interno i codici di nazione... L'ho inserito anche tra gli snippet.... Se hai problemi è una lib mia, quindi so esattamente cosa fa....
https://forum.mrw.it/threads/classe-php-per-la-geolocalizzazione-del-visitatore.50841/
Ti consiglio di utilizzare questa che è ottimizzata e commentata....
 

Damiano_

Nuovo Utente
31 Mag 2019
3
0
1
Italy
Ciao,ci sono database di IP gratuiti e a pagamento,non meno di 15€/mese,io ne prenderei uno gratuito ,lo riassumerei in
un file csv,e farei fare la script allow|deny in PHP in Bulgaria, poche decine di euro;)( forse ce l'hanno già pronta):)
 
Discussioni simili
Autore Titolo Forum Risposte Data
N [Apache] problema con estensione php Apache 0
M Problemi con database Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1 PHP 6
N Apache + MySQL + PHP MacOs Mojave Web Server 0
C Apache Cordova problema con php Programmazione 1
localhost.nicola Errore Apache su installazione php\ext - Unable to load dynamic library PHP 0
R problema con pagine php apache su centos 5.3 Apache 1
M Istallare Imagemagick su apache 1.3 php 4.4.9 Apache 3
ivarello SNMP in APACHE - PHP snmpwalk() PHP 0
F Errore configurazione APACHE con PHP Apache 1
T Progetto su PHP - MYSQL - APACHE PHP 6
M Problemi con apache non interpreta script php Apache 6
G non riesco ad integrare l’interprete php nel server Apache su Vista PHP 2
J Collaboratori per forum su html, php, apache, mysql, css, javascript, ecc. Offerte e Richieste di Lavoro e/o Collaborazione 2
E [Retribuito] Sviluppatore Web - Linux Apache MySql PHP Offerte e Richieste di Lavoro e/o Collaborazione 0
G come si fa a far girare le pagine PHP su Apache? PHP 1
F Configurazione PHP/Apache per gestire AJAX PHP 1
G foXServe, mini server APACHE+PHP+WEBDAV Apache 0
C Installazione Apache e PHP Apache 0
G [AIUTO] Apache + Php + MySql + win -> ERRORE STRAN Apache 0
M Problemi con la configurazione di Php 4.2.3 come modulo Apache 1.3.27 PHP 0
Couting95 inserire dati da un file di testo in una tabella in php PHP 0
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 0
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 0
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21

Discussioni simili