Metod GET, POST Injection

Metod GET, POST Injection

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Napisao sam jednu funkciju za čišćenje GET i POST stringa, koju sam sastavio od raznih idejnih rešenja, koja čisti od neželjenih poziva baze i servera. Zanima me vaše mišljenje i dali ima neka bolja varijanta da se očiste ove metode a da ne utiče na sadržaj? moj CMS radi samo sa BB kodovima ako treba HTML tako da HTML ne prolazi kroz ove metode samo tekst. Javascript, PHP, SQL pozivi treba da budu zabranjeni. Hvala.

/* * SECURITY POST METHOD * DEfault: POST($name) * Call: POST($name, $value) */ function POST($name, $value=NULL) {    $content = (isset($_POST[$name]) ? (!empty($_POST[$name]) ? trim($_POST[$name]) : NULL) : trim($value));    $content = (get_magic_quotes_gpc()) ? stripslashes($content) : $content;    // fix &entitiy\n; (except those named above)    $content = preg_replace('#(&\#*\w+)[\x00-\x20]+;#us',"$1;",$content);    $content = preg_replace('#(&\#x*)([0-9A-F]+);*#ius',"$1$2;",$content);    $content = html_entity_decode($content, ENT_COMPAT);    // remove "on" and other unnecessary attributes (we specify them all to prevent words like "one" being affected)    $content = preg_replace('#(\[[^\]]+[\x00-\x20\"\'])(onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror|onerrorupdate|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizeend|onresizestart|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|onunload|xmlns|datasrc|src|lowsrc|dynsrc)[^\]]*\]#isUu',"$1]",$content);    // remove javascript and vbscript...    $content = preg_replace('#([a-z]*)[\x00-\x20]*=?[\x00-\x20]*([\`\'\"]*)[\\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu','$1=$2nojavascript...',$content);    $content = preg_replace('#([a-z]*)[\x00-\x20]*=?([\'\"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu','$1=$2novbscript...',$content);    $content = preg_replace('#(\[[^\]]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*expression[\x00-\x20]*\([^\]]*>#iUs',"$1\]",$content);    $content = preg_replace('#(\[[^\]]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*behaviour[\x00-\x20]*\([^\]]*>#iUs',"$1\]",$content);    $content = preg_replace('#(\[[^\]]+)style[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*).*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^\]]*\]>#iUus',"$1\]",$content);    return trim((get_magic_quotes_gpc()) ? stripslashes($content) : $content); }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Uradi da ta funkcija prima array, pa da mozes da joj pullujes vise zahteva ovako ti je samo jedan.

Ovo
    $content = (get_magic_quotes_gpc()) ? stripslashes($content) : $content;
Sto vracas $content kao false? Ja bi ovde cepao NULL ili false



offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

_iKaC ::Uradi da ta funkcija prima array, pa da mozes da joj pullujes vise zahteva ovako ti je samo jedan.

Ovo
    $content = (get_magic_quotes_gpc()) ? stripslashes($content) : $content;
Sto vracas $content kao false? Ja bi ovde cepao NULL ili false


Pa pazi ova funkcija zamenjuje regularan $_GET i $_POST u ovom slučaju sam okačio POST funkciju na forum a GET ima ovo + imam svičer koji propušta samo slova, samo brojevi, samo slova i brojevi i samo slova, brojevi i par simbola.

Svrha ovoga je da zaštitim MySQL od nedozvoljenih poziva putem forme ili preko URL-a i da sve što prolazi kroz ovo bude striktno pravilima koja ja određujem. Znaš i sam da su $_GET i $_POST najranjivije ako ne staviš neki filter.

a funkcija get_magic_quotes_gpc ti svičuje dali će čistiti string od backslash ( \ ) ili neće. Ako stavim FALSE ili NULL onda će blokirati sadržaj i neće proći ništa. Ovako samo briše te backslash znakove iz stringa.

Slobodno koristite ovo, korisna je funkcija samo me zanima dali postoji jednostavnija varijanta jer sam ovde gledao da objedinim sve što mi padne na pamet.

offline
  • Pridružio: 25 Jan 2004
  • Poruke: 2784
  • Gde živiš: Niš

Mislim da ti je sve ovo previše, osim ako baš iz nekog razloga nećeš da upisuješ u bazu sve što liči na neki kod Very Happy
Realno, get_magic_quotes_gpc() se već davno ne preporučuje. U zamenu za to je poželjno da koristiš htmlspecialchars() koji formatira output tako da se on posle ne izvršava u browseru i rešava te persistent XSS-a. Jedino što mi pada na pamet sada jeste da ćeš se možda upetljati sa bb kodom, ali valjda ne bi trebalo da bude problema ako na inputu koristiš htmlspecialchars, a konvertuješ bb pri outputu Bebee Dol
Sa druge strane, php kod nikako ne može da se izvrši iz stringa koji dobiješ iz $_GET i $_POST (unless unserialize()), a za mysql injection koristi prepared statements PDO. Sve je to kraće i efikasnije... Smile

offline
  • Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
  • Pridružio: 13 Jun 2010
  • Poruke: 307
  • Gde živiš: Subotica

Heh PDO... Poznajem sintaxu onako površinski ali problem mi je sledeći: Ranije kada sam radio svoj CMS sistem i framework koji koristim imao sam manje iskustva i gradio sam ga po školskom principu. Sreća da sam radio OOP pa lako mogu zameniti mysql sa mysqli ili mssql po potrebi u konstruktoru ali neznam baš kako sa PDO da postupim i za njega koliko znam treba poseban plugin instalirati na server (ispravi me ako grešim). Sada sam već napisao novi framework koji koristim i koji radi sistemom "lenjosti" (Lazy Systems) koji se potpuno razlikuje od svega do sada što sam radio pa sam sve metode servera kroz određene filtere propustio i ubacio uklase. To sada koristimna svojim projektima jer mi olakšava izradu portala maksimalno i osećam se sigurnije. Samo koristim miksove PHP i svojih funkcija.

Predhodni CMS koji sam napravio i framework su mnogo lošije urađeni, tromi su i spori pa sada pokušavam da napravim update koji će to malo optimizovati.

Ali u oba koda koristim i neke stare lemente koje sam malo raščistio a najranjiviji su svugde GET i POST funkcija koje želim da zaštitim. Ovaj moj princip je veoma pomogao pre mesec dana kada sam imao jedan ozbiljan hakerski napad, PHP i MySQL je istrpio to bez problema na kraju su napali direktno server preko nekog levog Jopomla sajta koji nije moj pa sam onda i ja bio oštećen.

Meni je problem najviše veličina koda. Želim da ga smanjim ali da bude efikasna.

Ko je trenutno na forumu
 

Ukupno su 923 korisnika na forumu :: 15 registrovanih, 2 sakrivenih i 906 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: brundo65, dragoljub11987, goxin, havoc995, Insan, JOntra, Koridor, kovac9mm, Krvava Devetka, mikki jons, pein, radionica1, sasa76, wizzardone, šumar bk2