Autor Zpráva
Richard
Profil *
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
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 *
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
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 *
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
Zkus prokliknout ten odkaz a přečíst si odkázanou stránku.
Richard
Profil *
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
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
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 *
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: