: : 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';

?>