Hoe om veilige programme vir die web te ontwikkel
Sekuriteit in webtoepassings is `n kritiese aspek. As die webprogramme wat u ontwikkel, sekuriteitsgate het, kan ander mense hulle beskadig, wat redelik verleentheid sou wees. Hulle kan jou gebruikers se persoonlike inligting steel, wat baie irriterend is en kan selfs ernstige regsprobleme in jou jurisdiksie bring. Dit kan ook gebeur dat hulle u bediener gebruik om gemorspos te stuur of om ontkenning van diens aanvalle uit te voer, of kwaadwillige programme te versprei en vir al die dinge wat die internet `n erger plek vir die res van die mense maak. Deur middel van `n paar eenvoudige stappe en met `n behoorlike gewete, kan jy die risiko van hierdie gebeurtenis aan jou verminder, danksy die sekuriteit wat jy by jou programme kan byvoeg.
conținut
stappe

stelling: = "SELECT * VAN userinfo WAAR id = " + a_variable + "-"
Dit werk goed as die stellingsveranderlike: "a_variable", dit is betroubaar. As `n gebruiker egter die een is wat die veranderlike verskaf, kan `n aanvaller dit invoer:
1-DROP TABLE gebruikers
Wat sal die uitvoering van hierdie navraag veroorsaak:
SELECT * FROM user info WHERE id = 1-DROP TABLE gebruikers-
Dit sou natuurlik vreeslik wees. Die oplossing sou wees godsdienstig ontsmet enige veranderlike wat `n gebruiker bied. PHP bied die funksie aan
mysql_real_escape_string
vir MySQL. Ander databasis biblioteke vir ander programmeringstale het dieselfde ding. Gebruik dit en jy sal baie meer beskerm word. Daar is ook die relasionele objek kartering (soos Django vir Python) wat u red van die skryf van SQL-kode en handel oor ontsnapskettings voordat dit na u databasis oorgedra word. Oorweeg die moontlikheid om `n instrument te gebruik wat dit implementeer.display.php? file = algo.txt
. As jy dit gedoen het, sal jou PHP-kode hierdie stelling insluit:vereis ("/ www / awesomeapp / text-files /" . $ _GET ["lêer"]) -
Dit sal uiters gevaarlik wees, aangesien jy hom sal toelaat om sekwense van te gebruik "../" (om na die ouergids te gaan) en kan enige lêer wat aan die lêerstelsel behoort, insluit, byvoorbeeld, na
display.php? file = .. / .. / .. / .. / .. / etc / passwd
.Op sy beste sal dit hulle toelaat om inligting oor u bediener se opset te versamel, wat nuttige inligting vir `n ander aanval kan verskaf. In die ergste geval, as die funksie
vereis
of sluit
van PHP (of `n ander ekwivalent in die taal wat jy gebruik) sal gebruik word om die inhoud van die lêer in te sluit. Dit kan die uitvoering van kode toelaat (die kopie van die gebruiker-agent heen en dan die lêer insluit / proc / self / omgewings
).Die oplossing hiervoor is om `n ander manier te vind om `n lêer in te sluit wat dit nie doen nie, gegrond op wat die gebruiker betree, of deur die verskafde lêer versigtig te ontsmet. Kontroleer die geldigheid van elke karakter en gooi diegene wat verbode is Gebruik die beginsel dat karakters wat nie toegelaat word nie, verbied word, in plaas daarvan om bloot diegene wat gevaarlik is, uit te skakel. Met ander woorde, probeer nie om slegte karakters in `n tou te vervang nie. Skep `n lys van diegene wat uitdruklik toegelaat word en scan die ketting om te sien of dit net diegene gebruik wat diegene wat nie in die toegelate lys is, uitskakel nie. Dit is aan die een kant eenvoudiger, en aan die ander kant sal dit jou verdedig teen aanvalvektore wat jy nie in ag geneem het nie.
index.php? persoon = Bob
) en dit sal so iets bevat:hallo, php echo $ _GET ["persoon"] -?>
Dit sal toelaat dat `n aanvaller te arbitrêre jаvascript-kode op die bladsy, wat beteken dat as jy iemand `n skakel na die webwerf volg oortuig, kan maak `n aksie wat `n newe-effek het uitlok skryf (bv kommentaar of stuur enige ander vorm). Vervang enige slegte bekende karakter (aanhalings, <, en
>
) met sy ekwivalente entiteit in HTML voordat dit op `n bladsy geskryf word.Baie sjabloon-enjins kan dit outomaties doen en jy kan slegs die HTML-karakters van `n uitvoerveranderlike toelaat wat eksplisiet veilig verklaar is. Dit sal goed wees om die moontlikheid te oorweeg om een te gebruik.
As jy `n beperkte HTML moet toelaat (byvoorbeeld om die teks in die opmerkings te formatteer), ontsmettend daardie HTML om etikette wat as veilig beskou word, toe te laat en het klein newe-effekte (soos ), wegdoen alle ander, en gooi ook enige ander ongewenste HTML-kenmerk af. Weereens moet die beginsel wees aanvaar slegs wat eksplisiet toegelaat word en verwyder alles anders (as hierdie beginsel gevolg is, kan een van die mees berugte WordPress-kwesbaarhede vermy word, waar die CSS-kode van `n kenmerk ontsmet is "styl", maar as die naam van die attribuut in hoofletters geskryf is, was dit ongeskonde).
ping.php? host = 127.0.0.1
) en op hierdie manier kan jy versoek word om die kode te gebruik:stelsel ("ping " . $ _GET ["gasheer"]) -
`Dit is uiters gevaarlik, want deur `n parameter te verskaf "gasheer" Met `n vertikale balk of semikolon, sal u die gebruiker toelaat om enige opdrag op u stelsel uit te voer (byvoorbeeld deur die gasheer te gee "
127.0.0.1 | wget https://wikihow.com/
").Die oplossing hiervoor is om die stelsel funksies te vermy wanneer dit moontlik is. Oproep die eksterne program op `n ander manier. Die opdrag
pcntl_exec
Dit is `n beter idee in PHP. As jy moet gebruik stelsel
, Dit versigtig ontsmet enige data wat deur die gebruiker verskaf word voordat dit na die dop oorgedra word (`n voorbeeld vir die kode van "ping" sal elke karakter nagaan om seker te maak dit is `n nommer, `n brief of `n tydperk, en gooi enige ander karakter wat nie een hiervan is nie).eval
in PHP met baie, maar baie omgee. As die string `n veranderlike bevat wat deur die gebruiker verskaf word, sal dit die gebruiker toelaat om arbitrêre kode uit te voer. Trouens, byna Daar is nooit `n geldige rede om dit te doen nie. As jy dit gebruik, Jou kode is waarskynlik verkeerd en jy moet dit herformuleer.1. Die gebruiker versoek om sekere aksie uit te voer.
2. Maak seker dat die gebruiker toestemming het om hierdie aksie uit te voer en wys `n bladsy wat sê "Toegekende toestemming geweier" in die geval dat jy dit nie het nie.
3. Jy wys `n bladsy wat sê "Is jy seker jy wil dit doen?" uitgedruk in verborge velde van die vorm.
4. Die bladsy word dan gestuur na `n kode wat die operasie uitvoer.
Die truuk is dat as u slegs die toestemming om daardie bedrywighede in stap 2 te verifieer, maar nie in die kode waarna u die bladsy in stap 4 gestuur het nie, dit sal tel sodat die gebruiker nie die vorm kon verander wat u hom gewys het nie stap 3 (waarin vertroue in `n groot mate misplaas is), of gaan selfs direk na stap 4.
Om meer versigtig te wees, sou dit `n goeie idee om die tipe algoritme gebruik, as jy nodig het om te migreer na `n ander hash algoritme in die geval van `n ernstige swakhede ontdek in die huidige algoritme te slaan nie. Dit het gebeur met MD5 en SHA-1, en dit kan ook vandag met die mees betroubare hash-algoritmes gebeur.
https://tu-fabuloso-sitio.ejemplo.com/config.ini
om jou databasis se aanmeldinligting uit te vind (maar jy sal nie `n aanvaller kan stop wat `n lêer insluiting kwesbaarheid gekry het nie, soos die een wat in stap 3 genoem word, of `n dopkode eksekusie gebruik soos dit word in stap 4 genoem).
doel
op bladsye wat u nie wil indekseer nie (byvoorbeeld administratiewe bladsye aan die bediener kant). Byvoorbeeld:wenke
- Alhoewel daar geen plaasvervangers is wat jou toelaat om die veiligheidsbedreigings vir jouself te verstaan nie, die feit dat jy dit gebruik raamwerke (soos Ruby on Rails) en hosting platforms (byvoorbeeld, Heroku) is `n goeie alternatief wat u sal help om veilige ontwikkelingspraktyke te verbeter en te verstaan, aangesien dit kom met geïntegreerde gereedskap en metodologieë om die kwesbaarheid van mees algemene sekuriteit.
waarskuwings
- Moenie die AJAX-versoeke vertrou nie. Onthou dat enigeen wat weet hoe om Wireshark te gebruik (om te ontdek watter parameters om te gebruik in `n HTTP-versoek) en hoe om krul of wget te gebruik, kan hulle baie, baie maklik verval.
- Moet nooit aanvaar dat u aansoek 100% veilig is nie. Daar is nuwe ontgin dat die aanvallers onbehoorlik kan gebruik. Maak seker dat jy op hoogte bly met die nuwe "goeie praktyke" om die sekuriteit van u aansoeke tot die uiterste te beperk.
Hoe om Windows XP te optimaliseer
Hoe om die spoed van Minecraft te verhoog sonder programme
Hoe om `n VPS soos SSH en ProxySquid op te stel
Hoe om `n eenvoudige program in C te skep
Hoe om Java uit te skakel
Hoe om programme op Android af te laai
Hoe om AVG Internet Security 2014 te verwyder
Hoe om OneNote op jou Mac-lessenaar uit te voer deur Fluid te gebruik
Hoe om Antivirus Live handmatig te verwyder
Hoe om opstartprogramme te verwyder
Hoe om Persoonlike Sekuriteitsvirus handmatig te verwyder
Hoe om `n QR-kode te skandeer
Hoe om `n sekuriteitsvlak in te stel deur gebruikers in Microsoft Access
Hoe om te voorkom dat hackers jou netwerke binnedring
Hoe om `n foutiewe foutboodskap in Windows te maak
Hoe om `n program in applescript te maak
Hoe om `n eenvoudige wurmvirus met twee reëls kode te maak
Hoe om APK-lêers op Android te installeer
Hoe om die verkeer van `n webwerf te meet
Hoe om die vertraging te verminder wanneer jy aanlyn speel
Hoe om jou webwerf te beveilig