Avatar billede tofferman Nybegynder
07. august 2006 - 20:56 Der er 17 kommentarer og
2 løsninger

Danske karakterer med asp

Hej.
Jeg har et lille problem med æ, ø og å.

Af sikkerhedshensyn anvender jeg server.htmlencode når jeg skal gemme input fra brugerne til min database. Men når jeg skal hente det frem igen giver det problemer.

Når teksten hives frem i browseren bliver den vist korrekt, medmindre jeg forkorter teksten.

F.eks. er følgende streng sendt til databasen: "Lejlighed søges".

Dette er gemt som "Lejlighed søges", hvilket er helt ok, da det vises korrekt i browseren.

Problemet er, hvis jeg afkorter teksten inden den vises i browseren til f.eks. 12 tegn. Så kommer der ikke til at stå "Lejlighed sø", men "Lejlighed s&".

Det ser jo ikke kønt ud, og det giver også problemer i forbindelse med validering af rss-feeds som jeg roder lidt med.

Er der nogen som har ideer til hvordan man omgås dette problem, uden at man skal lave en alenlang replace-funktion hver gang man skal skrive noget til skærmen eller til et rss-feed?
Avatar billede keysersoze Ekspert
07. august 2006 - 21:03 #1
hvilken sikkerhed forsøger du at opnå med at bruger server.htmlencode når du lægger ind i databasen?

Som udgangspunkt vil jeg mene det er rigeligt at erstatte ' med '' når du lægger ind i databasen - og så første ved udtræk bruge server.htmlencode. På denne måde undgår du også de problemer du står i nu.
Avatar billede tofferman Nybegynder
07. august 2006 - 21:04 #2
Det er nødvendigt hvis der anvendes html-kode i den tekst som gemmes.
Avatar billede keysersoze Ekspert
07. august 2006 - 21:09 #3
Ikke helt forstået? Det er vel stadig først nødvendigt idet du trækker dataene ud igen - hvis du forsøger at undgå "ondsindet" html-kode så vil du opnå den helt samme sikkerhed ved at bruge server.htmlencode ved udtræk fra databasen som idet du sætter det ind.
Avatar billede tofferman Nybegynder
07. august 2006 - 21:12 #4
Det har du nok ret i, men der er to problemer ved det:

1. Input kommer primært fra brugere (forum, linkregistrering osv.)
2. Jeg er ikke helt sikker på konsekvenserne med alle de data der er i databasen nu, hvis jeg laver det om.
Avatar billede keysersoze Ekspert
07. august 2006 - 21:29 #5
en hovedregel med databasearbejdet er aldrig at ændre brugernes input ved indsættelse i database - så er det altid lettere at manipulere med når man trækker det ud. Og dette altså uanset hvor data kommer fra.

Det kan jeg godt se måske er lidt sent nu - så mine to umiddelbare forslag er enten at konvertere dataene i den nuværende database til "rigtige" data (det vil jeg mene er det mest korrekte) eller også på en eller anden måde at replace tegnene direkte i din sql (dette vil gøre det en del tungere fremover og endelig kan det være at der er rigtig rigtig mange tegn der skal erstattes).
Avatar billede tofferman Nybegynder
07. august 2006 - 21:50 #6
Jeg er ikke overbevist, sorry.

Tilbage til mit oprindelige spørgsmål; er der andre der har løsninger/ideer som kan få mig videre?
Avatar billede keysersoze Ekspert
07. august 2006 - 22:19 #7
hvis ikke du tror mig vil jeg da lade være med at bruge energi på at overbevise dig :)

... så må du bare lære det på den hårde måde ;o)
Avatar billede nielle Nybegynder
07. august 2006 - 22:19 #8
Holder nu med keysersoze på denne her, men:

Hvorfor laver du ikke bare en Replace() på dit data før at du afkorter?

tekst = "Lejlighed søges"
tekst = Replace(tekst, "ø", "ø")
Avatar billede tofferman Nybegynder
08. august 2006 - 14:11 #9
nielle > Jo, det er vel løsningen, men hvis jeg kunne undgå en lang replace-sætning ville jeg gerne det.

keysersoze > Håber ikke at du tog det ilde op, jeg synes bare der er mange spørgsmål herinde som bare ender i en lang diskussion om noget andet end det der bliver spurgt om.
Avatar billede keysersoze Ekspert
08. august 2006 - 14:27 #10
helt korrekt, men mange af diskutionerne bunder i religionsforskelle m.m. hvor man altid vil kunne diskutere og ikke alle er lige gode til at stoppe en diskution... specielt måske når man er på eksperten. Her - og det håber jeg ikke du tager det ilde op ;) - skyldes dine problemer decideret forkert håndtering af brugerinput og uheldigvis betyder dette nogle uhensigtsmæssigheder der ikke "bare lige" kan rettes.

Der er ingen modsætning til htmlencode så som skrevet tidligere - og som også nielle skriver - er en masse replace() så vidt jeg kan se eneste mulighed. Og eftersom dette umiddelbart er den eneste ser en konvertering af databaseindholdet klart mest hensigtsmæssigt ud rent performancemæssigt.
Avatar billede tofferman Nybegynder
08. august 2006 - 16:42 #11
Gode råd er jo altid velkomne :)

Hvordan beskytter man sig så mod f.eks. SQL-injection?

Jeg har tidligere haft et problem med at tilgå min database via phpMyAdmin, fordi der var lagt noget html ned i en tabel (uden htmlencode), så nogle af skærmbillederne i phpMyAdmin gik i kage. Jeg kunne derfor heller ikke slette den record der var årsag til det.

Det var derfor jeg i sin tid begyndte at htmlencode det inden jeg gemte det i databasen.

Hvad gør andre?
Avatar billede nielle Nybegynder
08. august 2006 - 17:19 #12
HtmlEncode beskytter ikke specielt imod SQL-injection, men er snare rettet imod at beskytte imod HTML-kode (hvilket f.eks. beskytter imod XSS angreb).

For at beskytte imod den mest almindelige form for SQL-injection, er det nok at lave en Replace(dinTekst, "'", "''") på inddata før at se sendes i databasen.

Problematikken omkring injectet HTML-kode klares normalt ved at kalde htmlencode når data trækkes ud fra databasen, i stedet for når data sættes ind i databasen.
Avatar billede tofferman Nybegynder
08. august 2006 - 17:43 #13
Men så risikerer jeg bare at min PhpMyAdmin går i ged igen. Den er overfølsom overfor div´er og diverse.

PhpMyAdmin er min eneste mulighed for at komme direkte til databasen, da den ligger på et webhotel.
Avatar billede nielle Nybegynder
08. august 2006 - 18:18 #14
En anden mulighed er at udskadeliggøre < og > før at data lægges i databasen:

tekst = Replace(tekst, "<", "&lt;")
tekst = Replace(tekst, ">", "&gt;")
Avatar billede tofferman Nybegynder
09. august 2006 - 14:10 #15
Det bliver nok løsningen fremover.

keysersoze og nielle >> Læg lige et par svar, så deler I pointene.
Avatar billede keysersoze Ekspert
09. august 2006 - 17:54 #16
svar - selvom jeg godt ved du ikke er heeelt glad for løsningen ;)
Avatar billede nielle Nybegynder
09. august 2006 - 18:31 #17
keysersoze> du skal nok også lige lægge et rigtigt svar. ;^)


.. og et Svar :^)
Avatar billede keysersoze Ekspert
09. august 2006 - 18:36 #18
æææv - typisk mig %o)
Avatar billede tofferman Nybegynder
10. august 2006 - 08:52 #19
Når der nu ikke er en htmlDecode-funktion må jeg jo være tilfreds med det jeg har fået, bide i det sure æble og rette min database til.

Tak for indsatsen :)
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