[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.343
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.343
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5

Discussioni simili