dbwebb-se / webtec

Course repo for web technologies - webtec.
Other
12 stars 7 forks source link

Hur skydda databasen när användaren kan mata in det som sparas (SQL Injection versus XSS)? #19

Open mosbth opened 2 years ago

mosbth commented 2 years ago

Jag undrar om någon kan hjälpa mig tydliggöra en sak som jag inte helt har greppat om htmlentities() och databaser.

Om en användare vill göra något som ändrar databasen, t ex skapa konto eller ändra ett befintligt, behöver man då använda sig av htmlentities() eller är det inte aktuellt då det ska in i databasen och då så håller det med att göra en “prepared sql förfrågan”.

Sen om man ska skriva ut det användaren har lagt in i databasen igen på sin sida (t ex visa profilsida med data), behöver man då använda sig av htmlentities() när det skrivs ut sedan det är inputs från användares som kan visas på sidan? Eller har “in- och uthämtandet” från databasen gjort det överflödigt?

Prepared statement skyddar själva SQL-frågan så att användaren inte kan injecta potentiellt farliga saker som tex modifierar SQL-frågan till att radera hela tabellen.

htmlentitites() skyddar webbsidan så att användaren inte kan injecta farlig kod in till webbsidan

När vi låter användaren fylla i ett formulär, som sparas i databasen, och sedan visas formulärets data i webbsidan så kan vi tänka så här.

  1. Att lagra potentiellt farliga strängar i databasen är inte ett problem. Men när vi skriver ut dem i webbsidan så skall vi alltid göra htmlentites().