PDA

Visualizza la versione completa : Win32 AuthenticateUser


fmc_alfredo
23-01-2009, 11:13
Ciao a tutti,
ho un problema relativo all'autenticazione di un utente su un dominio windows
usando il modulo:

use Win32::AuthenticateUser;

AuthenticateUser("domain", "user", "passwd");


Il problema sorge quando ci sono dei caratteri speciali all'interno della
password in particolare il carattere £ (lira)

Cioè se ho una password tipo £pippo l'autenticazione fallisce se invece ci
sono caratteri normali va tutto ok

Ho cercato in rete ma non ho trovato niente di utile, qualcuno sa darmi una
mano ?

shishii
23-01-2009, 19:38
Stai lavorando in rete?

se è così credo ci sia un problema di codifica dei caratteri differente tra le due macchine.

fmc_alfredo
26-01-2009, 09:27
Il controller di dominio è sicuramente su un altro server, (ma sono tutte macchine windows) in pratica da un pc in rete prima di far accedere l'utente ad un'applicazione web, chiedo l'autenticazione al dominio, (in questo modo l'utente userà sempre le stesse credenziali, sia per accedere al dominio, sia per accedere alla mia applicazione web).

Però la cosa strana è che con altri caratteri strani (tipo il $) la cosa funziona, e prorpio sul carattere £ (e credo anche che questa dia fastidio solo se si trovi alla prima posizione della password: Es. £pippo) che si crea l'intoppo.

D'altra parte mi è anche difficile fare molte prove, in quanto le politiche di sicurezza prevedono che le password che posso cambiare devono rispettare determinati requisiti ecc. per cui non posso cambiare 10 voilte password per poter fare le prove e cose del genere...

Comunque supponendo che sia come dici tu, cioè che ci sia un problema di codifica, cosa potrei provare a fare ?

Mich_
26-01-2009, 10:43
Ci sono caratteri compresi nella tabella ASCII a 7 bit e caratteri che usano il bit 8 o che addirittura necessitano di due byte.
I caratteri che stanno sotto il 128 (cioe` che usano i 7 bit) sono codificati tutti nello stesso modo in tutti i sistemi.
Per gli altri le codifiche possono essere diverse (ad esempio le codifiche win e unix qualche anno fa erano diverse - ora non mi sono tenuto aggiornato).

Se cerchi in rete dovresti trovare tutte le codifiche; prova con i termini "charset TuoSistemaOperativo"

Ulteriore complicazione e` data dal fatto che i caratteri a due byte possono essere codificati in modo diverso dalle diverse architetture (Intel, Motorola, Altri), che corrisponde alla diversa codifica dei numeri interi.

Conclusione:
Nelle passwd non e` cosa sana usare caratteri diversi dagli ASCII standard; un controllino alla fonte per evitarli potrebbe risolvere il problema.

fmc_alfredo
26-01-2009, 11:29
Originariamente inviato da Mich_
Ci sono caratteri compresi nella tabella ASCII a 7 bit e caratteri che usano il bit 8 o che addirittura necessitano di due byte.
I caratteri che stanno sotto il 128 (cioe` che usano i 7 bit) sono codificati tutti nello stesso modo in tutti i sistemi.
Per gli altri le codifiche possono essere diverse (ad esempio le codifiche win e unix qualche anno fa erano diverse - ora non mi sono tenuto aggiornato).

Se cerchi in rete dovresti trovare tutte le codifiche; prova con i termini "charset TuoSistemaOperativo"

Ulteriore complicazione e` data dal fatto che i caratteri a due byte possono essere codificati in modo diverso dalle diverse architetture (Intel, Motorola, Altri), che corrisponde alla diversa codifica dei numeri interi.

Conclusione:
Nelle passwd non e` cosa sana usare caratteri diversi dagli ASCII standard; un controllino alla fonte per evitarli potrebbe risolvere il problema.

Grazie della risposte precisa e dettagliata..
purtroppo il modulo in questione accetta 3 parametri che suppongo passerà pari pari al controller di dominio (che non so su che tipo di windows gira, credo un 2003 server) e ottine come ritorno vero o falso...

Chiaramente non posso influenzare la scelta delle password delle migliaia di utenti (questa cosa gira in una grande azienda nazionale) anche perchè come dicevo le politiche adottte sono molto strane e prevedono l'utilizzo di almeno un carattere numerico e un carattere 'speciale' per cui sono proprio le politiche aziendali che fanno questa richiesta...
io purtroppo posso solo adattarmi a queste scelte.

Mich_
26-01-2009, 12:03
Chiaramente il problema si pone solo nei casi in cui l'utente ha una tastiera italiana ... dato che con le tastiere inglesi non ci sono caratteri superiori al 127.

E capisco ed approvo la poliltica che vuole un carattere diverso da numerico e alfabetico (un po' meno che venga consentito un carattere fuori-ASCII)

Provo a fare qualche domanda; vogliono essere piu` spunti di ragionamento che curiosita`.

Tu stai lavorando su un server di rete che a sua volta fa accesso al server di database?
Tu ricevi le passwd in chiaro o gia` codificate? E le elabori in qualche modo o le passi pari-pari?
Hai accesso al sw (JS ?) che accetta le passwd sul client? Puoi modificarlo?

Puoi controllare le passwd (su client o server di rete) e "scartare" quelle che contengono il carattere lire?
In alternativa: puoi convertire il carattere lire in altro carattere ASCII (scegli un carattere speciale non presente sulle tastiere italiane)?

fmc_alfredo
26-01-2009, 12:13
Provo a fare qualche domanda; vogliono essere piu` spunti di ragionamento che curiosita`.

Tu stai lavorando su un server di rete che a sua volta fa accesso al server di database?

Io ho fatto un'applicazione web, nella quale ho inserito una form dove faccio inserire Dominio, Utente, Password
Prendo questi 3 valori e li passo al modulo perl Win32::AuthenticateUser il quele mi ritorna 0 o 1
Se ricevo 1 allora faccio tutta una serie di cose per consentire all'utente di sfruttare l'applicazione web, altrimenti gli dico: login errato


Tu ricevi le passwd in chiaro o gia` codificate? E le elabori in qualche modo o le passi pari-pari?

Non tocco nella maiera più assoluta le password, NON posso verificarle, modificarle, catturarle ecc. anche se protrei farlo, ma per ovvie ragioni NON DEVO FARLO.



Hai accesso al sw (JS ?) che accetta le passwd sul client? Puoi modificarlo?

Se intendi la cgi che costituisce la form di ingreso dati... quella si l'ho fatta io, ma come dicevo nel punto precedente NON DEVO in nessun modo intervenire sulla password



Puoi controllare le passwd (su client o server di rete) e "scartare" quelle che contengono il carattere lire?
In alternativa: puoi convertire il carattere lire in altro carattere ASCII (scegli un carattere speciale non presente sulle tastiere italiane)?
Questo non mi risolverebbe il problema, perchè lato client POTREI , macome ho gia detto NON DEVO FARLO, manipolare la password, ma poi cosa manderei all controller di dominio ? lui si aspetta associato all'utente XXXX la password £aabcd1234 e quindi anche se volessi lavorare lato client la password, non potrei fare niente...

Mich_
26-01-2009, 12:28
Cioe` mi dici che fai girare in rete delle passwd in chiaro?
Non e` una bella soluzione.

Inlinea di massima le passwd dovrebbero essere codificate sul computer in cui sono digitate, e poi trasmesse codificate.
Il processo di codifica e` una procedura "a senso unico" (non esiste decodificatore), per cui a quel punto le passwd non sono piu` individuabili.
Quindi la codifica dovrebbe essere realizzata direttamente da JS sul client, prima di trasmettere il dato nel form (ad esempio all'evento onsubmit)

Questo comporta che devi chiamare il processo per la verifica in altro modo, dato che ora riceve le passwd in modo codificato. Vedi se questo e` possibile sul tuo server.
E questo ti permetterebbe di superare il problema dei caratteri strani.

fmc_alfredo
26-01-2009, 13:11
Originariamente inviato da Mich_
Cioe` mi dici che fai girare in rete delle passwd in chiaro?
Non e` una bella soluzione.

Inlinea di massima le passwd dovrebbero essere codificate sul computer in cui sono digitate, e poi trasmesse codificate.
Il processo di codifica e` una procedura "a senso unico" (non esiste decodificatore), per cui a quel punto le passwd non sono piu` individuabili.
Quindi la codifica dovrebbe essere realizzata direttamente da JS sul client, prima di trasmettere il dato nel form (ad esempio all'evento onsubmit)

Questo comporta che devi chiamare il processo per la verifica in altro modo, dato che ora riceve le passwd in modo codificato. Vedi se questo e` possibile sul tuo server.
E questo ti permetterebbe di superare il problema dei caratteri strani.

Ok, ma questo è un altro film...

E poi io sono costretto a passare al controller di dominio (tramite il modulo perl) la password così come la inserisce l'utente... quindi al max potrei pensare ad un sistema di codifica/decodifica fino al webserver dove c'è la mia applicazione, ma poi la devo comunque passare in chiaro al controller di dominio.

Loading