Just nu i M3-nätverket
Gå till innehåll

Fundering


GronK

Rekommendera Poster

Jag har sett mycket om att man inte ska spera vissa tecken i databasen.. typ "'"#%<> .mm men jag förstår inte riktigt varför.. jag är säkert dum. men jag har ett litet forum och när man gör en input så får man skriva allt föruton (<table>, </table>, <td>, </td>, <tr>, </tr>) för det skulle förstöra min layout...

 

men varför ska man annars vara rädd för att spara konstiga tecken i databasen????

Länk till kommentar
Dela på andra webbplatser

Lars Berg

Det är inget problem att lagra dessa tecken i databasen.

 

Problemet är att t.ex. ' har en viss betydelse i SQL. Så för att inte få fel när man utför ett sql-statement så måste man ersätta alla förekomster av ' med ''

 

query = "insert into ogrish(aleb,bleb) values(" & request.form("aleb") & ",'" &_

replace(request.form("bleb"),"'","''") & "')"

 

Sen så har Access (enbart) en speciell tolkning av tecknet | som gör att man bör ta bort dom från sql-satserna.

 

Länk till kommentar
Dela på andra webbplatser

 

Med apostrof (') (beror på implementation, btw) så kan man avbryta en SQL-sats, och mata in egen data.

 

Exempel:

 

Du gör:

"UPDATE users SET newPassword='"& request.form("newPassword") &"' where uid="&uid&";"

 

du sätter alltså ett nytt lösenord för användaren.

 

om användaren matar in BLAH, blir det:

"UPDATE users SET newPassword='BLAH' where uid=123;"

 

om användaren matar in en apostrof, till exempel BL'AH så kommer SQL-satsen bli:

"UPDATE users SET newPassword='BL'AH' where uid=123;"

 

Där tror den att newPassword skall sättas till BL, och sedan kommer den förmodligen att säga att det blev ett fel för att den inte vet vad du menar med AH'.

 

Om användaren väljer att sätta sitt lösenord till: BLAH', access=999, newPassword='BLAH

 

så kommer SQL-satsen att se ut så här:

 

"UPDATE users SET newPassword='BLAH', access=999, newPassword='BLAH' where uid=123;"

 

Och, om databasen då har ett fält som heter "access" kommer detta att sättas till 999.

 

För att kunna utnyttja detta så behövs det oftast kunskap om vad tabeller/fält i databasen heter, men man kan åstakomma i princip vad som helst med databasen.

 

Det är därför viktigt att se till att användaren inte får mata in ' i databasen. Det lättaste sättet att förhindra detta, är att (i VBS) använda funktionen "replace" för att byta ut alla apostrofer, mot två apostrofer (' ').

 

Användarna bör heller ej få mata in script eller liknande HTML-kod, då även det kan få oönskade effekter.

 

En användare kan till exempel mata in

 

<script>alert("w00h00");</script>

vilket gör att en meddelanderuta visas varje gång sidan visas.

 

Användaren kan även göra script som byter URL, öppnar fyrahundrafemtiosex popup-fönster eller vad som helst.

 

Det viktigaste att tänka på när man gör program/script/vad som helst som tar input är:

 

- Never trust input.

- Don't check for invalid input, check for valid input.

 

Du bör alltså kolla upp vilka taggar du vill tillåta, och bara tillåta dem.

 

Ciao,

Anders

 

[inlägget ändrat 2002-05-07 20:59:51 av Anders N]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...