Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 18. 5. 2006, 20:20:56
lidi četl jsem něco o bezpečnosti a zjistil jsem že se dá někdy něco smazat pomocí url z mysql tb pokud to neuděláš šikovně. učím se ted SEO narazil jsem na mod_rewrite (htaccess) pokud udělám piomocí toho přehledaná url př.: xxx.cz/pivovary/pilsner/
tak zabráním možnému zneužité té url ke smazaní něčeho z db? diky doufám že jste mě pochopili |
||
quinux Profil |
#2 · Zasláno: 18. 5. 2006, 20:24:31
Možnému smazání zabráníš, když budeš formuláře odesílat metodou POST nikoli GET
|
||
Peca Profil |
#3 · Zasláno: 18. 5. 2006, 20:34:19
quinux Obávám se, že odeslat cokoliv metodou post není zas takový problém.
Hlavní je nedávat obsah formuláře jenom tak bezhlavě do dotazu na databázi. Dát si pozor na nebezpečné znaky -ukončení dotazu a napsání úplně jiného apod. Totéž platí např. pro zobrazování stránek ve stylu /zobraz.php?url=najaka_stranka.php |
||
djlj Profil |
#4 · Zasláno: 18. 5. 2006, 20:45:14
Anonymní
Snad ti pomůže i tento článek... |
||
Anonymní Profil * |
#5 · Zasláno: 18. 5. 2006, 20:45:23
ale pokud použiju přehledná url a né zobraz.php?url=najaka_stranka.php tak pžez url mi to nesmaže?
a čím mám formulář ošetřit? myslím že jsem používal jendu funkci ted si nepamatuju přesně jakou ale je to nějak htmlchar . .. . () nevim přesně :-D |
||
Anonymní Profil * |
#6 · Zasláno: 18. 5. 2006, 20:49:53
díky za link jak tam udává tak takový zápis bude bezpečný? když to protlačim přez ty funkce? (na číslo/intval/ a text/addslashed/ ?)
<?php // ošetření vstupních dat mysql_query("SELECT * FROM tabulka WHERE nazev = '" . addslashes($_GET["nazev"]) . "' OR id = " . intval($_GET["id"])); // spolehnutí se na magic_quotes_gpc mysql_query("SELECT * FROM tabulka WHERE nazev = '$_GET[nazev]' OR id = '$_GET[id]'"); ?> nebo se mýlím? co znamená OFFSET v tomdle příkladu? ? //OFFSET " . intval($_GET["offset"]) <?php // nefunguje mysql_query("SELECT * FROM tabulka LIMIT 10 OFFSET '$_GET[offset]'"); // funguje mysql_query("SELECT * FROM tabulka LIMIT 10 OFFSET " . intval($_GET["offset"])); ?> diky |
||
quinux Profil |
#7 · Zasláno: 18. 5. 2006, 20:55:55
Peca
No já to myslel v souvislosti s tou url. Když na nějakém webu něco smažu a dostanu např. takovou url: formular.php?id=523&akce=smazat tak je jasné, že potom stačí jen měnit id a promažu databázi - to dokáže každý druhý uživatel. Když však v url bude jen formular.php a data půjdou postem tak to už je pro většinu uživatelů mnohem těžší. :o) |
||
Hugo Profil |
#8 · Zasláno: 18. 5. 2006, 21:00:18
quinux
Težší jo, ale rozhodně ne neproveditelné. Poslat data metodou post je velmi jednoduché. |
||
Anonymní Profil * |
#9 · Zasláno: 18. 5. 2006, 21:00:21
jo ty to myslíš takhle jenže já myslím třeba pokud buud mít todle
PHP: "SELECT * FROM table WHERE id=$id"; a zadá něco takového ?id=0%20or%201=1 znaky %20 jsou uvedeny jako korektní náhrada mezery do URL) ?id=57;%20DELETE%20FROM%20table tak se mi něco smaže pokud to budu mít neošetřené a pokud budu mít přeheldné url (SOE)xxx.cz/pivovary/pilsner/ přez mod_rewrite jestli bude furt možníé mi něco přez tu url něco smazat nějak ? |
||
Hugo Profil |
#10 · Zasláno: 18. 5. 2006, 21:03:30
Anonymní
To zalezi na tom jak budes mit nastaveny mod_rewrite. xxx.cz/pivovary/57;%20DELETE%20FROM%20table/ prepises na toto 57;%20DELETE%20FROM%20table Tak ti to moc nepomůže. IMHO je nejdůležitější provést korektní kontrolu a ošetření dat před zápisem do db. |
||
Kajman_ Profil * |
#11 · Zasláno: 18. 5. 2006, 21:05:00
tak takový zápis bude bezpečný? když to protlačim přez ty funkce? (na číslo/intval/ a text/addslashed/ ?
V kombinaci s uvozovkami kolem obého ano. OFFSET je počet řádků, které se přeskočí. Má tam být číslo, proto to nefuguje s řetězcem '1'. ?id=57;%20DELETE%20FROM%20table V mysql_query nelze zadávat více dotazů oddělených středníky. Neplecha se dělá tím první způsobem - tedy pomocí or. Udělejte to tak, že to nedokážete zneužít i když víte, jaké jsou zdrojáky. |
||
Anonymní Profil * |
#12 · Zasláno: 19. 5. 2006, 14:05:23
naco dalšího z bezpečnosti se mám zaměřit?
session je dostatečně bezpečné? abych vněm mohl mít duležité informace? |
||
-error414 Profil * |
#13 · Zasláno: 19. 5. 2006, 14:26:05
Pripada me to jako by si bzyl vte bezpecnosti upne zmateny.
mod_rewrite dela jen hezka url - nezabrani sql utoku pred kazdym dotazem je treba osetrit vstupni data ktera jsou v dotazu pouzita pokud neni zapnuta directiva magic_quotes_gpc. nebo pouzivani vazani promenych, mysql to sice neumi ale da se to m´pomoci db layeru emulovat. |
||
a Profil * |
#14 · Zasláno: 19. 5. 2006, 21:39:28
Co tahle přidat na začátek php pracující s databází tohle:
foreach($_GET as $key=>$value) {$_GET[$key]=mysql_escape_string($value); } foreach($_POST as $key=>$value) {$_POST[$key]=mysql_escape_string($value);} A už si nemusím dělat starosti a nebo je zde ještě nějaké nebezpečí? |
||
a Profil * |
#15 · Zasláno: 21. 5. 2006, 11:49:28
ošetří mi todle dostatečně čislo?
if (intVal(strVal($id) != $id)) {echo "není číslo";} else{sql = ...;} |
||
Anonymní Profil * |
#16 · Zasláno: 22. 5. 2006, 10:50:50
? :-/
|
||
Časová prodleva: 12 dní
|
|||
arix Profil * |
#17 · Zasláno: 3. 6. 2006, 20:41:28
lidi :-) zdá se to že to bude stačit jak na to koukám co nato říkáte? pude to? já myslím že jo, že to dostatečně ošetří všecky get a post na stránce? mylímse že to bude stačit?
foreach($_GET as $key=>$value) {$_GET[$key]=mysql_escape_string($value); } foreach($_POST as $key=>$value) {$_POST[$key]=mysql_escape_string($value);} |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0