renathy Posted October 8, 2009 Report Share Posted October 8, 2009 Man te vienā grāmatā ir kods, kura nozīmi es ne līdz galam saprotu (jā, ir google, bet tas vēl nepalīdz...): Kods izpildās sākumā, bet kāda tam īsti jēga? if (get_magic_quotes_gpc()) //ko nozīmē "magic quotes", saprotu, ka tas ir kkas ar apache { function _stripslashes_rcurs($variable, $top = true) //rkursīvi saliek stripslashes visim get/post, vai??? a kāpēc? { $clean_data = array(); foreach ($variable as $key => $value) { $key = ($top) ? $key : stripslashes($key); $clean_data[$key] = (is_array($value)) ? stripslashes_rcurs($value, false) : stripslashes($value); } return $clean_data; } $_GET = _stripslashes_rcurs($_GET); $_POST = _stripslashes_rcurs($_POST); // $_REQUEST = _stripslashes_rcurs($_REQUEST); // $_COOKIE = _stripslashes_rcurs($_COOKIE); } Quote Link to comment Share on other sites More sharing options...
Kaklz Posted October 8, 2009 Report Share Posted October 8, 2009 Acīmredzot tava grāmata ir diezgan paveca. Šobrīd labā prakse ir programmēt ar izslēgtu magic quotes uzstādījumu un visus datus filtrēt/validēt/apstrādāt pašam. Quote Link to comment Share on other sites More sharing options...
renathy Posted October 8, 2009 Author Report Share Posted October 8, 2009 (edited) Skaidrs... tad man nepieciešams padoms par datu validēšanu. Vai šeit kkas trūkst / ir nepareizi pilnai iespējamai datu validēšanas kopai? 1) Ja tas ir ievads formā, kuru postē, tad jāveic sekojošas validācijas u.c. lietas: a) ja ir ierobežota atļauto simbolu kopa (piemēram, login) -> tad izmantot regulārās izteiksmes un neļaut "ļaunos" simbolus a2) ja ir atļauti tikai skaitļi -> tad izmantot intval, doubleval u.tml. b) izmantot mysql_real_escape_string c) izmantot trim d) ??? vēl kas pilnam komplektam??? Ko īsti darīt ar addslashes, stripslashes, vai tie vajadzīgi? 2) Ja iegūst datus no datu bāzes, tad liek klāt htmlspecialchars. Pie tam - vai to liek vienmēr, pat tad ja ir pārliecināts, ka dati nesatur "launos" simbolus. Piemēram, zinu, ka tur jābūt skaitlim. Vai piemēram, zinu, ka tajā laukā rakstu iepriekš pārbaudītu datumu formā 12.12.2009, vai izgūstot arī liek htmlspecialchars? Nu kāda ir tā prakse...? 3) GET parametriem: a) pārbaudes uz atļautiem simbolie b) intval, ja tikai skaitļi c) ??? vēl kas pilnam komplektam ??? Edited October 8, 2009 by renathy Quote Link to comment Share on other sites More sharing options...
Maris-S Posted October 8, 2009 Report Share Posted October 8, 2009 (edited) Principā, ja arī grāmata ir paveca, pieeja ir pareiza. Es datu filtrēšanai izmantoju tādu pašu pieeju, funkcija get_magic_quotes_gpc tieši to arī pārbauda, vai ir vai nav ieslēgta automātiskā esceipošana un tikai gadījumā ja ir tad viņas automātiski pieliktos slešus (automātiskā esceipošana) noņemam un veicam savu manuālo filtrēšanu. Būtībā ir tā: function secure($value) { if (get_magic_quotes_gpc) { //Pārbaudām vai ir ieslēgta automātiskā esceipošana //Veicam stripslashes vai rekursīvi vai vienkārši mainīgajam atkarīgs no situācijas (šeit vienkāršais variants). $value=stripslashes($value); } //Tālāk veicam mysql_real_escape_string() vai rekursīvi vai kā atkarīgs no tā ko vēlas panākt. return $value; } Kodā ir parādīta tikai doma. Jādara tas tāpēc jo nevar zināt vai izveidotā mājas lapa kādreiz nestāvēs uz servera kur ir ieslēgta automātiskā saņemto datu esceipošana, ja tādā gadījumā neizdarot stripslashes palaidīsi mysq_real_escape_string, tad sanāks ka būs veikta dubulta esceipošana. Edited October 8, 2009 by Maris-S Quote Link to comment Share on other sites More sharing options...
marcis Posted October 8, 2009 Report Share Posted October 8, 2009 Mana pieeja būtu vienkārši diseiblot magic quotes :) Quote Link to comment Share on other sites More sharing options...
Maris-S Posted October 8, 2009 Report Share Posted October 8, 2009 Pieeja jau vienkāršāka, bet pastāv iespēja ka nebūs pieejas serverim. Tomēr, ja izveido atbilstošu funkciju ar pārbaudēm, par to var vispār nedomāt. Quote Link to comment Share on other sites More sharing options...
marcis Posted October 9, 2009 Report Share Posted October 9, 2009 Palieku pie sava. Eksistē tādas funkcijas kā ini_set() un set_magic_quotes_runtime(). Es viņas izpildītu skripta sākumā un tālāk dzīvotu bez problēmām. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.