Avatar billede quaid Nybegynder
21. oktober 2002 - 09:41 Der er 5 kommentarer og
3 løsninger

Kan man snyde .equals() ?

Jeg har lavet noget kode der kører på en server. Hvis en bruger ønsker at få noget data retur skal der et password med. Dette har jeg implementeret med en simpel .equals() der ser om key værdien er det samme som den password parameter der kommer med.

public String getDifferenceDecimaler(String password)
    {
        String DifferenceDecimaler ="Acces denied";
        if (password.equals(key))
        {       
        data = RW.readData();
        DifferenceDecimaler = data[28];
        }           
        return DifferenceDecimaler;
       
    }

Spørgsmålet er nu om man kan give metoden et hack (parameter) der snyder den, så den tror at de er ens, og derved smider uvedkommende data retur??
Måske er spørgsmålet overflødigt, men jeg syntes snart at man har set mange eksempler på at der kan fuskes.
QD::
Avatar billede disky Nybegynder
21. oktober 2002 - 09:53 #1
Bruger du en database ?

Hvis du gør gem dit password i databasen MD5 kodet, og kod brugens indtastning med MD5 også

og lav så en

select id from bruger where username='quaid' and password=password('12345')

Så koder den selv '12345' med md5 og slår op i databasen, og returnerer kun et ID hvis brugeren findes og har indtastet korrekt password, husk at username ikke altid skal være 'quaid.

Det du skal passe på hvis brugeren skal indtaste fra en form eller lignende er følgende tegn:

='"<>

Dem skal du så fjerne inden du checker.
Avatar billede arne_v Ekspert
21. oktober 2002 - 09:58 #2
Du kan godt stole på equals testet. Hvis den returnerer true, så
er de ens.
Avatar billede quaid Nybegynder
21. oktober 2002 - 10:00 #3
Nej der er ingen database. Key værdien bliver hentet fra et simpelt xml dokument, så server administratoren selv kan ændre det når han ønsker det.
QD::
Avatar billede disky Nybegynder
21. oktober 2002 - 10:05 #4
quaid:
Så kan du godt regne med equals virker som den skal.

Det er specificeret at equals() KUN må returnerer 'true' hvis og kun hvis de to ting der bliver sammenlignet er 100% ens !

p.s. Jeg ville personligt ikke stole på et system hvor passwords ligger frit tilgængelige i en fil, eller DB ukrypteret.
Avatar billede Slettet bruger
21. oktober 2002 - 10:15 #5
Man kunne prøve med en

getDifferenceDecimaler(new String() {
public boolean equals() { return true; }
});

Men det går ikke, fordi String er final. Så du er sikret.
Avatar billede quaid Nybegynder
21. oktober 2002 - 10:20 #6
Nej jeg ville heller ikke stole på det hvis det var kritisk.
Men i øvrigt vil det da ikke være det store problem at oprette en lille acces database, og lægge password og bruger ned i den.
Det kræver ikke stor fantasi at ændre det eksisterende som det ser ud nu.
Mange tak for deltagelsen.
Syntes at i bør dele.
QD::
Avatar billede quaid Nybegynder
21. oktober 2002 - 10:22 #7
I øvrigt! Er den md5 kryptering en del af oracle eller findes den også i acces?
QD::
Avatar billede disky Nybegynder
21. oktober 2002 - 10:58 #8
MD5 er en envejs hash metode, om den findes i access ved jeg faktisk ikke.
Jeg bruger altid selv MySQL hvis jeg skal bruge en database.

Jeg mener den er med i Oracle, er dog ikke 100% sikker.

p.s. Jeg brugte fejlagtigt ordet kryptering,. MD5 er envejs når du har en MD5 kode kan du ikke finde ud af hvad den originale text var.
Teoretisk kan man snyde den, men chancen er extremt lille.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester