bedste praksis i forbindelse med følsomme oplysninger: sikring af din ansøgning

, bedste praksis, når de arbejder med følsomme oplysninger: sikring af din ansøgning,,,,, 97,,,,,,,, 17,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, i mine tidligere artikel, jeg viste dig, hvordan at beskytte din, server fra angreb og skadelig software.denne del vil helt fokuseret på den tredje lag af sikkerhed - din ansøgning.her, jeg vil vise dig teknikker, som du kan bruge til at beskytte deres ansøgning fra overgreb og chikane., ved hjælp af en database, når de kommunikerer med en database og for deres data skal være sikre, holde følgende centrale punkter i betragtning:,, altid flygte forespørgsler, for at stoppe dem fra ved hjælp af sql injektion, skal du slippe for alle brugernes input, så kan de ikke injicere sql forespørgsler i din ansøgning (f.eks. i et login).i stort set alle databasen chauffører, for alle de sprog, der er en mulighed for at undslippe brugerinput.for eksempel i node mysql for node.js, i stedet for at gøre deres spørgsmål som dette:,, forbindelse. søgning ('select * fra brugere, hvis navn = \\ '+ brugernavn +') og kodeord = \\ '+ kodeord "." "funktion (fejle, rækker, felter) {, - automatisk kan undslippe dem ved hjælp af denne syntaks:,, forbindelse. søgning ('select * fra brugere, hvis navn =?og kodeord =?« [brugernavn, kodeord] funktion (fejle, rækker, felter) {, variabler fra nettet, der leveres som et andet argument om, at de oplysninger, metode, indsættes i stedet for spørgsmål i forespørgslen snor og automatisk vil være flygtet.det samme kan gøres i folkesundhedsprogrammet med bob er forberedt erklæringer:,, $stmt = $dbh - > at forberede ("vælg * fra brugere, hvis navn =?og kodeord =?"); $stmt - > bindparam (1 $brugernavn); $stmt - > bindparam (2 $password); $stmt - > execute();,, stol aldrig på indhold fra databasen, selv hvis du slippe din database, ved man aldrig, hvis et insekt. i din ansøgning, har vi nogle ondsindede koder.hvis du har skrevet din app på en måde, hvor man altid går ud fra, at indholdet i databasen er sikker, så deres brugere er i fare.for eksempel denne kode:,, hvis ($resultat = $mysqli - > søgning ('select * fra brugere, hvis navn = ".$mysqli - > escape_string ($brugernavn. "" ')) (hvis ($ro = $resultat - > fetch_assoc()) (hvis ($resultat = $mysqli - > søgning ('select * fra somedata, hvor nævnte = ".$række ['id).;)) {...}}}, er usikre.hvis noget går galt, og, id, brugeren indeholder nogle sql injektion kode, så vil de få problemer.- række ['id '], bør også være flygtet med, escape_string(), metode, som så:,, hvis ($resultat = $mysqli - > søgning ('select * fra brugere, hvis navn = ".$mysqli - > escape_string ($brugernavn. "" ')) (hvis ($ro = $resultat - > fetch_assoc()) (hvis ($resultat = $mysqli - > søgning ('select * fra somedata, hvor nævnte = ".$mysqli - > escape_string ($række ['id ']).;)) {...}}},,, så brug en salt, når hashing, forestil dig denne situation: et geni hackere igennem din omhyggeligt udarbejdede sikkerheds - og få fat i jeres database.de begynder at tvinge alle deres brugeres passwords.hvis du brugte en salt, når hashing dem, du kan sove i fred og sikre deres brugere, at deres oplysninger er i sikkerhed.medmindre han har en quantum computer i deres kælder, vil det tage år at løse nogen af de kodeord., ved hjælp af en salt betyder, at du sætte et par tilfældige bogstaver passwordet før hashing (disse tegn er det, man kalder salt) og lagrer dem med kodeordet.du tror måske, at det ikke er helt sikker, da angriberen ved salt, hvis de får adgang til databasen.men da salt, er forskellig for hver bruger, selv om to af dem bruger de samme password deres hashes vil være anderledes.dette styrker angriberen åbner dem, en efter en, hvilket gør det meget tidskrævende og normalt ikke værd at den spildte tid.det betyder også, at han ikke kan bruge rainbow tabeller eller en ordbog til lookup passwords.,, saltning kodeord i node.js:, node mysql,, først skal du skabe salt.for eksempel, du kunne bruge, crypto! randombytes():,, var crypto = kræver ('crypto), /* det skal ske efter anmodning med brugerens data til registrering, i stedet for blot at tilføje det til databasen * /crypto. randombytes (16, funktion (e, salt) (denne funktion vil kaste, en fejl, hvis det i henhold til node.js dokumentation, "der er ikke nok til at skabe cryptographically entropi stærk data".i et sådant tilfælde, skal de enten forsøge igen eller anvendelse, crypto! pseudorandombytes(),, der skaber ikke cryptographically stærk tilfældige bytes, men da dette kun vil ske, og vi kan bruge det, hvis (e) (salt = crypto. pseudorandombytes (16)}, lad os tilføje data.for overskuelighedens skyld vil jeg bruge et brugernavn og password og salt i dette eksempel: /* kodeord og brugernavn bør hentes fra anmodning krop /var hash = crypto. createhash ('sha-256). ajourføring (kode + salt. tostring()). "('hex) sql. søgning ('insert i brugerne værdier (?,??)« [brugernavn, kodeord, salt] funktion (fejle, rækker, felter) {* din app logik her, hvad happes efter brugerens data i databasen * /})}), når din bruger vil ind, må du komme salt fra databasen og tjek det kodeord:,, sql. søgning ('select salt fra brugere, hvis navn =?« [navn] funktion (fejle, rækker, områder) (hvis (rows.length < 1) {* brugeren ikke findes * /} andre {var hash = crypto. createhash ('sha-256). ajourføring (kode + rækker [0]. salt). "('hex"); sql. søgning ('select 1 fra brugere, hvis navn =?og kodeord =?« [brugernavn, hash] funktion (fejle, rækker, områder) (hvis (rows.length < 1) {* forkert kodeord * /} andre {/* password - * /}})}}), og det er ret meget.lad os se, hvordan vi kan gøre dette ved hjælp af folkesundhedsprogrammet.,, saltning kodeord i folkesundhedsprogrammet, er i på dette, er meget enklere, fordi den indbyggede funktioner, password_hash(), og password_verify() automatisk bruger en salt og hash tilbage, indeholder den, så du har ikke brug for en anden kolonne i databasen (eller område i tilfælde af nosql).det ville se sådan noget, $stmt = $dbh - > at forberede ("indsætte i brugere værdier (??)"); $stmt - > bindparam (1 $brugernavn) /* hash kodeordet, funktion er tilfældig salt automatisk * $stmt - > bindparam (2, password_hash ($password) $stmt - > execute();,, til at kontrollere login du har bare at ringe, password_verify(),.det automatisk bliver salt fra hash, så behøver du kun at levere hash fra din database og klartekst password for at sammenligne.den nødvendige kode, er som følger:,, $stmt = $dbh - > at forberede ("vælg kodeord fra brugere, hvis navn =?"); $stmt - > bindparam (1 $brugernavn); $stmt - > execute(). $ro = $stmt - > hente (bob): fetch_assoc); hvis ($row) {* se hvis kodeordet tændstikker * /hvis (password_verify ($password - række ['password ']) {* kodeord!* /}} andre {* brugeren ikke findes * /), posix: fald privilegier, når du ikke har brug for dem, og det er en af de bedste forsvarsmekanismer, du kan bruge til at beskytte din maskine og dermed deres brugere.du har brug for øgede privilegier til et par ting, især efter den havn tal lavere end 1024 eller rode med systemet filer.men du vil aldrig løbe en app, som rod, når du ikke har brug for, hvis han finder en mikrofon i din kode, der gør det muligt for dem at udføre ordrer på din tjener, og hvis kode løber som en privilegeret bruger, det er slut.han kan gøre, hvad de vil, og det vil sandsynligvis være færdig, før du opdager noget.det er derfor, du skal droppe de privilegier, så hurtigt som muligt.i node.js ville det se sådan ud:,, var app = http: createserver (...).app. hør (80); //hør på 80 havn, til at gøre det, du skal løbe din app som grundlæggende bruger proces. setuid ('app_user); //fald privilegier - overgang til et ikke - rod - bruger - kun posix platforme, desværre, den proces. setuid(), funktion vil ændre brugeren identitet af processen til en videre til det - det kan enten være en numerisk id eller et brugernavn string (i det andet tilfælde er denne funktion vil blokere, samtidig med at identificere brugeren).brugeren skal være mindre privilegerede og har kun adgang til app specifikke sager, for at begrænse risikoen for, at han har adgang til noget andet på din maskine.,, en alternativ måde: ved hjælp authbind, nogle siger, (f.eks. i denne bemærkning om, at grundlæggende rettigheder), at opløsningen ikke er perfekt. de foretrækker at bruge, authbind i stedet.det er din beslutning, som du vælger at bruge og det ret meget afhænger af din fælde.men alligevel, authbind, er en ordre, som er konstrueret til dette formål - det tillader din app til at binde sig til havne, lavere end 1024 uden grundlæggende rettigheder, så det er kun dækker det scenarie).for at bruge det, skaber en fil:, /etc /authbind /byport /havn, hvor havnen er havnen, du ønsker at binde sig til og gøre det gennemførligt af brugeren, du vil bruge, til at udføre din app.så gå over til din bruger og begynde at app sådan her:,, authbind node yourapp.js, eller som det rod:,, su - c 'authbind node yourapp. er "youruser, med det, man kan opnå samme mål som med posix løsning, lige nu, authbind i stedet. hvis det er det, du foretrækker.,, runde, så vi håber, du har fundet nogle nye teknikker til at arbejde med følsomme oplysninger i disse to artikler.i den foregående artikel, vi begyndte at lære at beskytte vores data på serveren ved at vælge den rigtige server udbyder, ajourføring af vores os, sikring af havne og ved hjælp af en antivirus.i denne artikel, vi lagde vores diskussion, som taler om at sikre vores ansøgning, selv ved brug af passende database, sikkerhed, kodeord, saltning, og brugernes rettigheder, er velkommen til at dele deres egen sikkerhed drikkepenge i bemærkninger og takke dem for at læse.



Previous:
Next Page: