Ciao, come da titolo, sto creando un portale intranet in PHP e vorrei sapere come è possibile verificare se un utente vi accede dall'interno della struttura aziendale o da fuori. Grazie in anticipo
Ciao, come da titolo, sto creando un portale intranet in PHP e vorrei sapere come è possibile verificare se un utente vi accede dall'interno della struttura aziendale o da fuori. Grazie in anticipo
potresti provare a vedere se $_SERVER['REMOTE_ADDR'] contiene un ip della intranet o meno
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
si, avevo pensato di usare $_SERVER['REMOTE_ADDR'] per raccogliere gli ip client che accedono, ma non so come e con cosa confrontarlo
devi avere un elenco di tutte le reti della tua intranet (ip/netmask) e poi usare calcoli specifici tipo questo https://gist.github.com/tott/7684443 per vedere se l'ip fa parte della rete o meno.
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
ok, dovrebbe essere proprio quello che cercavo... solo un paio di domande sullo script che mi hai consigliato:
$range e $netmask sono dati che posso recuperare in automatico (se si come li recupero?) o devo impostarli a mano
(se così dove li trovo?)... sono a digiuno di reti!
no il concetto è il seguente:
diciamo che $_SERVER['REMOTE_ADDR'] dia un ip del tipo "10.10.10.123", la tua domanda è "ma 10.10.10.123 è della mia intranet?"
Ora, il problema lo sposti sulla intranet: "come faccio a capire che l'ip appartiente alla mia intranet?" una soluzione è dire "un ip appartiene alla mia intranet se appartiene ad una delle reti definite nella intranet". Quindi diciamo che la tua intranet è composta dalle seguenti reti:
10.10.8.0/24
10.10.9.0/24
10.10.10.0/24
10.10.11.0/24
dato lo script del link prima (che è il primo che ho trovato su google, del cui funzionamento non garantisco ma così ad occhio mi sembra corretto), un tuo codice potrebbe essere:
per sapere quali reti costituiscono la tua intranet, il modo piu efficace è mappare nello script a mano tutte le reti (tramite file di configurazione? tramite inserimento dati via interfaccia web? leggendo da un db? ) perchè non puoi sapere a priori in maniera semplice dalla macchina su cui esegui lo script quali sono le reti della intranetCodice PHP:
$clientIp = "10.10.10.123"; //da sostiturie con $_SERVER['REMOTE_ADDR']
$intranet = [
"10.10.8.0/24",
"10.10.9.0/24",
"10.10.10.0/24",
"10.10.11.0/24"
];
$result = false;
foreach($intranet as $range)
{
if(ip_in_range($ip,$range)){
$result = true;
break;
}
}
if($result){
echo "ip $ip in intranet";
}else{
echo "ip $ip non è in intranet";
}
più o meno una cosa del genere.
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
Tutto abbastanza chiaro... ma siccome il portale dovrà risiedere sulla rete intranet, non esiste un modo che mi dice "guarda, sto girando su questa rete" e in base al range che mi da fare il controllo con REMOTE ADDRESS? Nel caso in cui questa cosa non sia fattibile e debba necessarimanete mettere in $intranet a mano tutti gli indirizzi disponibili, come li recupero questi?
Mi sembra che ti stia complicando la vita un po' troppo.
Avete una LAN in azienda e basta, o chissà quale configurazione strana e complessa?
Al 99% avrete una rete di classe C.
In ogni caso è molto più facile capire se la rete è estera o interna, basta la prima parte dell'IP in decimale per deciderlo
Allora,
dipende da quanto è complicata la intranet. Per esempio, dire, come fa MySQL, che al 99% si avrà una rete di class C (255.255.255.0) è vero nelle piccole realtà, è falso in realtà medio grosse o che hanno collegamenti intersede ad esempio (che sempre intranet stiamo parlando). In quei casi, possono essere tanti classi C, può essere una classe B, ci può essere di tutto.
La cosa piu semplice è avere un file di configurazione (ini?) in cui uno scrive tutte le reti della intranet (si può fare che di default si prendono quelle della scheda di rete della macchina su cui gira l'applicativo) e fare il check con quelle.
Per sapere che reti vedi nell'applicativo puoi ad esempio parsarti i comandi "ifconfig" o "ipconfig" eseguiti in shell
cmq la cosa migliore è un file di configurazione e/o una interfaccia web dedicata di configurazione della cosa. ihmo
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
Scusa ma ribadisco.
Il mondo è diviso in "internet" e "reti locali" (non routabili), ragionevolmente la tua LAN.
Che questa sia semplice o complicata non cambia nulla.
Se l'indirizzo IP inizia per 10.x.x.x, oppure 172.16.x.x, oppure 192.168.x.x allora NON è un indirizzo internet.
Non serve chissà quale logica complessa.
A MENO CHE non abbiate fatto una rete internet (non intranet) con dei gateway boundary che rimappano gli indirizzi, ma finora mi è capitato di vedere una cosa del genere solo una volta![]()