: : g_SECURITY
Balíček obchází php proměnou
GLOBALS a zároveň dodává uživatelskému vstupu bezpečnost vůči aplikaci a nepovoluje automatické vložení COOKIE.
Okrájí všechny uživatelské vstupy od tagů (až na pár základních). Skript umí upravovat i odeslané řetězce do jedné úrovně.
Zatím jsem se nesetkal s možností propustit do aplikace řetězec s více úrovněma. Samozřejmně není problém vylepšení, v podobě
předělání nahrazovacích cyklů do rekursivní funkce.
Při změnách funkce
SecureString se fantazii meze nekladou.
Použití:
Hned na začátku každého prvního skriptu (proto také první hlavičky proti cachování).
Na všechny ostatní (samostatně nevolané, např
hlavicka.php) doplnit příkaz:
<?
unset($_GET["bezpecnostdone"]);
unset($_POST["bezpecnostdone"]);
unset($_COOKIE["bezpecnostdone"]);
if (!isset($bezpecnostdone)) exit;
?>
Kód:
g_security.php
<? /* SECURITY */
$g_security_true = true;
Header("Pragma: no-cache");
Header("Cache-Control: no-cache");
Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT");
function SecureString($poststring)
{
$bezpecne = '';
if ((!empty($poststring)) || ($poststring == 0))
{
$bezpecne = $poststring;
if (!is_numeric($poststring)) {
$bezpecne = str_replace("<br>",'*BR*',$bezpecne);
$bezpecne = str_replace("<b>",'*B',$bezpecne);
$bezpecne = str_replace("</b>",'*/B',$bezpecne);
$bezpecne = str_replace("<center>",'*CENT',$bezpecne);
$bezpecne = str_replace("</center>",'*/CENT',$bezpecne);
$bezpecne = str_replace("<i>",'*I',$bezpecne);
$bezpecne = str_replace("</i>",'*/I',$bezpecne);
$bezpecne = str_replace("<li>",'*L',$bezpecne);
$bezpecne = str_replace("</li>",'*/L',$bezpecne);
$bezpecne = str_replace("<ul type=1>",'*Q',$bezpecne);
$bezpecne = str_replace("</ul>",'*/Q',$bezpecne);
$bezpecne = str_replace("<u>",'*U',$bezpecne);
$bezpecne = str_replace("</u>",'*/U',$bezpecne);
$bezpecne = str_replace("<font color=#",'*FNT#',$bezpecne);
$bezpecne = str_replace("</font>",'*/FNT',$bezpecne);
$bezpecne = str_replace('&','MP*D',$bezpecne);
}
$bezpecne = preg_replace (array ("'<[\\//!][^>]*?-'","'<[^>]*?>'"), '', $bezpecne);
$bezpecne = str_replace("'",'',$bezpecne);
$bezpecne = str_replace('"','"',$bezpecne);
if (!is_numeric($poststring)) {
$bezpecne = str_replace('*BR*',"<br>",$bezpecne);
$bezpecne = str_replace('*B',"<b>",$bezpecne);
$bezpecne = str_replace('*/B',"</b>",$bezpecne);
$bezpecne = str_replace('*CENT',"<center>",$bezpecne);
$bezpecne = str_replace('*/CENT',"</center>",$bezpecne);
$bezpecne = str_replace('*L',"<li>",$bezpecne);
$bezpecne = str_replace('*/L',"</li>",$bezpecne);
$bezpecne = str_replace('*Q',"<ul type=1>",$bezpecne);
$bezpecne = str_replace('*/Q',"</ul>",$bezpecne);
$bezpecne = str_replace('*I',"<i>",$bezpecne);
$bezpecne = str_replace('*/I',"</i>",$bezpecne);
$bezpecne = str_replace('*U',"<u>",$bezpecne);
$bezpecne = str_replace('*/U',"</u>",$bezpecne);
$bezpecne = str_replace('*FNT#',"<font color=#",$bezpecne);
$bezpecne = str_replace('*/FNT',"</font>",$bezpecne);
$bezpecne = str_replace('MP*D','&',$bezpecne);
}
}
return $bezpecne;
}
while (list($key, $val) = each($_COOKIE))
{
unset($key);
}
while (list($key, $val) = each($_GET))
{
$$key = $val;
if (!is_array($$key))
{
$$key = SecureString($val);
$GLOBALS[$key] = $$key;
} else {
$retez = $$key;
while (list($klic,$hodnota) = each($retez))
{
$retA[$klic] = SecureString($hodnota);
}
$$key = $retA;
$GLOBALS[$key] = $$key;
unset($retA);
unset($retez);
}
}
while (list($key, $val) = each($_POST))
{
$$key = $val;
if (!is_array($$key))
{
$$key = SecureString($val);
$GLOBALS[$key] = $$key;
} else {
$retez = $$key;
while (list($klic,$hodnota) = each($retez))
{
$retA[$klic] = SecureString($hodnota);
}
$$key = $retA;
$GLOBALS[$key] = $$key;
unset($retA);
unset($retez);
}
}
$bezpecnostdone = 'probehlo';
?>