Autor | Zpráva | ||
---|---|---|---|
Richard Profil * |
#1 · Zasláno: 24. 3. 2014, 12:08:52
Ahoj,
používám desinfekci uživatelského vstupu function Input_from_user_is_save($myString) { if ($myString != "") { $myString1 = escapeshellarg($myString); $myString2 = escapeshellcmd($myString1); $myString3 = htmlentities($myString2); $myString4 = strip_tags($myString3); } else { $myString4 = ""; } return $myString4; a před textem a po textu se mi uloží tady tyhle znaky ^" Nevíte jak to odstranit a proč to dělá? |
||
Tori Profil |
#2 · Zasláno: 24. 3. 2014, 12:18:52
Richard:
„proč to dělá?“ Protože používáte funkci, která dělá 4 různé věci a asi ani jedna z nich se nehodí k tomu, jak s tím řetězcem dál pracujete. Escapujte jen pro konkrétní kontext: Chcete řetězec použít jako příkaz v shellu (escapeshellcmd) nebo jako parametr příkazu v shellu (escapeshellarg) nebo zobrazit HTML značky aby nerozbily stránku (htmlentities) nebo odstranit HTML tagy (strip_tags)? |
||
Richard Profil * |
#3 · Zasláno: 24. 3. 2014, 12:22:52
Poté už jen ukládám hodnoty do databaze. Chtěl jsem jen zabezpečit uživ. vstup, aby mi někdo nemohl udělat zle na serveru. Tyhle mi byly doporučeny.
Která se tam nehodí? |
||
Alphard Profil |
#4 · Zasláno: 24. 3. 2014, 12:26:46
Takto použitá žádná. Zapomeňte na univerzální funkci, která ošetří vše, to už zkusili samotní tvůrci PHP a moc dobře to nedopadlo :-)
Jak správně escapovat si přečtěte na phpfashion.com/escapovani-definitivni-prirucka. |
||
Richard Profil * |
#5 · Zasláno: 24. 3. 2014, 12:36:03
Takže úplně to ošetřit nejde? Vždycky bude nějaká možnost to rozhodit?
Mě se jedná jen o ten základ, aby se nerozhodil server, nebo nevymazali data. |
||
jenikkozak Profil |
#6 · Zasláno: 24. 3. 2014, 12:38:05
Zkus prokliknout ten odkaz a přečíst si odkázanou stránku.
|
||
Richard Profil * |
#7 · Zasláno: 24. 3. 2014, 12:50:15
To jsem udělal. Díky, že si mi to připoměl, jseš v branži jednička :-). Ok, potřeboval jsem jen konkrétně odpověď. Nějak to pořeším.
|
||
Alphard Profil |
#8 · Zasláno: 24. 3. 2014, 12:58:08
Richard:
Vy ten problém nevidíte dost komplexně, jestli nepoužíváte šílenosti jako eval a budete důsledně escapovat vstupy do databáze, bude server na první pohled zabezpečený dobře. Ale pokud umožníte snadno ukrást uživatelskou identitu správců webu (na což stačí javascript), může to v důsledku vést k vymazání veškerých dat. Bezpečnost nejde zjednodušit na použítí třech funkcí, které dáte pro jistotu vždy do série. |
||
Joker Profil |
#9 · Zasláno: 24. 3. 2014, 14:10:30
Richard:
> před textem a po textu se mi uloží tady tyhle znaky ^" > Nevíte jak to odstranit a proč to dělá? Důvodem je, že zřejmě bezmyšlenkovitě používáte všechny escapovací funkce na které jste narazil. Ironie je, že tam není žádná pro ošetření vstupu do databáze, tj. ta funkce escapuje vstup do databáze pro všechno možné… kromě databáze. „Takže úplně to ošetřit nejde?“ Jde. Pro uložení řetězce do databáze se použije escapovací funkce pro danou databázi. Ta dostatečně ošetří vstup do databáze (pokud tedy není chyba v ní) a nic dalšího už není potřeba. Když se pak ten řetězec z databáze zase vybere a má se zobrazit na stránce, použije se funkce pro escapování HTML. Ta dostatečně ošetří výstup do HTML a nic dalšího už není potřeba. A tak podobně. |
||
Richard Profil * |
#10 · Zasláno: 24. 3. 2014, 16:39:23
díky. Pro DB můžu použít tohle mysql_real_escape_string ? Sice píšou, že PHP 5.5.0 bude zakázána. Nebo používáš nějakou lepší?
|
||
juriad Profil |
#11 · Zasláno: 24. 3. 2014, 16:48:21
Richard:
Záleží na tom, jak zapisuješ (posíláš dotazy) do databáze. Pokud funkcí mysql_query, tak použij mysql_real_escape_string. Všechny funkce mysql_ mají to samé varování. Pokud používáš rozhraní mysqli_, použij funkci mysqli_real_escape_string. Nebo nějaký jeho mechanisus, který zajistí automatické escapování (PreparedStatements). Pokud používáš PDO, použij PrepeparedStatement, nebo metodu PDO::quote. Pokud používáš k přistupu k databázi něco jiného, podívej se do dokumentace. |
||
Časová prodleva: 11 let
|
0