Autor Zpráva
Limit
Profil *
Zdravím,
rád bych si zabezpečil své skripty, ale moc se neorientuji v tom jaké techniky se pro injekci a podobné metody používají, normálně si všechny výstupy z formulářů a GET proměnné protahuji skrz strip_tags(trim($bla)); stačí to na ochranu (jak pro zápis do mysql tak pro práci v php skriptu) proti prolomení stránek?

Dále mám jeden formulář u kterého však z jistých důvodů výše uvedené funkce použít nemůžu, protože potřebuji aby se tam daly vepisovat neporušeně html tagy, css atd (všechno kromě php a mysql kodu)... hodnota z něj se prostě vezme a zapíše do db, zatím u něj pouze nahrazuji uvozovky za entity mám si dát pozor ještě na jiné znaky?

díky
Alphard
Profil
mysql_real_escape_string()
Limit
Profil *
no to mi vyescapuje úplně všechny uvozovky a to právě nechci
Limit
Profil *
Nebo jinak, je nějaká funkce která umí escapované znaky "deescapovat"? Je mi totiž jedno co je tam escapované, když se s tím pracuje ve skriptu nebo je to zapsané v databázi, jde mi hlavně o to, aby se při výpisu na stránku ty escapované znaky daly do původní podoby, ve které byly napsány do formuláře..
TFSi
Profil
Tak vyzkoušel bych co umí tyto funkce:
http://cz2.php.net/htmlspecialchars
http://cz2.php.net/addslashes
http://cz2.php.net/stripslashes

http://cz2.php.net/manual/cs/ref.info.php#ini.magic-quotes-gpc
Limit
Profil *
Jj to je to co potřebuju, díky tfsi
krteczek
Profil
Limit: escapování znaků při přenose metodou post, get... způsobuje zaplá directiva magic_quotes_gpc. existuje na to funkce která zistí jestli je directiva zaplá a pokud ano odstraní lomítka directivou přidaná.
použij ji vždy hned na začtku skriptu před zpracováváním proměnných


<?php
function removeMagicQuotesGpc()

{

/*****

* Tato funkce slouží k odstranění ošetření způsobeného

* direktivou magic_quotes_gpc (jedná se o zpětná lomítka přidávána

* před uvozovky a apostrofy).

* Byla publikována Jakubem Vránou na http://php.vrana.cz/vypnuti-magic_quotes_gpc.php

*****/

if(get_magic_quotes_gpc())

{

$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST, &$_FILES);

while (list($key, $val) = each($process))

{

foreach ($val as $k => $v)

{

unset($process[$key][$k]);

if (is_array($v))

{

$process[$key][($key < 5 ? $k : stripslashes($k))] = $v;

$process[] =& $process[$key][($key < 5 ? $k : stripslashes($k))];

}

else

{

$process[$key][stripslashes($k)] = stripslashes($v);



}

}

}

}

}


//použití:
removeMagicQuotesGpc();

?>

tím dostaneš data do původního stavu (před odesláním)

dále použij pro ošetření dat před uložením do databáze funkci: mysql_real_escape_string();, taky je na to napsaná drobná funkcička:
		

function dbOsetri($polozka)
{
if(!is_numeric($polozka))
{
$polozka = "'" . (function_exists('mysql_real_escape_string') ? mysql_real_escape_string($polozka, pripoj()) : (function_exists('mysql_escape_string') ? mysql_escape_string($polozka) : addslashes($polozka)) ) . "'";
}
return $polozka;
}

krteczek
sessu
Profil *
Jestli se můžu přidat do "konverzace" pokud kontroluju input před "škondlivými" znaky, tak nemusím používat funkci mysql_real_escape_string ne?
krteczek
Profil
sessu: pokud jsi si jisty že to máš dobře, proč ne, ale toto je funkce na to určená. prostě ošetřím a mám klid, nemusím se bát že někoho napadne způsob jak to obejít
sessu
Profil *
Jsem si jistý, nedovolí zapsat nic než podtržítko, mezeru a myslím tečku.


V tom případě mysql_real_escape_string sice zabrání sql injection, ale nezabrání člověku se registrovat třeba jako : $÷$ß÷^˘°^ˇ :-) protože je zbytečný mít obojí, že jo :-)

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:

0