Obsah superglobalnych POST a GET rubrika: Programování: PHP

4 mario2402
položil/-a 6.6.2018
 
upravil/-a 6.6.2018

Caute,

neviem dohladat relevantne informacie ohladom obsahu superglobalnych premennych POST a GET.

GET by mal byt v poriadku dekodovany (urldecode). Ale co POST? Fixujete kodovanie v tejto premennej pred jej pouzitim?

napr. ako v nette:

public static function fixEncoding(string $s): string
{
  // removes xD800-xDFFF, x110000 and higher
  return htmlspecialchars_decode(htmlspecialchars($s, ENT_NOQUOTES | ENT_IGNORE, 'UTF-8'), ENT_NOQUOTES);
}

Jedna sa o situaciu, ked nemusi byt nutne nastavene kodovanie vystupu spravne (UTF-8), nakolko nebudem mat nato vplyv. Pri odoslani napr. UTF-7 by hrozilo XSS.

Taktiez neviem nikde 100% overit, ci superglobalne vracaju VZDY len type string (resp. array a v nom iba stringy). Rozhodujem sa, ci prejst polom a udaje explicitne pretypovat na string (samozrejme s ohladom na array).

Ake mate skusenosti Vy, resp. nejaky seriozny text na tuto temu.

odkaz
6 arron
odpověděl/-a 7.6.2018

Řekl bych, že tohle by mohl být relevantní text k tomuto tématu: http://php.net/manual/en/language.variables.external.php

HTTP being a text protocol, most, if not all, content that comes in Superglobal arrays, like $_POST and $_GET will remain as strings. PHP will not try to convert values to a specific type. In the example below, $_GET["var1"] will contain the string "null" and $_GET["var2"], the string "123".

Nicméně nikdy bych se nespoléhal na to, co přichází z venku. Vždycky je potřeba to nějak ošetřit, ale záleží na kontextu, jestli očetřovat na CSS, SQL injection atd. Je potřeba se domluvit s konzumenty těch vstupů na nějakém standardu (například, že vždy zajistíš validní UTF-8 a oni se pak postarají o sanaci).

Komentáře

  • mario2402 : tak som nakoniec urobil.. zaistim iba validne kodovanie a o zbytok sa musia postarat sami.. dik 22.6.2018

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.