Stránka: 1 z 1
| [ Príspevkov: 21 ] | |
Autor | Správa |
---|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Dobrý deň vospolok!
Len sa chcem spýtať, či môžu mať všetky polia(rôznych typov) vo formulári name v tvare name="pole['id']"
Viem, že checkboxi sa tak bežne odosielajú, ale čo kombinácia viacerých typov?
Mne to funguje, len chcem vedieť či v tom neni nejaký zakopaný kocúr o ktorom by som nevedel...
EDIT:
Ešte jednu vec sa chcem spýtať. Kľúče toho poľa by sa dali tiež použiť pri SQL injection, že ano??? Ak ich teda dávam do insertu ako kľuče...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
camo píše: Len sa chcem spýtať, či môžu mať všetky polia(rôznych typov) vo formulári name v tvare name="pole['id']" funguje? funguje, sám si sa o tom presvedčil, nerozumiem teda prečo si tu otázku položil. camo píše: Kľúče toho poľa by sa dali tiež použiť pri SQL injection, že ano??? Ak ich teda dávam do insertu ako kľuče...
no logicky áno, tiež nerozumiem otázke, veď je to logické. filtruj iba kľúče, ktoré sa vyskytnúť môžu. potom sa nemáš čoho báť
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Pýtal som sa kôli tomu kocúrovi...
Vďaka za názor.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Ja by som sa potreboval ešte raz vrátiť k tejto téme ak dovolíte...
Totiž potrebujem tie kľúče oescapovať, lebo použiť whitelist ako navrhol aj emer nechcem. Je tam veľa polí (desiatky) a príde mi efektívnejšie escapovať to než to porovnávať oproti tomu whitelistu.
Najprv som si myslel, že bude stačiť addslashes, ale ako som zistil tak mysql pri kľúčoch neberie úvodzovky len " ` ".
Tak som to riešil takto cez addclslashes:
Kód: $key = addcslashes($_POST['key'] , '\`' )
Všade sa píše o nulovom byte ktorý neviem zapísať, tak sa vás pýtam, ako to tam doplniť a či je tento spôsob postačujúci?
Moc vďaka...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
ake tvary maju tie kluce?
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Normálne stringy... nerozumiem čo tým myslíš. Tu už nejde o tie polia v 8_POSTe ale len o správne ošetrenie tých kľúčov... Okolo fcie addcslashes sú totiž popísané veci ktorým moc dobre nerozumiem ako napr. c-like style a pod...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
no ved ake maju tvary tie kluce...
name_0
name_1
alebo hocijake retazce? alebo je 100 variantov a iba tie mozu byt?
alebo ty vopred nevies ake budu ? (co je imho blbost)
ja by som si spravil regularny vyraz, ktoremu by vyhovovali iba dane retazce. a najprv skontrolujes, ci fakt posielaju to co chces..
pripadne, druhy variant, posli si vsetky mozne kluce a zachyt ich. nasledne z toho sprav whitelist (aby si sa nenarobil). nie je to zdlhave a urcite najbezpecnejsie..
lebo je blbost iba osetrovat vstup tym, ze escapnes apostrofy atp... zapises do databazy nieco, co tam vobec nema byt?!
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
To už by bol prijateĺnejší ten whitelist ako regulárny výraz. Asi netreba vysvetľovať prečo. Ja samozrejme viem z DB vytiahnuť názvy stĺcov a urobiť z nich ten whitelist. Len mi to prišlo ako neefektívne oproti addcslashes.
A naozaj si myslíš, že escapovať nestačí? Ako potom ošetruješ vstupy ty?
PS: Ja samozrejme nejdem do DB zapisovať nejaké podozrivé vstupy od nejakého dobrodincu ktorý sa bude snažiť poslať mi nejako modifikovaný formulár. Proste takú požiadavku nechám padnúť, len musím dosiahnuť, aby to bolo bezpečné.
|
|
Registrovaný: 14.04.09 Prihlásený: 20.09.24 Príspevky: 1188 Témy: 198 | 198 |
tak teraz som uz zmateny z toho co riesite. ak potrebujes osetrovat vstupy pred sql injection, addslashes je samozrejme blbost, miesto toho pouzi mysql_real_escape_string a o tom uz neviem ze by sa dalo nejak prelomit.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
PHP.net:
Citácia: mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
To vyzerá, že tvoja superfunkcia nerobí vlastne tiež nič iné ako escapovanie. Len ja potrebujem akurát to čo ona nerobí, preto addcslashes. Ale vďaka aspoň som tam našiel zoznam znakov, ktoré treba escapnúť.
A ak mi niekto vie povedať či sa dá Mysql podstrčiť niečo v tom zmysle ako pri Javascript injection, keď sa používa hexadecimálne vyjadrenie znakov a JS to zožerie... Pokiaľ viem tak nie, ale zase až toľko toho neviem, tak sa pýtam...
EDIT:
Takže teraz to vyzerá takto:
Kód: addcslashes($key,'\x00\n\r\\'"`\x1a')
PS: ale ja tam vlastne nepotrebujem escapovat uvodzovky a tie ostane znaky tiez neviem.... Mozem za to, ze som este nehekol ziadnu stranku a neviem ako sa to presne robi? Je tu niekto, kto mi to vie vysvetlit? Stacil by odkaz na nejaku zivu ukazku...
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Ten whitelist je jednoznacne najbezpecnejsie riesenie.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Ešte sa spýtam inak:
Je tu niekto, kto by mi dokázal poslať do DB injekciu, ak by som vstup ošetril týmto(ide o tie kľúče preto tam nie sú úvodzovky):
Kód: addcslashes($key,'\x00\n\r\`\x1a')
|
|
Registrovaný: 14.04.09 Prihlásený: 20.09.24 Príspevky: 1188 Témy: 198 | 198 |
Neviem, ale ta funkcia funguje zle, skus si napriklad osetrit vstup s pismenom r a vlozit ho do DB.
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
camo, v prvom rade, neviem, ci za tym su tvoje medzery v znalosti principov escapovania alebo len preklep, ale na prvy pohlad vidim, ze tvoj kod neosetri ani spatne lomitko => aplikacia je derava ako sito. Aj bez toho sa mi to zda ako nevhodne riesenie, addslashes sa da v zriedkavych pripadoch oklamat (pogoogli addslashes bypass), a vobec, naozaj chces umoznit uzivatelovi zmenit obsah ktorehokolvek pola alebo aby zadanim nezmyselneho nazvu pola vyvolal chybovu hlasku?
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Ďuri:
Neviem či som nepochopil, ale keď som skúšal ten kódik, tak spätné lomítka escapovalo ako som potreboval. Asi myslíš, že ho treba zdvojiť. Ale to len ak je na konci toho výčtu.
A ide tu o to, že užívateľ má práve vybrať polia ktoré chce mať zaškrtnuté. Ako inak by som to mohol riešiť?
Zadanie chybového poľa je jasná správa o nekalých úmysloch a to neriešim....
PS: Ako vidím tak mám medzery, dvojité lomítko mi to zežerie...
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
tvrdohlavec tvrdohlavy
camo píše: Ako inak by som to mohol riešiť?
uz ti to bolo niekolko krat povedane..
povedz mi, co mas proti whitelistu? vytiahnes si teda kluce z DB do pola, a uz len kontrolujes funkciami. Napr. mozes pouzit in_array(). Je to najbezpecnejsie a mozno aj najefektivnejsie.. Nechapem, co na tom vidis neefektivne..
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Emer:
No neefektívne mi to príde preto, že:
1. je tam požiadavka na DB navyšše
2. porovnávať sa musia dve roziasiahle polia
3. okrem toho musím ošetriť aj hodnoty
Či to je málo? Mne to pride ako dost...
Ja sa pýtam hlavne preto, aby som do toho dostal nejaké svetlo a vy reagujete ako keby som vám chcel odhryznúť z nosa.
Asi lepšie by som urobil keby som sem dal nejaký kód s addslashes a napísal vám, že by som potreboval aby mi niekto napísal ten kód lebo mi to nefachá, tak ako to tu býva zvykom...
PS:
Takúto escape funkciu som našiel v knihe Zranitelný kód:
Kód: function SQLstring($s){ $s= str_replace("`", "``", $s); $s= str_replace("\\", "\\\\", $s); return "`". $s . "`"; }
Tá by sa vám ako pozdávala?
Napadá ma, že by bolo ideálne ak by saa dali do insertu písať čísla stĺpcou. Ale nevyzerá to, že by to šlo...
Naposledy upravil camo dňa 30.08.2011 19:30, celkovo upravené 1
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
1. poziadavku ti staci spravit raz a ulozit to "rucne" do pola zapisom $pole = array(...);, no aj keby. vravel si, ze klucov su desiatky - to je pre DB nieje vobec problem, 1 ms ta nezabije. no popripadne existuje aj cachovanie
2. co su to rozsiahle polia? 100 prvkov vobec nie je rozsiahle pole. raz som robil porovnavanie prvkov v poli, mal som ich okolo 40 000 - 60 000 !! a spravilo to za cca 0.3 sekundy. takze tvoja stovka je oproti tomu neuplny prd.
3. PHP nie je na tom az tak zle, zeby mu to robilo problem...
edit::
ze si to ty spravil som ti taky minitest..
v1 - pouzitie tej tvojej SQLstring
v2 - addslashes
v3 - addcslashes
v4 - porovnavanie pola sposob 1
v5 - porovnavanie pola sposob 2
ako vidis, porovnavanie pola oboma sposobmi je takmer identicke. addslashes je najrychlejsie a addcslashes je o nieco malinko rychlejsie ako porovnavanie pola.
moj zaver - whitelist je najbezpecnejsi, sice z tych troch sposobov najpomalsie (neratam tamtu tvoju funkciu). no pomalsi je iba o nepatrny cas, kedze meranie sa vykonalo pri 10 000 operaciach. ty ich budes mat 100...
takze chces ist na ukor bezpecnosti len aby si bol o 1-2 milisekundy rychlejsi?!
Naposledy upravil emer dňa 30.08.2011 19:38, celkovo upravené 1
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
Vidíš, to ma celkom ukľudnilo, ja som si myslel, že desiatky je už dosť veľa.
Ale ty si to zrejme robil na localhoste, kde máš celý výkon len sám pre seba, nie?
Lebo som kdesi čítal, že PHP a polia sú práve neni, až taký kamaráti...
Ja to teda spravím tým whitelistom
EDIT:
Vlastne ešte ak dovolíte, čo si myslíte o tej funkcii čo som sem dal v predošlom príspevku z tej knihy. Ako to že neošetruje všetky tie znaky ako napr. mysql_real_escape_string().
Naposledy upravil camo dňa 30.08.2011 19:40, celkovo upravené 1
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
doplnil som ti predosli post.. neviem, nidky som si nevsimol zeby nebol PHP kamarat s poliami, skor by som povedal naopak. no neviem ako je to v inych jazykoch (java, asp)
navys som raz cital nejaku myslienku o poliach v php, ze vyuziva uz neviem ake tabulky, a preto je to velmi rychle.
// pridané po 1 minúte od posledného príspevku
este doplnam, ze to porovnavanie pola som robil tak, ze pole sa vytvorilo 10 000 krat, teda pri kazdom opakovani. to tiez mohlo operaciu spomalit, tebe sa bude inicializovat iba raz
_________________ Sorry za prelkepy |
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 | 127 Bydlisko: Lehota pod ... |
emer:
Moc ti ďakujem za námahu.
A k tomu snáď pojde použiť priamo porovnanie kľučov array_diff_key()
|
|
Stránka: 1 z 1
| [ Príspevkov: 21 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 15 | 802 | 25.03.2010 7:46 emer | | v JavaScript, VBScript, Ajax | 5 | 573 | 28.01.2009 0:23 Blackdevil | | v JavaScript, VBScript, Ajax | 3 | 530 | 25.02.2012 12:30 shaggy | | v PHP, ASP | 2 | 401 | 14.11.2011 16:09 chrono | | v Assembler, C, C++, Pascal, Java | 5 | 567 | 12.04.2011 17:16 street_punk | | v Databázy | 4 | 548 | 08.02.2013 21:51 Matus795 | | v PHP, ASP | 14 | 905 | 20.12.2007 16:47 mondzo | | v JavaScript, VBScript, Ajax | 15 | 799 | 25.01.2011 16:19 DeeJay3 | | v JavaScript, VBScript, Ajax | 3 | 869 | 09.01.2009 22:05 Blackshadow | | v JavaScript, VBScript, Ajax | 0 | 400 | 19.03.2010 23:38 wolf14 | | v Databázy | 2 | 685 | 18.01.2011 17:41 Feko | | v Ostatné | 0 | 342 | 27.09.2022 20:56 matmatmat | | v Ostatné | 1 | 625 | 26.04.2007 22:33 Jeremi | | v Redakčné systémy | 1 | 457 | 09.05.2012 20:25 programmer | | v AMD - Advanced Micro Devices | 1 | 743 | 08.04.2017 9:20 patro16 | | v Novinky | 5 | 571 | 12.10.2013 18:04 FanatiKKK |
|