Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #20301 > unrolled thread

verificare che il client appartenga alla stessa rete del server

Started byalex <1j9448a02@lnx159sneakemail.com.invalid>
First post2016-02-08 13:35 +0100
Last post2016-02-09 16:44 +0100
Articles 16 — 6 participants

Back to article view | Back to it.comp.www.php


Contents

  verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-08 13:35 +0100
    Re: verificare che il client appartenga alla stessa rete del server g4b0 <gabriele.brosulo@gmail.com> - 2016-02-08 13:44 +0100
      Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-08 17:27 +0100
        Re: verificare che il client appartenga alla stessa rete del server Alessandro Pellizzari <shuriken@amiran.it> - 2016-02-08 21:23 +0000
          Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-09 07:56 +0100
            Re: verificare che il client appartenga alla stessa rete del server Leonardo Serni <lserni@gmail.com> - 2016-02-09 08:13 +0100
              Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-09 16:32 +0100
              Re: verificare che il client appartenga alla stessa rete del server Andrea D'Amore <anddam+NOSPAM@brapi.net> - 2016-02-09 16:33 +0100
                Re: verificare che il client appartenga alla stessa rete del server fmassei@gmail.com - 2016-02-09 07:38 -0800
                  Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-09 18:06 +0100
                    Re: verificare che il client appartenga alla stessa rete del server fmassei@gmail.com - 2016-02-09 09:13 -0800
                      Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-09 19:09 +0100
    Re: verificare che il client appartenga alla stessa rete del server Andrea D'Amore <anddam+NOSPAM@brapi.net> - 2016-02-08 14:03 +0100
      Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-09 15:38 +0100
        Re: verificare che il client appartenga alla stessa rete del server Andrea D'Amore <anddam+NOSPAM@brapi.net> - 2016-02-09 16:36 +0100
      Re: verificare che il client appartenga alla stessa rete del server alex <1j9448a02@lnx159sneakemail.com.invalid> - 2016-02-09 16:44 +0100

#20301 — verificare che il client appartenga alla stessa rete del server

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-08 13:35 +0100
Subjectverificare che il client appartenga alla stessa rete del server
Message-ID<n9a22j$186m$1@gioia.aioe.org>
Per il momento ho risolto così:

function same_network($ip1, $ip2)
{
	return __($ip1) == __($ip2);
}

function __($ip)
{
	return substr($ip, 0, strrpos($ip, '.') + 1);
}

if (same_network($_SERVER['SERVER_ADDR'], $_SERVER['REMOTE_ADDR'])) { // 
se server e client appartengono alla stessa rete
	// fai qualosa
}else{
	echo 'Autorizzazione negata';
	exit(1);
}

Però mi sembra un approccio non proprio appropriato (convenzionale).
Non è che php ha già qualche funzione ad hoc per queste cose?

Ho dato un occhiata qui
http://php.net/manual/en/ref.network.php
e poi qui
http://openskill.info/infobox.php?ID=849

In pratica bisogna usare le netmask, fare dei confronti binari, ecc.
Ma prima di imbattermi in inutili *lavaggi mentali*, volevo sapere se, 
al posto della mia funzione *same_network()*, esiste una funzione php 
già pronta, che fa quello che chiedo?
O comunque un esempio che indica l'approccio più corretto...

[toc] | [next] | [standalone]


#20302

Fromg4b0 <gabriele.brosulo@gmail.com>
Date2016-02-08 13:44 +0100
Message-ID<56B88DC9.8010901@gmail.com>
In reply to#20301
On 08/02/2016 13:35, alex wrote:
> In pratica bisogna usare le netmask, fare dei confronti binari, ecc.
> Ma prima di imbattermi in inutili *lavaggi mentali*, volevo sapere se,
> al posto della mia funzione *same_network()*, esiste una funzione php
> già pronta, che fa quello che chiedo?
> O comunque un esempio che indica l'approccio più corretto...

Be, mettere in AND binario una netmask con un indirizzo IP non mi pare
un *lavaggio mentale*...

$network_addr = (ip2long($ip) & ip2long($network_mask));

e poi confronti le $network_addr

-- 
g4b0, linux user n. 369000
http://brosulo.net

[toc] | [prev] | [next] | [standalone]


#20304

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-08 17:27 +0100
Message-ID<n9afm9$27e$1@gioia.aioe.org>
In reply to#20302
Il 08/02/2016 13:44, g4b0 ha scritto:
> Be, mettere in AND binario una netmask con un indirizzo IP non mi pare
> un*lavaggio mentale*...
>
> $network_addr = (ip2long($ip) & ip2long($network_mask));
>
> e poi confronti le $network_addr

E come $network_mask cosa devo specificare?
In pratica voglio sapere se due computer sono nella stessa casa: uno in 
cucina, e un in salotto.
Naturalmente nel mezzo c'è il classico router.
Perdonate la mia eventuale ignoranza :-P

[toc] | [prev] | [next] | [standalone]


#20305

FromAlessandro Pellizzari <shuriken@amiran.it>
Date2016-02-08 21:23 +0000
Message-ID<dhsfadFhoevU2@mid.individual.net>
In reply to#20304
Il Mon, 08 Feb 2016 17:27:54 +0100, alex ha scritto:

> E come $network_mask cosa devo specificare?

La netmask che hai impostato sul router. Per esempio 255.0.0.0 o 
255.255.255.0 o 255.255.255.128, ecc. ecc.

Bye.

[toc] | [prev] | [next] | [standalone]


#20306

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-09 07:56 +0100
Message-ID<n9c2j2$dh0$1@gioia.aioe.org>
In reply to#20305
Alessandro Pellizzari <shuriken@amiran.it> ha scritto:
> Il Mon, 08 Feb 2016 17:27:54 +0100, alex ha scritto:
> 
>> E come $network_mask cosa devo specificare?
> 
> La netmask che hai impostato sul router. Per esempio 255.0.0.0 o 
> 255.255.255.0 o 255.255.255.128, ecc. ecc.
> 
> Bye.
> 

C'è un modo per ottenerla automaticamente?
-- 


----Android NewsGroup Reader----
http://usenet.sinaapp.com/

[toc] | [prev] | [next] | [standalone]


#20307

FromLeonardo Serni <lserni@gmail.com>
Date2016-02-09 08:13 +0100
Message-ID<i94jbbpettch0943uvcs63gp1cs3hhv9o5@L.Serni>
In reply to#20306
On Tue, 9 Feb 2016 07:56:34 +0100 (GMT+01:00), alex <1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Alessandro Pellizzari <shuriken@amiran.it> ha scritto:
>> Il Mon, 08 Feb 2016 17:27:54 +0100, alex ha scritto:

>>> E come $network_mask cosa devo specificare?

>> La netmask che hai impostato sul router. Per esempio 255.0.0.0 o 
>> 255.255.255.0 o 255.255.255.128, ecc. ecc.

>C'è un modo per ottenerla automaticamente?

In generale no, perché è la risposta alla domanda "Quanto è larga la mia rete?", che
è dentro di te (oltre che dentro al router).

Si può provare a fare una interrogazione DHCP - o sfruttare il DHCP già presente sul
server. Oppure andare a occhio e mettere 255.255.255.0, che nel 99% dei casi in casa
va bene.

Leonardo

-- 

Now suppose -just suppose- I could show you a way to
manufacture a wall that would do the same job... but
was only one inch thick.

[toc] | [prev] | [next] | [standalone]


#20309

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-09 16:32 +0100
Message-ID<n9d0pm$2h8$1@gioia.aioe.org>
In reply to#20307
Il 09/02/2016 08:13, Leonardo Serni ha scritto:
> On Tue, 9 Feb 2016 07:56:34 +0100 (GMT+01:00), alex <1j9448a02@lnx159sneakemail.com.invalid> wrote:
>
>> Alessandro Pellizzari <shuriken@amiran.it> ha scritto:
>>> Il Mon, 08 Feb 2016 17:27:54 +0100, alex ha scritto:
>
>>>> E come $network_mask cosa devo specificare?
>
>>> La netmask che hai impostato sul router. Per esempio 255.0.0.0 o
>>> 255.255.255.0 o 255.255.255.128, ecc. ecc.
>
>> C'è un modo per ottenerla automaticamente?
>
> In generale no, perché è la risposta alla domanda "Quanto è larga la mia rete?", che
> è dentro di te (oltre che dentro al router).
>
> Si può provare a fare una interrogazione DHCP - o sfruttare il DHCP già presente sul
> server. Oppure andare a occhio e mettere 255.255.255.0, che nel 99% dei casi in casa
> va bene.
>
> Leonardo
>

ok, cmq dimmi che ne pensi della mia soluzione (vedi l'altro post)

[toc] | [prev] | [next] | [standalone]


#20310

FromAndrea D'Amore <anddam+NOSPAM@brapi.net>
Date2016-02-09 16:33 +0100
Message-ID<n9d0rn$j9k$1@virtdiesel.mng.cu.mi.it>
In reply to#20307
On 2016-02-09 07:13:28 +0000, Leonardo Serni said:
> In generale no, perché è la risposta alla domanda "Quanto è larga la 
> mia rete?", che
> è dentro di te (oltre che dentro al router).

Prenoto i diritti di "QueloNet".

> Si può provare a fare una interrogazione DHCP - o sfruttare il DHCP già 
> presente sul
> server. Oppure andare a occhio e mettere 255.255.255.0, che nel 99% dei 
> casi in casa
> va bene.

Dato che stiamo parlando di una applicazione web non stiamo uscendo dal 
seminato?
Se vuole servire solo i client di una certa rete perché non mettere il 
server web in ascolto solo su questa?


-- 
Andrea

[toc] | [prev] | [next] | [standalone]


#20312

Fromfmassei@gmail.com
Date2016-02-09 07:38 -0800
Message-ID<08d06435-1950-430f-9b20-23ca047a389a@googlegroups.com>
In reply to#20310
On Tuesday, February 9, 2016 at 10:33:12 AM UTC-5, Andrea D'Amore wrote:
> Se vuole servire solo i client di una certa rete perché non mettere il 
> server web in ascolto solo su questa?
> 

questo.

Ciao!

[toc] | [prev] | [next] | [standalone]


#20314

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-09 18:06 +0100
Message-ID<n9d6a3$dde$1@gioia.aioe.org>
In reply to#20312
Il 09/02/2016 16:38, fmassei@gmail.com ha scritto:
> On Tuesday, February 9, 2016 at 10:33:12 AM UTC-5, Andrea D'Amore wrote:
>> Se vuole servire solo i client di una certa rete perché non mettere il
>> server web in ascolto solo su questa?
>>
>
> questo.
>
> Ciao!
>

Il mio server contiene più web-apps; per ognuna voglio configurare 
diritti di accesso differeniti.
http://nas/guide-al-uso/ può accedere chi vuole
http://nas/dati-personali/ può accedere solo utenti della lan
ecc.

[toc] | [prev] | [next] | [standalone]


#20315

Fromfmassei@gmail.com
Date2016-02-09 09:13 -0800
Message-ID<14e10543-8208-4e9f-93ec-5455cc49d9fa@googlegroups.com>
In reply to#20314
On Tuesday, February 9, 2016 at 12:06:16 PM UTC-5, alex wrote:
> Il 09/02/2016 16:38, fmassei@gmail.com ha scritto:
> > On Tuesday, February 9, 2016 at 10:33:12 AM UTC-5, Andrea D'Amore wrote:
> >> Se vuole servire solo i client di una certa rete perché non mettere il
> >> server web in ascolto solo su questa?
> >>
> >
> > questo.
> >
> > Ciao!
> >
> 
> Il mio server contiene più web-apps; per ognuna voglio configurare 
> diritti di accesso differeniti.
> http://nas/guide-al-uso/ può accedere chi vuole
> http://nas/dati-personali/ può accedere solo utenti della lan
> ecc.

Non usare le cartelle, che non c'ha senso: configura dei virtualHost e usa
serverName diversi, tipo guide.nas e dati.nas

Ciao!

[toc] | [prev] | [next] | [standalone]


#20316

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-09 19:09 +0100
Message-ID<n9da17$k2p$1@gioia.aioe.org>
In reply to#20315
Il 09/02/2016 18:13, fmassei@gmail.com ha scritto:
> Non usare le cartelle, che non c'ha senso: configura dei virtualHost e usa
> serverName diversi, tipo guide.nas e dati.nas

sarebbe la cosa più giusta, ma il mio synology non lo permette, almeno 
credo...

[toc] | [prev] | [next] | [standalone]


#20303

FromAndrea D'Amore <anddam+NOSPAM@brapi.net>
Date2016-02-08 14:03 +0100
Message-ID<n9a3nq$7kn$1@virtdiesel.mng.cu.mi.it>
In reply to#20301
On 2016-02-08 12:35:32 +0000, alex said:

> if (same_network($_SERVER['SERVER_ADDR'], $_SERVER['REMOTE_ADDR'])) { 
> // se server e client
[…]
> }else{
> 	echo 'Autorizzazione negata';
> 	exit(1);
> }

Secondo me è un lavoro che devi far fare al webserver o al proxy che ci 
metti davanti, non all'applicazione.

-- 
Andrea

[toc] | [prev] | [next] | [standalone]


#20308

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-09 15:38 +0100
Message-ID<n9ctm3$1rs8$1@gioia.aioe.org>
In reply to#20303
Il 08/02/2016 14:03, Andrea D'Amore ha scritto:
> On 2016-02-08 12:35:32 +0000, alex said:
>
>> if (same_network($_SERVER['SERVER_ADDR'], $_SERVER['REMOTE_ADDR'])) {
>> // se server e client
> […]
>> }else{
>>     echo 'Autorizzazione negata';
>>     exit(1);
>> }
>
> Secondo me è un lavoro che devi far fare al webserver o al proxy che ci
> metti davanti, non all'applicazione.
>

Appunto.
Cmq vedi un po' se va bene quello che ho fatto.

-------> .htaccess

RewriteEngine On
RewriteRule ^(.*)$ routing/route.php [L]

--------> routing/route.php

class NetworkAddress
{

	private $networkMask;

	function __construct($networkMask = '255.255.255.0')
	{
		parent::__construct();
		$this->networkMask = $networkMask;
	}

	/**
	 * Restituisce l'indirizzo di rete relativo ad un IP
	 * applicandone la maschera.
	 *
	 * @param $ip
	 * @return int
	 */
	function get($ip)
	{
		return ip2long($ip) & ip2long($this->networkMask);
	}

}

$_ = new NetworkAddress();
if ($_->get($_SERVER['SERVER_ADDR']) == 
$_->get($_SERVER['REMOTE_ADDR'])) { // se server e client appartengono 
alla stessa rete
	$filename =
		parse_url( // serve per eliminare dall'uri eventuali parametri (?abc=...)
			$_SERVER['REQUEST_URI'],
			PHP_URL_PATH
		)
	;
	
	require "../web_apps/$filename"; // caricamento dell'applicazione vera 
e propria
}else{
	echo 'Non sei autorizzato';
}

Quindi se digito http://localhost/bimba/index.php si apre la web-app 
*bimba*.
Cosa ne pensi?

[toc] | [prev] | [next] | [standalone]


#20311

FromAndrea D'Amore <anddam+NOSPAM@brapi.net>
Date2016-02-09 16:36 +0100
Message-ID<n9d114$jdb$1@virtdiesel.mng.cu.mi.it>
In reply to#20308
On 2016-02-09 14:38:59 +0000, alex said:

> Quindi se digito http://localhost/bimba/index.php si apre la web-app *bimba*.
> Cosa ne pensi?

Che Apache HTTPD non mi piace e lo evito, comunque stai facendo solo 
una riscrittura lì, quello che sto dicendo io è, se ad esempio la tua 
rete è 192.168.0.0, di dichiarare il bind per il vserver (o come lo 
chiama httpd) solo l'interfaccia relativa e amen.
Quando stai servendo una richiesta sai già che il client appartiene 
alla rete, hai evitato il problema a monte.


-- 
Andrea

[toc] | [prev] | [next] | [standalone]


#20313

Fromalex <1j9448a02@lnx159sneakemail.com.invalid>
Date2016-02-09 16:44 +0100
Message-ID<n9d1gc$43s$1@gioia.aioe.org>
In reply to#20303
Il 08/02/2016 14:03, Andrea D'Amore ha scritto:
> On 2016-02-08 12:35:32 +0000, alex said:
>
>> if (same_network($_SERVER['SERVER_ADDR'], $_SERVER['REMOTE_ADDR'])) {
>> // se server e client
> […]
>> }else{
>>     echo 'Autorizzazione negata';
>>     exit(1);
>> }
>
> Secondo me è un lavoro che devi far fare al webserver o al proxy che ci
> metti davanti, non all'applicazione.
>

e comunque se l'accesso avviene da un computer al di fuori della rete, 
quale codice d'errore è meglio generare
401 Unauthorized?
403 Forbidden?

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.www.php


csiph-web