Küsimus:
Kas peaksin rakenduse esiosas varjama andmebaasi esmaseid võtmeid (ID-sid)?
Pruthvi Raj Nadimpalli
2014-04-22 18:31:10 UTC
view on stackexchange narkive permalink

Töötan rakenduse kallal, mis võimaldab moderaatoril muuta kasutaja teavet. Seega on mul praegu URL-id nagu

  http://www.example.com/ user / 1 / edithttp: //www.example.com/user/2/edit  

Ma olen siin natuke mures, kuna paljastan otse kasutajate tabeli esmase võtme ( ID) andmebaasist. Ma lihtsalt võtan ID-d URL-idelt (nt: 1 ja 2 ülaltoodud URL-idelt), pärin andmebaasist ID-ga ja saan kasutajainfot (loomulikult puhastan sisend-ID URL-ist).

Pange tähele, et kontrollin kõiki taotlusi, et kontrollida, kas moderaatoril on juurdepääs selle kasutaja muutmiseks .

Kas see, mida ma teen, on ohutu? Kui ei, siis kuidas ma peaksin seda tegema?

Võin mõelda ühe alternatiivi, st mul on kasutajate jaoks eraldi veerg 25-märgise võtmega ja nende võtmetega kasutage URL-ide ja päringute andmebaasi võtmeid. p>

Kuid

  • mis vahet sellel on? (Kuna võti on nüüd avatud)
  • Esmase võtme päring annab tulemuse kiiremini kui muud veerud
Heitke pilk [OWASP Top 10 2013-A4-ebaturvalised otseste objektide viited] (https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References)
Kuus vastused:
Thomas Pornin
2014-04-22 18:46:34 UTC
view on stackexchange narkive permalink

Ainus teave, mida võiksite loota "peita", on järjestus : kuna andmebaas eraldab esmase võtme väärtused loenduriga, saavad inimesed, kes näevad nende võtmeid, arvata millal vastav kasutajakonto loodi. Peale selle pole muud teavet, mida mõni varjamisskeem tegelikult varjata võiks. Ründaja teab juba, et erinevatele kasutajatele viidatakse eraldiseisvate võtmete kaudu ja see on andmebaasi "esmane võti" semantika ulatus.

Seetõttu, kui te ei leia, et konto loomise tellimus on privaatne teave, mis vajab varjamiseks ütleksin, et teie varjamisskeem on mõttetu.

Ikka võib olla soovitav takistada lõppkasutajatel loendada * kõiki * kirjeid, millele neil on juurdepääs. Võimalik, et soovite toetada ükskõik millise kasutaja profiili vaatamist, kuid hoiduge paljude kasutajate profiilide andmete automaatsest automaatsest kraapimisest. Kui kasutate täisarvusid vahemikus 0 kuni n, on iga kasutaja profiili allalaadimine tühine.
Kui soovite oma URL-is kasutada kasutajatunnuseid, kuid soovite järjestust varjata, võite kasutada juhiseid. parandaks ka skaleerimisvõimalusi, sest põhimõtteliselt on võimatu võimalikest variantidest otsa saada (võrreldes näiteks int või isegi pikaga).
Samuti paljastaksite ID-de * arvu * (keegi jätkab lugemist, kuni leiab madalaima olematu ID) ja * praeguse loomise määra * (keegi loob selle, seejärel määrab määratud aeg hiljem uue maksimumi). See võib huvi pakkuda kasutajakontode puhul, nt. see annab vihjeid teie rakenduse rahalise elujõulisuse kohta konkurendile.
Jay Claiton
2014-04-23 01:05:54 UTC
view on stackexchange narkive permalink

Üks lihtne viis oleks kasutada meetodit, mida kasutavad YouTube ja muud veebisaidid. See on räsiivid ( http://hashids.org).

Selle meetodiga saate anna linke, näiteks: http://www.example.org/user/fce7db/edit, samal ajal kui fce7db võrdub arvuga, nt: 12

Selle eeliseks on toimivus vastupidiselt teise juhusliku räsi genereerimisele andmebaasis, sest peate selle tõlkima vaid ühe korra ja seejärel saate andmebaasist otsida algse esmase võtme järgi, nagu varemgi.

Selle raskendamiseks Kasutajad saavad juhuslikult leida teisi ID-sid. Võite kasutada salajast soola ühe ja minimaalse pikkusega, et vältida nende jõhkrat sundimist.

Ühe salajase soola omamisega saavad inimesed siiski URL-e vahetada näiteks http://www.example.com/image/c8yDa.

Saate luua kasutaja kohta soola, et seda oleks raskem lahti mõtestada.
Ärge kunagi, kunagi kasutage sama soola kahe erineva plaadi jaoks; et teeb seda valesti. Turvalisuses, kui keegi kavatseb seda valesti teha, on parem seda üldse mitte teha, sest tekib vale turvatunne.
See võib olla uskumatult asjatundmatu küsimus ja palun selle pärast vabandust, kuid kuna seda käivitatakse JavaScripti abil (ja seega on see ka kliendipoolne), siis kas ründaja ei saaks lihtsalt vaadata allikat ja kontrollida, kas räsimisfunktsioon on üle kantud? Või vähemalt näete soola, kui toimub ainult dekrüpteerimine?
Looge räsiühenduse serveri pool ja saadate need kliendile. Mis puudutab klienti, siis ta teab ainult räsi, kusjuures soola saab serveris ohutult hallata. Saidil on rakendusi paljude keelte / käituse jaoks.
@afrazier Ah, seega on JavaScript vaid näide.
@BryanH oli üks salajane sool kõigi nt. pilte. Pean silmas, et üks inimene saab selle URL-i teisele isikule anda ega pea silmitsi seisma probleemiga, et see link on tema jaoks surnud. * Pole kindel, kas teie avaldus seda ei välista.
@JeffGohlke pakuvad ka teeki teistele keeltele, näiteks PHP!
Täielikkuse huvides: hashids EI OLE turvaline!Mitte siis, kui soola jagatakse, aga ka mitte siis, kui igal kasutajal on eraldi sool.Jõhkraks sundimine on endiselt lihtne ja seda saaks teha täiesti automatiseeritud viisil.Jällegi ei nõua hashid ja krüptograafiline turvalisus !!See on ilmne, kuid ma ei taha, et uued kasutajad seda vastust loeksid ja arvaksid, et nad suudavad räsi abil teavet varjata.Saate selle varjata silmatorkava koha eest, jah.Kuid kui keegi soovib teie veebisaidi kasvu ID-d analüüsides analüüsida, saab ta selle siiski lihtsalt aru.
SPRBRN
2014-04-22 19:55:34 UTC
view on stackexchange narkive permalink

Ei Ühel või teisel viisil peate konkreetse kirje identifitseerima URL-is unikaalse identifikaatoriga. See võib olla esmane võti või midagi muud. Kui peate järjestuse või järjestuse peitma, võite kasutada teist veergu juhusliku ja ainulaadse stringiga, näiteks Z2wDKo0ubb1D2VngFh4N.

Kui soovite suuremat turvalisust, kasutage SSL-i. See ei takista kasutajal URL-i ja parameetreid nägemast, nagu märkis @eggyal.

SSL-i kasutades on URL-i parameetrid krüptitud ja takistavad pealtkuulamist. Ja jah, me teame praeguseks, et SSL on vigane, mitte tegelikult nii turvaline, kuid see annab rohkem turvalisust kui selle kasutamata jätmine. Kuid ärge kasutage URL-i paroolide jaoks! Nagu alati, kasutage sisselogimiseks ja andmete esitamiseks POST-i, teabe hankimiseks GET-i.

Vaadake lehte https://stackoverflow.com/questions/499591/are-https-urls-encrypted

Põhjused, miks URL-is salajast teavet ei kasutata : DNS-i päringud pole tõenäoliselt krüptitud (kuid nagu kommentaarides märgib @tgies, pole päringute osa lisatud, seega siin pole ID-d), brauseri ajalugu ja serverilogid.

SSL varjab taotletud URI-d ainult pealtkuulajate eest, mitte kasutaja (kellest olin aru saanud, et see on rünnakute allikas) eest.
URI päringu osa ei ilmu üheski DNS-päringus.
"jah, me teame praeguseks, et SSL on vigane" - kas saate seda väidet mõne tõendi või muuga toetada?Nagu keegi, kes EI ole turvaelus, leian, et see on väga .... murettekitav.Aitäh.
LarryN
2014-04-23 10:13:54 UTC
view on stackexchange narkive permalink

Olen loonud mõned süsteemid, mis URL-is esmast võtit (või muud identifikaatorit) kasutavad või ei kasuta. See, mida me kasutame, sõltub täielikult kahjutegurist - näiteks sait, mis on andmepõhine, on loetav, kasutame URL-is esmast võtit; meid ei huvita, kas keegi käib tooteid järjest läbi.

Turvanõuetega süsteemide korral oleme järjestikuse ennustatava ID asemel kasutanud ühte kahest skeemist:

  1. põhiteavet säilitame brauseri seansis. Lihtne, arusaadav ja kui meie server pole turvaline, on meil suuremaid probleeme.
  2. Oleme genereerinud juhusliku arvu (ja kontrollinud ainulaadsust) kas siis, kui kirje luuakse VÕI ainult seansi jaoks; ja kasutas seda juhuslikku numbrit URL-is.

Edu,

Larry

SQB
2014-04-23 18:01:03 UTC
view on stackexchange narkive permalink

Jah, peaksite neid ID-sid hägustama, kuna lekitate teavet.

Kui teie rakendus on täiesti turvaline, võib kasutajate ainus teave (ab) teada saada kasutajate arvu hinnangu kaudu millegi nimega Doomsday Argument kasutamine. Kui nad saavad teada mitme kasutaja ID-d, saavad nad teada, kes esimesena sisse logis, ja arvavad, kui kaugel see juhtus. Ja nad saavad õpetlikult arvata ka teiste kasutajate ID-sid.

If teie rakendus on täiesti turvaline.

Kui see pole nii, ja peaksite alati eeldama, et see ei pruugi olla, olete andnud kasulikku teavet. Kui kasutajatunnus oli lihtsalt juhuslik number, ei suutnud ründaja hõlpsasti teist kehtivat isikut välja selgitada. Kuna (enamasti järjestikused) numbrid antakse tavaliselt välja automaatse primaarvõtme abil, on see tühine.

Kui soovite säilitada lihtsat kasutamisvõimalust, võite kas muuta primaarvõtit või lisada teisese võtme. väikesed numbrid sisekasutuseks. See uus võti peaks tavaliselt olema GUID.

‡: Muidugi see on xkcd link.

Adam Davis
2014-04-23 01:04:59 UTC
view on stackexchange narkive permalink

Te ei anna rakenduse kohta piisavalt teavet, et teada saada, kas peaksite selle varjama või mitte. Sellisena ei saa teie küsimusele seda osa vastata. Kui peate siiski küsima, on vastus ilmselt jaatav ja isegi kui see ei ületa, pakub see rohkem kohustusi kui alternatiiv.

Kaaluge esmase võtme peitmise või varjamise asemel selle muutmist. Pole vaja, et see oleks järjestikune. Uue kasutaja loomisel tehke juhuslik 32-bitine number, tehke kiire valik, veendumaks, et seda ei kasutata, ja kasutage seda oma peamise võtmena.

Kui keegi muudab kasutajat, võitis ta ei saa kasutajanumbrilt teavet hankida ja numbrite proovimine kohe selle numbri kõrval, millele neil on juurdepääs, annab tõenäoliselt olematu kirje.

Selle süsteemi üldkulud / koormus on minimaalne. See nõuab konto loomisel veel ühte valikut, mis on tõenäoliselt haruldane ja ei kehtesta täiendavaid üldisi järelsõnu - URL-is esitate endiselt peamise võtme, nii et DB-i otsingud on endiselt kiired, kuid võtmel pole teavet.



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...