Ofta ser man exempel och råd på att man av säkerhetsskäl ska byta ut vissa tecken (oftast ' och | osv.) när man ska ta emot text från ett formulär (vid registrering, inloggning mm.), men jag har faktiskt aldrig någonsin sett VARFÖR man bör göra detta? Man ska byta ut apostrofer när det som användaren matar in ska skickas till en databas. (Observera att cookies, request.querystring och form också är sånt som användaren kan mata in.) Det har dragits förut, dt vet jag, men i princip så är det såhär: Svaret är ganska simpelt: Säkerhet! Tackar för svaren :) Kom just på ännu en fråga :) Replace(strApostrof, "'", "''") > Thomas Tydal du nämnde också cookies, request.querystringVarför bör man byta ut vissa tecken?
Så nu undrar jag; varför bör man byta ut dessa tecken? Vad kan en kunnig person göra med hjälp av dessa ifall man inte byter ut dom? Och vilka tecken är det speciellt man bör byta ut?
Hoppas någon kan förklara detta för mig (och för andra intresserade)
TotteSv: Varför bör man byta ut vissa tecken?
Gör man inte det så kan besökaren skicka kommandon till databasen. För du placerar ju användarens inmatning inom apostrofer, och kan användaren skriva egna apostrofer kan han ju "bryta sig" ur det. Om användaren t.ex. matat in kalle ser det ju ut så här:
SELECT * FROM users WHERE username = 'kalle'
Om nu användarens eventuella apostrofer inte byts ut kan han ju exempelvis skriva in: myrslok'; DROP TABLE users; som då blir till:
SELECT * FROM users WHERE username = 'myrslok'; DROP TABLE users; 'Sv: Varför bör man byta ut vissa tecken?
Följande fält finns:
användarnamn
lösenord
admin (kan vara null)
"INSERT INTO BLA VALUES('" & request.form("username") & "', '" & request.form("password") & "')"
Om:
Användarnamn = abc
Lösenord = 123
så blir sql-strängen följande:
INSERT INTO BLA VALUES('abc', '123')
Om:
användarnamn = abc
lösenord = 123', 'true
så blir sql-strängen följande:
INSERT INTO BLA VALUES('abc', '123', 'true')
Vilket inte blir bra...
Likaså kan du i MS-SQL server ha flera sql-satser efeter varandra vilket medför att du kan avsluta strängen och sedan kör en delete... INTE bra!Sv: Varför bör man byta ut vissa tecken?
Genom att du tillåter inmatning av tecken som du normalt använder i koden kan en elakt typ utnyttja det och i bästa fall bara krascha sidan. I sämsta fall har du en bakdörr in i systemet.
Vill du skriva bra kod så se till att kollen finns eftersom dina besökare inte blir imponerade av en siten som kraschar hela tiden.
Att plocka bort det är synnerligen simpelt. Här har du användning för VBScript-funktionen Replace.
Om du inte vet hur det funkar så:
<code>
Dim s
s = Replace("ASP.NET är bättre", "ä", "a")
</code>
Resulterar i "ASP.NET ar battre".
Om du nu överför det på andra vanliga tecken i koden kan den som fyller i inte lägga in egen kod: </textarea>VirusSv: Varför bör man byta ut vissa tecken?
Om jag då byter ut all ' mot '' istället, löser det det då, eller behöver man byta ut det mot något annat?
Om det gäller exempelvis en nyhet som läggs in så vill man ju då att det ska se ut som när det skrevs in när det presenterades på sidan. Kan man då använda replace funktionen igen och byta ut all '' mot ' igen?
Är där andra tecken förutom ' som man ska passa sig för? Hur är det med | som man också ser att det byts ut ibland?
"såg att du hade postat när jag skrev niklas, och besvarde min första fråga :) Hur är det med resten då"?
TotteSv: Varför bör man byta ut vissa tecken?
Gäller det här med att byta ut tecken ENBART när något ska matas IN i databasen, eller också när man ska läsa av från databasen (typ vid en kontroll av användarnamn och lösenord vid inloggning)?
Thomas Tydal du nämnde också cookies, request.querystring och form. Hur menar du egentligen? Behövs det INTE bytas ut vid exempelvis en cookie ska skapas efter en korrekt inloggning?
Ledsen för mina frågor, men jag måste lära mig någon gång ju :)
TotteSv: Varför bör man byta ut vissa tecken?
' kommer skrivas ut som du skrev in det men jag vet inte varförSv: Varför bör man byta ut vissa tecken?
> och form. Hur menar du egentligen?
Att om du tar något ur en cookie, från adressraden (get-variabel/request.querystring) eller ur ett formulär (post-variabel) så måste det också ersättas om det ska in i en databas. Alltså, även om det inte är något som användaren har uppmanats att mata in.