Kmom06: PHP och SQLite

Konto-informationen som behövs för att logga in på min sida:

Användarnamn: nicolas

Lösenord: password

1. Hur gick guiden sqlite20 att genomföra?

Den var inte svår att förstå eller genomföra, särskilt eftersom jag har lite erfarenhet med att bruka SQL. SQLite Manager var enkel att sätta sig in i och användbar för att hjälpa en att visualisera kursmomentets databaser.

Tankar kring guiden och/eller kursmomentssidan ang. säkerhetsrisker:

Jag önskar att guiden och/eller kursmomentssidan var tydligare angående hur bra PDOs ”prepared statements” motverkar SQL injections och vad mer man kanske behöver göra för att för att fullt motverka de, eftersom folket bakom PDO menar att ens sajt ändå är känslig för injections dolda i icke-”escape:ad” input, men det fattades för mig någon bra förklaring på vad de menar och vad man ska göra åt sådan input och på vilket sett man bäst gör något åt den, för att se till att ens konsekventa bruk av prepared statements är fullt säkert (mot ex. ”second-order” injections och vad mer för fall som kan ske).

Inlägget på db-o-webb-bloggen som man länkas till tar upp att sanitera input men inlägget verkar inte ha skrivits med PDOs prepared statements och generella databaslösningar i åtanke. Man länkas i inlägget till PHP-manualens security-sida. Där står det att om man använder PDO så bör man bruka prepared statements tillsammans med ”bound variables”, men klargör inte direkt om de menar att man bör brukar PDOs bindParam- och/eller bindValue-funktion för att få till ”bound variables”. Det förklaras dock inte varför sådana bound values behövs för att ta bort någon säkerhetsrisk.

Läser man om bindParam i PHP-manualen står det dock att funktionen binder en PHP-variabel till ett motsvarande namn eller frågetecken i ens statement och att denna funktion evaluerar variablerna då execute-funktionen anropas. Kommentarer till detta avsnitt i manualen påstår att om man skickar in en array av input-värden så håller inte ev. bindningar man gjort. Det är dock inte klart för mig om man verkligen har ”escape:at” input även om man binder varenda variabel, eller om det främst eller enbart handlar om att se till att ev. retur-värden från ens query hamnar i variablerna.

För kursmomentet har man fem ställen man råds läsa på för att få en bra förståelse för säkerhetsrisker med SQL och vad man bör göra åt dessa. Jag uppskattar att man vägleds till mer än en bra resurs men skulle uppskatta än mer om den första resursen man leds till väldigt tydligt säger vad som behövs för att göra ens SQL-bruk, särskilt just med PDO, så säkert som möjligt, enligt lärarens förståelse, och därefter gärna länkar till resurser som menas förklara varför, som optionell men rekommenderad läsning. Förvisso hör cyber-security kanske inte tills kursens fokus, egentligen.

2. Hur gick det när du gjorde Blokket2? Lyckades du komma in i PHP och SQL-programmeringen? Är det svårt?

Eftersom man i och med förra kursmomentet kodade fram en logik för Blokket som man för det mesta kan utgå ifrån för att utveckla Blokket 2, på så vis att det enda man egentligen behövde ändra i logiken för Blokket för att få Blokket 2 var att byta ut PHP-funktioner för filhantering mot PDO-kommandon för SQL-databashantering, så var uppgiften enkel när man väl hade fått koll på de grunder i SQL som gicks igenom i sqlite20-guiden.

SQL i sig har jag haft tidigare erfarenhet med i och med att jag för några år sedan läst en kurs om databashantering, som även den undervisades i av MOS. Jag har inte tagit/fått tillfälle att bruka kunskaper som förvärvades i den kursen sedan dess, förrän nu. Trots detta kände jag snabbt igen mig i query-språket, som jag dessutom tycker har en mestadels intuitiv syntax då man ju i princip formulerar efterfrågningnar nästan som man skulle göra om man en person hämta något i ett fysiskt arkiv (åtminstone vad det gäller queries liksom de man behöver göra för Blokket 2).

Nyligen har jag dessutom brukat LINQ, vilket ju är ett liknande query-språk för .Net, vilket ju kan ha hjälp min förståelse på vägen.

3. Reflektera över svårigheter/problem/lösningar/resultatet, etc.

Bortsett från mina ovannämnda funderingar kring säkerhetsrisker så var de enda egentliga svårigheterna var de rörandes hanterandet av, och interaktionen mellan, forms som användaren skulle ha för att kunna lägga till, ändra, och ta bort annonser från databaser, och dessa löstes redan i föregående kursmoment.

Jag är osäker på hur säkra mina SQL-queries är från SQL-injections, med mitt bruk av PDO-interfacets ”prepared statements” och ”bound variables”. Idealet hade väl varit att jag testat detta, men kursen verkar inte så fokuserad på cyber-security så jag släppte detta tills vidare.

Hursomhelst är resultatet att det nu finns en ny variant av Blokket (”The Blokk”), kallad Blokket 2 (”The Blokk 2”), som brukar databasteknik för att lägga till, ändra, och ta bort annonser istället för filhanteringen i Blokket (”The Blokk”), som fungerar och validerar i de olika validatorna.

4. Vad tycker du om databaser och SQLite?

SQLite-databaser är lätta att arbeta med som nybörjare, då de kommer i form av en enda fil som är server-självständiga och inte behöver konfigureras. Att man kan flytta hela databasen genom att flytta filen som innehåller den gör det ju smidigare att arbeta med den, liksom påpekades i sqlite20-guiden.

Att SQLite har ett PDO-interface är ju bra eftersom (1) PDO:s roll som generellt databasinterface för PHP innebär att man lätt kan byta ut SQLite mot en annan databas-motor som stöder samma interface, (2) PDO:s stöd för ”prepared statements” innebär att man kan återanvända queries, i form av dessa ”prepared statements”, vars exekvering SQLite bara behövt optimera en gång, och (3) PDO:s ”prepared statements”, om man brukar de konsekvent för ens sajt, har viss inbyggt skydd mot SQL-injections.

Jag kommer vilja sätta mig in mer i de inom den snara framtiden dels pga ett par egna webb-projekt jag vill genomföra där hantering av användarkonton är en grundsten som databasteknik lämpligen kommer ligga bakom.