Aiuto per realizzare controllo IP utenza

Salve a tutti, per me e la prima  che apro un topic visto che sono appena iscritto qui.

Ho creato un tool in php per registrare gli indirizzi ip le porte del server, e il nome dell'hosting, e anche il tipo di Browser che sta navigando, il tutto viene inserito in una tabella utenti di MySql.

Poi ho passato sotto ad un while il risultato degli ip di registrazzione e di ingresso login per fare un confronto, e ottenere così una lista di possibili registrazioni doppie, con scarso risultato però.

Se cerco di filtrare i dati degli ip, non mi fa una cosa corretta essendo che gli ip hanno il punto tra una serie e un'altra e quindi il codice giustamente me lo vede come un interruzione.

Vorrei poter riuscire a capire come devo fare per poter verificare l'esistenza, di persone che vogliono imbrogliare registrando più nomi dallo stesso pc o postazione, in modo che posso controllare e intervenire manualmente per levare questa possibilità.

Ce qualcuno che può darmi una mano per questo problema che mi assilla da tempo?

Ho cercato anche in rete ma non ce nulla sull'argomento.

Grazie in anticipo per le risposte che mi darete.  :)

inviato 8 anni fa
Brascka
X 0 X

Ciao Brascka e benvenuto nel forum di phpnews.it,

da quanto ho capito vorresti evitare che alcuni utenti utilizzino gli stessi dati per effettuare una registrazione, un metodo semplice e veloce per ottenere questo è dichiarere i campi username ed email come UNIQUE nel database, questo dovrebbe vincolare l'utente ad inserire un'email diversa per registrarsi.

Ovviamente l'utente potrebbe inserire differenti indirizzi email inesistenti al fine di effettuare numerose registrazioni, per ovviare a questo potresti fare questo:

* aggiungi un campo "attivato" al database (tinyint(1) , default 0)

* quanto l'utente richiede la registrazione (inserendo solo la sua email ed il suo username) se l'usarname è disponibile, nel database salverai l'username, l'email e l'ip dell'utente, insieme all'ora di registrazione.

* invii una email contenente la password ed un link per attivare il suo account, il link punterà ad un tuo file che controllerà l'ip, l'email e l'orario, se l'orario è maggiore di 24ore o l'ip è diverso eliminerai il record dal database, altrimenti l'utente sarà registrato e potrà accedere con la password che gli hai inviato.

Per ulteriori chiarimenti non esitare a chiedere.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Grazie di avermi risposto, in effetti era un idea che mi aveva balenato per la testa, ma poi in quel modo basta confermare e attendere qualche ora e si può benissimo registrare un'altro utente, e sufficiente riavviare il ruter per ottenere un IP nuovo  :-\

Il controllo fatto su ip, host, tipo di browes usato e orario mi permette di vedere infine quanti accessi ha effettuato, e da che postazione, magari con l'aggiunta di un cookie che identifica univocamente l'user in questione.

Ovvio che se il cookie venisse eliminato il controllo andrebbe a farsi benendire, per cui chiedevo se ce un metodo da poter eventualmente fare per ottener il controllo.

Ti metto anche il codice a cui mi ha sottoposto un programmatore, e il suo scritto commentato, io non ci capisco nulla magari tu o altri potreste delucidarmi.

Lui come mi dice non ha tempo di potermelo spiegare, o eventualmente darmi una mano, quindi vorrei sapere se una cosa del genere sia ottimale o meno, oppure propormi qualcosa di diverso ma funzionale per poter ottenere il risultato da me ricercato.

>User dice: secondo me, è la più performante ... ovvero il cookie contiene un hash ... quando esegui il login lanci un

mysql_query('REPLACE INTO prefisso_tabella VALUES('' . md5(uiniqid(microtime(), true), true) . '', ' . $userid . ', ' . ip2long($_SERVER['REMOTE_ADDR']) . ', ' . time() . ')');

e poi da pannello di controllo, in un'apposita sezione, verifichi i doppioni di userid e fai in auto i collegamenti ... una query tipo

SELECT
   *

FROM
  utenti AS uu
  INNER JOIN checktable AS ctu ON uu.id = ctu.user_id

sai per esempio quali utenti hanno avuto accesso su quali computer

per sapere poi eventuali collegamenti con altri utenti puoi fare

SELECT
   uu.*, uc.*

FROM
  utenti AS uu
  INNER JOIN checktable AS ctu ON uu.id = ctu.user_id
  INNER JOIN checktable AS ctc ON (ctu.cookie_hash = ctc.cookie_hash AND ctc.user_id != uu.id)
  INNER JOIN utenti AS uc ON ctc.user_id = uc.id

Mi sono costruito un database di prova riempendo a mano la tabella degli utenti e con questo codice riempiendo quella delle registrazioni al momento del login

<?php

mysql_connect("localhost", "root", "");
mysql_select_db("test");

$cookielist = array();
for($i=0; $i < 50; $i++)
{
    $cookielist[] = md5(uniqid(microtime(), true));
}

$query = mysql_query("SELECT * FROM utenti");
while($row = mysql_fetch_object($query))
{
    mt_srand();
    for($i=0; $i < mt_rand(3, 0); $i++)
    {
        mt_srand();
        mysql_query('
            REPLACE INTO
                checktable

            VALUES
            (
                0x' . $cookielist[mt_rand(49, 0)] . ', ' .
                $row->id . ', ' .
                ip2long($_SERVER['REMOTE_ADDR']) . ', ' .
                time() .
            ')') or die(mysql_error());
    }
}

mysql_close();

?>

siccome sto per fuggire ho lasciato perdere i prefissi e co. fai comunque qualche test per vedere se la soluzione è effettivamente affidabile nel senso che le combinazioni che ti butta fuori sono vere o meno ... io sto di fretta e non posso fare altri test

il codice della tabella checktable che ho costruito al volo è

CREATE TABLE `checktable` (
  `cookie_hash` binary(16) NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `last_ip` int(10) unsigned NOT NULL,
  `last_date` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`cookie_hash`,`user_id`),
  KEY `cookie_hash` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

mentre quella utenti

CREATE TABLE `utenti` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `nome` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Questo codice mi è stato proposto indicativamente cosa si potrebbe fare, ho fatto alcune prove, solo che io in fatto di mysql non sono un professore, e non riesco a comprenderne la meccanica.

Ovvero capisco cosa faccia, ma non riesco ad adeguarlo poi a il mio codice perchè usa degli alias e non capisco da dove arrivino ne come si fanno.

I controlli sulla mail li ho fatti in fase di registrazione e scarta quelle mail che hai giustamente indicato, una soluzione tipo quella che ho messo secondo te è fattibile?

Se si come potrei procedere per semplificarla?

Nell'istruzione md5(uiniqid(microtime(), true), true) ci va un cookie che viene inserito in modo binario come descritto nel codice soprastante, e li va tutto bene, ma e sul resto sul modo poi di interagire con ci ho capito nulla.

risposto 8 anni fa
Brascka
X 0 X

P.S

Specifico che il testo di chi mi ha consigliato, finisce sull'ultima parte di codice, per quello che ha fretta di fuggire non sono io  ;)

risposto 8 anni fa
Brascka
X 0 X

Tutti gli utenti Fastweb escono su internet con una manciata di indirizzi IP condivisi. In altre parole un gran numero di utenti Fastweb condivide un unico IP.

Il controllo sull'IP quindi non è efficace e taglierebbe fuori questa categoria di utenti.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Si so anche di fastweb, (purtroppo), anche se per la sicurezza (Per fortuna).

se io unisco il fattore cookie in quel modo posso vedere se si tratta della stessa persona che si logga con tizio o caio, ma purtroppo anche li se l'utente sa di questo controllo elimina il cookie e quindi il mio controllo torna ad esser inutile.

So che nei forum ce questo controllo per dare univocità all'user, in modo tale da evitare nel complesso che ci siamo più user dallo stesso pc.

Il metodo usato dei forum mi andrebbe pure bene, ma sapere almeno come si faccia a farlo.

Vedete, ce chi mi ha detto di usare un controllo MECADRES, (Illegale e quindi si scarta, oltre la compatibilità solo verso windows) che tra virgolette non so nemmeno da che parte cominciare.

Poi mi è stato detto di usare un algoritmo tra coockie, ip, hostname, porta server, anche qui con scarsi risultati, poiche come ho specificato sopra non ci ho capito un granchè.

Poi mi è stato detto di usare il flusso dati, ma senza specificare di che tipo e come, in pratica un applicazione lato server come php, che vada ad interagire con apache, e controlla i vari nodi della rete di dove l'user passa, ma senza altre indicazioni solo un idea buttata li.

Quindi ho girato per il web in cerca di materiali ed esempi vari, ma non ce nulla a riguardo, poichè l'applicativo che cerco è complicato, e chi lo ha fatto per ovvi motivi evita di far conoscere il modo che usa, proprio per evitare che si venga a conoscenza e quindi magari aggirare qual controllo.

Come vedete mi sono informato e so le problematiche, anche se poi non sono un ingegnere informatico, per cui ho i miei limiti di conoscenza, che man mano cerco di ampliare.

Vorrei infine aver delle dritte in modo da potermi almeno orientare a sviluppare anche da me un applicativo del genere, ma senza una guida, o un riferimento la vedo dura.

Sono mesi che cerco di farlo, e cercare un modo per poterlo sviluppare, una mano in questo senso mi sarebbe utile, e fino ad ora non ho trovato nessuno che mi potesse delucidare in merito.

Help my, pelace...  :'(

risposto 8 anni fa
Brascka
X 0 X

La maggior parte delle cose che ti sono state suggerite sono delle sciocchezze. Cos'è il controllo MECADRES? Forse intendevi registrare il MAC address? E' un'altra sciocchezza.

Affrontiamo il problema con serietà: quali sono i dati che identificano l'utente?

1) credenziali di login (username e password)

2) indirizzo email utilizzato durante la registrazione

3) indirizzo IP utilizzato durante la registrazione

4) browser utilizzato durante la registrazione

5) cookies registrati sul browser utilizzato durante la registrazione

non me ne vengono altre  :)

vediamo punto per punto come fare ad aggirare un controllo basato su queste informazioni

1) un utente può iscriversi usando diverse credenziali

2) un utente può usare un indirizzo email diverso per ciascuna registrazione

3) alcuni utenti possono facilmente cambiare indirizzo IP, altri invece possono avere tutti lo stesso IP, generando falsi positivi

4) il controllo del browser utilizzato, generalmente associato al controllo sull'IP, può essere facilmente aggirato utilizzando un browser differente

5) i cookie possono essere eliminati da qualsiasi browser

Come vedi non esiste un sistema che scongiura le iscrizioni multiple

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Grazie per le delucidazioni, almeno ora ho le idee più chiare  :)

Quindi un controllo su queste cose non sarebbe mai fattibile  :-\

Allora dovrebbe comunque esserci un metodo per poter vagliare manualmente queste cose.

Ovvero:

1) Io prendo i dati possibili come IP, Hostname, porta server, tipo di bowser e cookie.

2) Incanalo questi dati sotto nome utente in una tabella, mettiamo user.

3) Calcolare i possibili doppi da questi dati in uscita tramite un controllo incrociato con un supporto di codice.

4) Il risultato di questi dati vengono filtrati per nome utente e visualizzati a schermo.

5) Interpretare questi dati, ovvero chiedere anche nel possibile all'user stesso se nel caso abbia commesso un doppio involontario, oppure no.

E sull'ultimo passaggio andrebbe un po sul fatto che una persona sia onesta nel dire qualcosa.

Quindi come faccio a fare dai punti da 1 a 4?

Ho provato anche ciclare i risultati tramite while, ma a parte una lista di nomi, mail, ip e quant'altro non mi viene fuori.

Come fare per agevolarmi un po questo controllo sommario?

Questa cosa come hai ben detto non da certezze al 100%, ma se non altro mi da modo per poter poi curare quegli user sospetti, che si vedono nel tempo se sono i medesimi ad accedere o sbaglio?

Grazie della riposta in anticipo e scusami se ti assillo  :bye:

risposto 8 anni fa
Brascka
X 0 X

Scusate l'intrusione ma io non riesco a capire per quale motivo ci si ostina a capire se e lo stesso utente a registrarsi ?

tanto diventa inutile con un po di astuzia ........

1: chi ha connessioni esempio adsl in genere ..... basta sconnettere e riconnettere che ha cambiato ip ...

2: utenti fastweb come me .... se vogliono taroccare, basta che passano attraverso un proxy e il gioco e fatto ... se poi non si ha dimestichezza in queste cose basta usare firefox e validia e il gioco e fatto .... mi camuffo tutte le volte che voglio..... quindi puoi cercarmi duplicato quanto vuoi ... ma io sono sempre una persona diversa .... quindi dove sta l'utilita' di capire se e sempre lo stesso utente ?

tanto se si vuole essere scorretti ci soo migliaia di possibilita' di rimanere diciamo fregati ...

risposto 8 anni fa
costaplus
modificato 8 anni fa
X 0 X

@Brascka

Premesso che tutti questi controlli potrebbero risultare solo in una perdita di tempo...

Sai come si ricavano le informazioni dell'utente (IP, browser, sistema operativo, ecc.)? Memorizzale nella tabella in cui registri gli utenti.

Quando un nuovo utente prova a registrarsi recupera le suddette informazioni e controlla se nella tabella degli utenti non ci sia un record con gli stessi identici dati. Lo sai fare?

Durante la procedura di registrazione inoltre contolla se l'utente ha un cookie di nome "registrato". Lo sai fare? Se non ce l'ha allora invierai questo cookie altrimenti impedirai la registrazione. Lo sai fare?

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Grazie di avermi detto la cosa a cui non riuscivo ad arrivare, ovvero la meccanica su cui poggiare il mio codice  ::)

Naturalmente avrei preferito notizie più buone, del tipo "Esiste questa possibilità" oppure "Ce qualcuno che ha fatto così", ma evidentemente non ce nulla da fare.  :crazy:

Ogni uno si programma il suo codice come meglio vede e secondo le sue possibilità e necessità.

Per quanto riguarda Costaplus, hai ragione su quanto dici, e spero vivamente che non sei come quelli che vogliono fare i furbi, per cosa poi, boooooo  ;D

Quindi non mi rimane che farmi una cosa proprietaria, usando sicuramente la potenza del server, il quale vede anche i proxy con una piccola accortezza.

Già leggendomi il papiro dei sistemi server ho notato alcune cose molto utili, le quali userò con piacere  :smitten:

Grazie di tutto a tutti voi, nel caso avessi bisogno per qualcosa d'altro tornerò a postare  :bye:

risposto 8 anni fa
Brascka
X 0 X

Tengo a precisare che la raffica di "Lo sai fare?" mi serviva per capire dove erano esattamente i problemi.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Scusa il ritardo nella risposta  :)

Si avevo capito che chiedevi per sapere dove stava la mia difficoltà, ed era solo sul fatto di come implementarla, visto che il codice php lo conosco, non a livello magistrale, ma me la cavicchio  :coolsmiley:

Grazie ancora Gianni del tempo che hai dedicato e dedichi a tutti qui.  :bye:

risposto 8 anni fa
Brascka
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda