Avatar billede sesso Nybegynder
18. november 2007 - 19:04 Der er 25 kommentarer og
2 løsninger

XMLHttpRequest, post og kryptering

Hej,
først; jeg sidder lige og roder med noget XMLHttprRequest, hvor jeg sender noget bruger input til et php dokument, der så gemmer det i en database.
Problemet er, at når jeg bruger post-metoden til at sende informationen til dokumentet, så forstår den ikke æ, ø og å. Jeg sender informationen sådan her:

var userinput = "æøå";

xmlHttp.onreadystatechange = function () {
// some code
};
xmlHttp.open('post', 'fil.php', true);
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlHttp.send('input='+userinput);

Og i min php-fil har jeg header('Content-Type: text/html; charset=ISO-8859-1'); men den forstår ikke æ, ø og å. Når jeg bruger get-metoden, dvs. når jeg ikke har xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); (hvilket er det jeg tror er lidt skyld i den ikke forstår æ, ø og å), så forstår den fint æ, ø og å, men ikke med post-metoden.
Hvorfor løser jeg det?

Og bagefter; jeg skal have krypteret mine ting der bliver sendt med XMLHttpRequest... Jeg ved ikke hvordan det skal gøres, da jeg aldrig har arbejdet med det før. Jeg har ledt lidt, men har ikke kunne finde noget Javascript relateret, desværre.
Avatar billede anri Novice
18. november 2007 - 19:58 #1
Hvor krypteret skal det være?  Hvis du krypterer i javascript, skal du jo være ops på, at brugeren altid kan se din javascript kode, og derved bryde den.
Overvej SSL, hvis det er noget meget hemmeligt :)

Anyway, jeg kunne forestille mig at du lavede en encoding før du sendte dine data..  Det kunne være en base64-encoding.  På denne måde vil danske tegn blive gemt ned i den kodede tekst, og du vil kunne hente dem frem igen ved at dekode hvor end du ønsker det.

Bemærk at basr64 IKKE er kryptering, men dog ulæseligt for dem der ikke ved hvad de laver.
Avatar billede anri Novice
18. november 2007 - 19:59 #2
Prøv at google på base64 og javascript, så finder du en overflod af kode du kan bruge.
Avatar billede sesso Nybegynder
18. november 2007 - 20:05 #3
Well, der vil på nogen tidspunkter blive sendt et password igennem, hvilket egentligt er det der skal krypteres. Så lidt kraftigt skal det da være... Jeg vil prøve at kigge på base64:)
Men ellers, er der andre alternativer, når nu jeg skal sende passwords igennem?
Avatar billede sesso Nybegynder
18. november 2007 - 20:53 #4
*Bump*
Jeg kunne rigtig godt bruge noget hjælp, så hvis der var nogen der kunne tænke sig at hjælpe med mine to problemer, ville det jo være dejligt:D

Jeg har lige kigget lidt på base64 encoding, men det jeg er lidt nysgerrig om hvor vidt det er muligt at lave noget, så man ikke umiddelbart kan se i kildekoden, hvordan det krypteres?
Avatar billede anri Novice
18. november 2007 - 21:36 #5
AAh..  Passwords..  Så skal du bruge hashing.

En hash er en kode der genereres udfra eksempeltvis et password. Det er så kompleks at man ikke umiddelbart kan dekryptere det og derved ikke gendanne passwordet.

Det man kan gøre er at gemme den generede hash i en database og når man så skal se om det er det rigtige password brugeren har indtastet, så laver man blot en ny HASH og sammenligner disse.

Det der er tricket her er at der ikke vil blive sendt noget over nettet som brugeren kan bruge til at gendanne passwordet.

Her er noget kode til at generere en SHA1 hash
http://www.webtoolkit.info/javascript-sha1.html
Avatar billede anri Novice
18. november 2007 - 21:52 #6
Check lige det her site..
http://www.codeproject.com/useritems/Crypto.asp

Der er der lidt forklaring om hvad hashing er (i afsnit 3)
Avatar billede anri Novice
18. november 2007 - 21:53 #7
...og derudover kan base64-encoding godt være løsningen på dit æøå problem.
Avatar billede sesso Nybegynder
18. november 2007 - 22:50 #8
Cool, nu har jeg ihverfald mine passwords krypteret ... det virker super, og så fik jeg også lejlighed til at læse om hashing og cryptegraphy:P

Hvordan skal base64-encoding kunne hjælpe på mit problem? Løsningen må vel egentligt være at encode og decode teksten iso-8859-15 til utf8 og decode det når det skal udskrives ... hvordan ved jeg dog ikke, og har ikke kunne finde noget brugbart via. google.
Avatar billede sesso Nybegynder
18. november 2007 - 23:27 #9
Okay, inde på webtoolkit.info fandt jeg en utf-8 encoder/decoder i javascript, og så prøvede jeg at tage og encode bruger indholdet der bliver sendt til et php-dokument med den, og når php-dokumentet så havde modtaget det, blev de decodet med phps indbyggede utf8_decode, før det bliver sat i databasen. Når jeg så trækker noget ud af databasen gør jeg bare det modsatte. Det resulterede i at, følgende blev til fÒ¸lgende ... hvorfor det ikke virker kan jeg dog ikke forstå. Kan det være fordi de to filer der sender indholdet og modtager det, begge er iso-8859-15?
Avatar billede anri Novice
18. november 2007 - 23:38 #10
Har du prøvet at skrive det ud på skærmen inden du lægger det i databasen..  Jeg fisker blot efter om det er dekodningen, eller overførslen til/fra databasen der fucker op.
Avatar billede montago Praktikant
19. november 2007 - 10:37 #11
du skal bruge EncodeURIComponent når man sender ÆØÅ over Ajax.

dét som er vigtigt er at serverside scriptet forstår den encoding du sender med,

UTF8 --> UTF8
Unicode --> Unicode
ASCII --> ASCII

ellers fucker det hele op

husk at et UTF8 dokument med iso.8859-1 (Latin-1, ASCII) læses forkert af Explore, og formegentligt også af ASP/PHP...

det er som regel nemmest at overholde UTF8 end ASCII
Avatar billede montago Praktikant
19. november 2007 - 10:38 #12
* UTF8 dokument med iso-8859-1 Header *
Avatar billede sesso Nybegynder
19. november 2007 - 16:36 #13
Nu har jeg lige siddet og leget lidt med encodeURIComponent. Det jeg gjorde var, at alt data der blev sendt videre til et php dokument, men encoded, og alt der blev modtaget blev decoded, men jeg fandt meget hurtigt ud af at det ikke rigtig gør som det burde. Hvis jeg tager en streng der indeholder et æ og smider encodeURIComponent på den streng, bliver indholdet lavet om til %C3%A4, men hvis jeg sender strengen der indeholder %C3%A4 videre til php-dokumentet, så bliver den lavet om til noget den ikke skulle, hvilket jeg synes er meget mærkeligt. For hvis jeg blot tager og fylder en streng med %C3%A4, så modtager php-dokumentet det rigtig nok... Hvorfor det?

Jeg har set mig nødsaget til at lave en crapcoding hvor jeg tager og replacer æ, ø og å med ae, oe og aa, som en midlertidig løsning. Der er desværre også opstået en _utroligt_ mærkelig fejl, men den høre vidst ikke til her:)
Avatar billede sesso Nybegynder
19. november 2007 - 20:07 #14
Og forresten montago; du siger det som regel er nemmest at overholde UTF8 end ASCII, men så har man da et problem hvad angår æøå?
Avatar billede montago Praktikant
19. november 2007 - 21:32 #15
hehe... tro mig.. jeg har for nyligt brugt 2 uger på at finde ud af alt det her mystiske FANDENS FUCKING LORT... med charsets.. :)


en HTML side er gemt binært med i UTF-8 (tjek med Notepad++)
i headeren skriver du en meta, hvor du angiver content encoding
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

dét der sker nu, er at IE fucker alle dine Querystrings, og sender dem i UTF-8
Firefox derimod, sender dem i ASCII, eller Latin-1 encoding som man kalder den

dette gælder også for scripts, det er derfor vigtigt at du gemmer filerne i det rette format, og sørger for at angive det korrekte format alle steder, til at være det samme!

%C3%A4 er UTF-8 formatteret
hvorimod %e6 er 'æ' i Latin-1

Hvis PHP ikke fatter UTF-8 Querystrings, skal du sørge for at URL-encode til Latin-1... men da Javascript ikke har Latin-1 URLencoding indbygget, er det derfor nemmere at skifte til UTF-8 --- dette var løsningen for mig...

jeg bruger ASP, og har indstillet scriptet til at køre UTF-8

husk at det som regel er selve FILEN som skal gemmes i UTF-8 for at skifte til UTF-8


FUCKED UP MED CHARSETS... I HATE THEM !!...
Avatar billede sesso Nybegynder
19. november 2007 - 22:31 #16
Mange, mange, mange gange tak for det tip, montago! Nu har jeg fået det til at virke - den sender æøå helt perfekt. Jeg opdagede dog noget lidt mærkeligt; hvis jeg bruger decodeURIComponent når jeg trækker tingene ud, laver det mere ballade end det gør godt. For hvis jeg ikke bruger det, køre alt, indtil videre som smurt, men hvis jeg smider det på, er der nogen steder det går galt... Hvorfor er decodeURIComponent ikke nødvendigt?

og for en god ordens skyld, så skal det lige siges at alle mine php-dokumenter der modtager og giver ting til javascript er utf8 encoded, men alle mine andre sider er stadigvæk iso-8859-1.
Avatar billede sesso Nybegynder
19. november 2007 - 22:48 #17
Okay, jeg har lige fundet ud af at indholdet, selvom det optræder rigtigt når javascript spytter det ud, optræder således i databasen: følgende; Dvs. at når mine iso-8859-15 gemte dokumenter der også har et meta der angiver iso-8859-15 charset, udskriver teksten ved at hente det fra databasen, ser det således ud: ÊÞÃ; jeg har prøvet at gemme filerne som utf8, men beholde iso-8859-15 meta charsettet, men det virker heller ikke... Det er virkelig ærgeligt!!
Avatar billede sesso Nybegynder
20. november 2007 - 07:03 #18
Wtf???
Hvor er de sidste 2-3 posts jeg har skrevet blevet af?:/
Avatar billede montago Praktikant
20. november 2007 - 08:35 #19
Eksperten spiser nogle gange ens post... det er fucked up..

ISO-8859-15 ??? hvorfor ikke latin-1 ? 8859-1 ...

de data du modtager fra php i dit AJAX skal ikke køres igennem decodeUricomp... fordi xmlHTTPRequest allerede gør det for dig.

som sagt... er det nemmere at køre UTF-8 hele vejen igennem..

hvis du får mærkelige tegn fra databasen, er de sikkert gemt rigtig nok derinde, men du læser dem/viser dem med forkert charset.
Avatar billede montago Praktikant
20. november 2007 - 08:36 #20
ÊÞà <-- UTF-8 som læses som 8859-1
Avatar billede montago Praktikant
20. november 2007 - 08:37 #21
men bare rolig... det bliver værre endnu :D...
Avatar billede sesso Nybegynder
20. november 2007 - 12:49 #22
Well, som jeg skrev i et tidligere indlæg har jeg konverteret _alle_ mine dokumenter til utf8, hvilket resulterede i at det bare virker:D
Rigtig lækkert!!

Jeg forestiller mig at i, montago og anri, deler pointene fifty/fifty, så hvis i smider nogen svar ville det være dejligt:)
Avatar billede anri Novice
20. november 2007 - 14:01 #23
Et svar skal du da få :)
Avatar billede montago Praktikant
20. november 2007 - 15:08 #24
Yoda
Avatar billede sovetryne Nybegynder
27. december 2008 - 23:50 #25
Nu skal jeg endnu finde ud af hvorfor det fucker op for mig.
Avatar billede anri Novice
28. december 2008 - 14:04 #26
Hvis du har samme problem, men ikke finder løsningen her, vil jeg foreslå at du opretter en ny tråd om det.
Avatar billede sovetryne Nybegynder
28. december 2008 - 22:46 #27
Har fundet løsningen.
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

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