Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Her kan du få hjælp og stille spørgsmål til PHP!
Besvar
Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46
Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af Josefine » 15. apr 2019, 15:32

Hej, lang tid siden.

Lidt indledning: Jeg har ikke programmeret specielt seriøst i PHP/MySQL i et godt stykke tid og kom heller aldrig specielt langt med det, så jeg er mere eller mindre på noob-niveau lige nu ;D Så jeg er gået i gang med at lave en hjemmeside for at brushe op og lære mere om PHP/MySQL(i), men også med det formål at lave noget semi-seriøst denne gang.

Jeg har indtil videre lavet et login-system, billed-upload til profilbilleder og planlægger at lave det sådan, at hver bruger kan oprette deres egne 'checklister', som de kan krydse af mm. (mere eller mindre en digital version af simple to-do lister).
Men, men, så er der jo spørgsmålet om sikkerhed, og her ved jeg, at jeg ved for lidt, så det skal jeg have lært noget mere om, så jeg kan få nogle gode vaner ind fra starten af og ikke pludselig skal omprogrammere hele siden.
Jeg har indtil videre benyttet mig af:
- prepared statements
- hashing af passwords (har brugt $hashedPwd = password_hash($password, PASSWORD_DEFAULT);)
og skal have implementeret mere sikkerhed ifb. valg af kodeord osv. under oprettelse.

Det er jo et kæmpemæssigt emne/område, så jeg kunne godt have brug for lidt hjælp til at få listet op, hvad der er vigtigt for mig at have med og fokusere på/lære om. F.eks.:
- der må være et max antal gange, man prøver at logge ind med et bestemt kodeord
- hvad jeg ellers skal beskytte systemet imod etc.

Måske et lidt ambitiøst projekt at starte ud med, men jeg tager det lidt hen ad vejen. Det skal nok heller ikke være ultra 110% sikkert, men mere ovre i 'sikkert nok', altså så det er noget, jeg kan lære uden at skulle tage en PhD i det... hvis det bliver mere seriøst end det, må der jo en erfaren ind over det ;)

Mvh.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af jepperask » 16. apr 2019, 17:56

Et måske lidt antiklimatisk svar (til et bredt spørgsmål) er, at du til et seriøst projekt bør overveje et eksisterende framework. Det kunne f.eks være (til PHP) https://symfony.com/ eller https://laravel.com/. Der er nemlig i de her frameworks indbygget en hel del sikkerhed, som (altid) er bedre end noget man selv ville kunne skrive. Fordelen er også, at selvom der er en læringsprocess, så vil du efter et stykke tid være i stand til at bygge større systemer meget mere effektivt, end med vanilla PHP. Yderligere, hvis du en dag overvejer et job i branchen, så kan du overføre din viden og best practices fra de her frameworks, til andre frameworks, da mange principper er de samme. Routing, ORM, view engines mv. er alt sammen implementeret så du kan drage nytte af det.

Lidt mere konkret til det du har allerede, så har du taget de vigtigste skridt - du kan yderligere overveje de steder hvor du har forms og andre inputs fra brugeren. Her kan du indsætte en token genereret af serveren og lægge som et hidden felt i din form. Når brugerne udfylder din form, vil den token så sendes med, og du kan derfor bekræfte/validere at brugeren først lavede et GET-request efterfulgt af et POST. Det beskytter lidt mod over-posting angreb, da brugerne er tvunget til at lave begge requests, fremfor bare at sende 1 mio posts til din server. Det er en feature jeg ved .NET ihvertfald understøtter (og indsætter for dig hvis du benytter Visual Studio scaffolding). Håber det giver mening.

Du kan også overveje generel authorization: kan brugere tilgå information som de ikke burde kunne få adgang til, osv. - det kommer lidt an på hvad din hjemmeside gør.

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af Josefine » 16. apr 2019, 20:57

Arh, jeg kendte slet ikke til eksisterende frameworks - tak for tippet, det vil jeg lige læse lidt op på.
Jeg har benyttet mig af tokens ifb. reset af password men vil lige læse lidt mere op på det også.
Mht. det sidste har jeg lavet det, så brugerne kun kan se visse sider, når de er logget ind vha. session-id tjek. Er der andre måder, jeg bør sikre mig, at folk, der ikke er logget ind, ikke kan få adgang til siderne også? Tak for forslagene.

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af cristian » 18. apr 2019, 08:46

Jeg har lidt den direkte modsatte holdning til Jeppe, jeg bryder mig ikke om frameworks i starten hvis jeg overhoved benytter dem.

1. De tager en hel del af forståelsen.
2. De kan være svære at rette til, til en bestemt opgave eller udseende.

Frameworks er noget jeg personligt syntes man kan bruge når man har en ide om hvad det er der sker nedenunder, skal man vide alt i mindste detalje? Nej, men man skal have en overordnet forståelse for hvad frameworket gør og hvordan det virker ellers er det en "sort boks" der spytter resultater ud og du ved ikke hvordan de resultater er opnået / udregnet.

Personligt syntes jeg også at tests igennem frameworks er mere tidskrævende da de af natur kræver mere at sætte op.
Så at sætte dem op på forskellige måder for at se hvad begrænsningerne er, er ikke lige til.

Sikkerhed er mange forskellige ting og hvis du søger på forummet har jeg også nogle svar her og der på emnet afhængig af hvad spørgsmålet var.
1. Cookie loven.
2. Database og nøgler.
3. Cross site scripting.
4. Certifikater.
5. Apple's 4 cifret logon løsning.
6. Kodeords kompleksitet.
7. Server sikkerhed (jeg hoster f.eks. Mine egne servere).

Jeg vil forslå at finde en tilsvarende bog for PHP (ISBN 978-0-07-183588-6), der er massere af ressourcer på YouTube, f.eks.
https://www.youtube.com/watch?v=_jKylhJtPmI, https://www.youtube.com/watch?v=L5l9lSnNMxg og deres kanal https://www.youtube.com/user/Computerphile

StackOverflow og Google.

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af Josefine » 19. apr 2019, 15:56

Tak for input! Jeg vil tage et kig på dine links. Da mit mål netop også er at blive bedre til PHP, vil I så mene, at det er bedre at starte uden frameworks måske? Vil jeg lære mest af dét? Jeg har også altid været tilhænger af at lave alt selv fra bunden, men hvis det er urealistisk at stile efter, så er jeg self. åben for idéen om at bruge frameworks i stedet. Hvor meget tror I jeg skal lægge i det, før jeg kan nå ca. samme sikkerhedsniveau, som et framework ville kunne give mig?

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af jepperask » 26. apr 2019, 20:30

Jeg synes klart du skal benytte et framework. Du bliver guidet til at benytte best practices, som der desuden er kæmpe industrier og communities bag. Det vil også have værdi hvis du en dag vil søge job.

Der er et indlæg her fra Symfony, om hvorfor du bør benytte et framework med et eksempel om MVC.
https://symfony.com/doc/current/introdu ... fony2.html

Et frameworks er også bare en værktøjskasse, typisk designet til at kunne bygges videre på, så du kan f.eks bygge dit eget middleware til håndtering af bruger-rettigheder mv. og drage fordel af alle de andre ting som frameworket tilbyder. Jeg kan ikke rigtigt genkende de problemer Cristian nævner.

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af cristian » 10. maj 2019, 23:11

Der er nok lige så mange måder at gøre tingene på som der er frameworks :D

Foundation og Twitter bootstrap har mange gode elementer, men det kan være tidskrævende hvis du skal ændre deres standard udseende til noget andet hvis det lige skal være "helt" rigtigt.

Jeg arbejder selv tit og ofte med mange forskellige teknologier fra HTML, CSS, JS, Linux, Netværk, Hacking, Sikkerhed, Fysisk hardware med mere, i mange typer virksomheder og frameworks er ikke altid aktuelt eller hensigtsmæssigt. Det kan være tid, da frameworks ofte tager lang tid at sætte op og du vinder måske ikke nok tilbage til at retfærdiggøre det. Nogle firmaer bruger kun frameworks der er code auditet af andre og hvis der så ikke er et der har været igennem et audit til DIN opgave så er du på bar bund, og så kan jeg godt lide at vide hvad der sker under hjelmen.

Når jeg kan så bruger jeg også frameworks / værktøjskasser f.eks. Jeg bruger i øjeblikket Tomcat's datasource håndtering af JDBC drivere.

Frameworks kan være gode men hvis man blindt bruger dem så ja, så syntes jeg de mister værdi hurtigt.
Mit råd vil nok være, prøv at bruge et framework og prøv at lave det selv som frameworket ellers hjælper dig med og se hvor lidt / meget det tager selv at lave disse ting, få noget erfaring og så laver man disse vurderinger som man har behov for det.

Josefine
Geni
Geni
Indlæg:308
Tilmeldt:9. dec 2011, 16:46

Re: Hvad er vigtigt at vide om sikkerhed ifb. PHP/MySQLi?

Indlæg af Josefine » 13. maj 2019, 21:05

Ok, mange tak for jeres råd :D

Besvar