Ievades datu pārbaude (PHP)

Tiek skatīts 1 ieraksts (no 32 kopumā)
  • Autors
    Ieraksti
  • #151960
    root
    Participant

    Problēma tur, ka nepārtraukti atrodas kāds kas atkārto mūžīgo jautājumu – kā pārbaudīt PHP ievades datus, jeb $_GET un $_POST. Un man ir apnicis katram to skaidrot- Lūk Jums ar ko sākt. Funkciju izmantoju jau pasen, bet tā nav pilnīga un atsevišķi dati atsevišķās vietās var prasīt savādāka veida apstrādi.

    Quote:


    function check($str) /// Ievades un datu pārbaude

    {

    if (get_magic_quotes_gpc())

    $str = stripslashes($str);

    $str = htmlentities($str, ENT_QUOTES, ‘UTF-8’);

    $str = str_replace(“../'”, ”’, $str);

    $str = str_replace(“./'”, ”’, $str);

    $str = str_replace(“.'”, ”’, $str);

    $str = str_replace(“..'”, ”’, $str);

    $str = str_replace(“‘”, ”’, $str);

    $str = str_replace(‘rn’, ‘
    ‘, $str);

    $str = str_replace(‘\’, “”, $str);

    $str = str_replace(‘|’, ‘I’, $str);

    $str = str_replace(‘||’, ‘I’, $str);

    $str = str_replace(‘/\$/’, ‘$’, $str);

    $str = str_replace(‘[l]https://’, ‘[l]’, $str);

    $str = str_replace(‘[l] https://’, ‘[l]’, $str);

    $str = mysql_real_escape_string($str);

    return $str;

    }

    foreach ($_GET as $ig => $value_g) {

    $_GET[$ig] = check($value_g);

    }

    foreach ($_POST as $ip => $value_p) {

    $_POST[$ip] = check($value_p);

    }

    Kods jāpievieno skripta pašā sākumā, vēlams uzreiz pēc SQL pieslēgšanas, ja SQL neizmantojam aizvācam rindu – $str = mysql_real_escape_string($str); . Ja izmantojam include/require ko mēs noteikti darām, tad šo koda gabalu liekam include faila sākumā, gan jau ir kāds PHP fails kurš iekļaujas visos, tur konfigs vai kas, galvenais lai vienmēr iekļautos pirms datu apstrādes.

    #245239
    Mad182
    Participant

    Tātad sanāk, ja es gribu, un piemēram, komentārā ierkastīt ceļu uz failu, kas sākas ar ./, es to izdarīt nevaru. Kāda jēga kaut ko tādu vispār darīt? Ja tiek inkludots fails, kas ņem ceļu no get vai post variabļa, tad tas jau pats par sevi ir nepareizi un vajag to labot pašā pamatā, nevis mēģināt izvarot visu post un get. Un nafig vajag repleisot kaut kādus https:// ?

    Ko Tev ļaunu nodarījušas “|”, ka tās tik ļoti vajag izravēt?

    Tā pat, kāpēc pieņemt, ka nekur nekad nebūs nepieciešams saņemt lietojamu html kodu no postotajiem datiem? HTML var noravēt nost tur, kur tas vajadzīgs.

    Tā pat nav nekādas jēgas šito monstru laist virsū tur, kur tā pat var ievadīt tikai skaitli. Daudz vienkāršāk un drošāk būs izmantot intval() vai (int) mainīgā tipam un viss…

    + ja reiz tomēr šādi gribas darīt, kāpēc visu drauzu nesarakstīt vienā īsā masīvā, bet gan saukt str_replace miljons reizes?

    Ai labi, neesmu speciālists, bet kāda briesmīgi līka man tā funkcija izskatās. Tu protams vari lietot ko vien gribi, bet nevajag to mācīt citiem, kā pareizo ceļu.

    #245240
    root
    Participant

    Mad šī fiča ir iesācējiem par uzskates materiālu, es šo izmantoju pārsvarā mazajās lapiņās, tur vizītkartēs ar iespēju labot tekstus un tā tālāk. Protams, ka veidojot sistēmu no nulles šis monstrs nav nepieciešams, ir vietas kur vajag drakonisku apstrādi un ir vietas kur tas nav nepieciešams. Tādēļ teicu, ka funkcija nav pilnīga un var absolūti nederēt citam mērķim, kā tam kam viņa der 😀

    #245241
    daGrevis
    Participant

    Labāk manuāli to visu darīt, imho. 🙂

    https://paste.php.lv/7d3a9ab84419569c6959d6a97bb86f9a?lang=php

    #245242
    root
    Participant

    is_string is_numeric is_int ir diezgan gļukainas funkcijas 🙂 piemēram $_GET intu var noturēt par string un tā tālāk, es uz to nepaļaujos, labāk jau regexp 🙂

    #245243
    rATRIJS
    Participant

    daGrevis: exit (vai die) izmantot tajaa gadiijumaa nav labi

    + Mad182, bet gan jau, kaads panjems. Tik ja panjems kaads kas neko nesaprot, tad sekos jautaajumu veetra kaadeelj ar manu variabli notiek taa un shitaa…

    #245244
    Crow
    Participant

    Cepums par centību, taču es izvairītos publicēt funkcijas, kas tauriem dod iespēju cept augšā vēl vairāk webšitus bez izpratnes par to, kāpēc šī ievades datu pārbaude ir vajadzīga un kā tā darbojas.

    #245245
    daGrevis
    Participant

    rATRIJS wrote:

    daGrevis: exit (vai die) izmantot tajaa gadiijumaa nav labi

    Tā varētu būt. bet tas ir tikai piemērs. xD

    #245246
    root
    Participant

    Crow bez piemēriem tauri gudrāki nekļūs.

    daGrevi, kam tev lieki biti kodā? exit darbojas arī bez () tb exit; un viss

    #245247
    daGrevis
    Participant

    TavaMaate wrote:

    daGrevi, kam tev lieki biti kodā? exit darbojas arī bez () tb exit; un viss

    Hmm, nu nezinu vai ‘()’, t.i. divi baiti, mainīs pasauli, bet ok, ņemšu vērā. 🙂

    #245248
    root
    Participant

    Nu nu. Saliec veselu cms no liekiem 2 baitiem un +1mb 🙂 krch ja raksti, tad raksti kaa pienaakas. Ne kjepu ljepu

    #245249
    Mad182
    Participant

    Vispār jau Tavā funkcijā var noīsināt krietni vien vairāk 😀 Bet tā tik un tā paliek matu skaldīšana un tās iekavas nekādi neietekmēs ne ātrdarbību, ne lasāmību.

    #245250
    Foxsk8
    Participant

    Vēl vajadzētu aizsargāties arī pret šo:

    Code:

    div style=”display:none;”

    Caur style elementu, var arī nepatīkamus jokus saveidot. Līdz ar to, reāli vēl vajadzētu dažus parametrus tai tavai funkcijai papildināt, un man liekas, ka reāli tie slaši tev tur ir par daudz salikti. Atliek taču tikai vienu reizi replace / vai ,

    Code:

    $str = “/////./\.\.\.\\”;
    $str = str_replace(’/’, ”, $str);
    $str = str_replace(’\’, ”, $str);
    echo stripslashes($str);

    #245251
    Crow
    Participant

    Mad182 wrote:

    iekavas nekādi neietekmēs ne ātrdarbību, ne lasāmību.


    Un kā vēl ietekmēs, krutais koderi. TvajuMaķ ir pilnīga taisnība par tematu.

    Lūk, tieši tieši tāpēc IT ir pakaļā, ka nevienam nerūp šādas elementāras lietas.

    #245252
    daGrevis
    Participant

    Ar iekaviņām (darbībai izpildoties miljards reizes (1’000’000’000)): 218.2848081589 sekundes, bez – 217.5067849159 sekundes.

    Un jā, cik lasīts, tā arī ir – ar iekavām ir lēnāk. 😛

    #245253
    Mad182
    Participant

    Nepilna sekunde uz miljards darbībām – tātad mājas lapu jāielādē ntos tūkstošus reižu lai ietaupītu vienu milisekundi – tas nav aktuāli pat gūglei vai feisbūkam…

    Koda optimizācija protams ir svarīga lieta, bet sākt tomēr vajag ar reālajā dzīvē jūtamām lietām, strīdēties par iekavu lietošanu un pēdiņu veidu vairāk tomēr var dēļ stila, ne īstas ātrdarbības.

    #245254
    daGrevis
    Participant

    Madaram ir taisnība. Daudz svarīgāk ir, lai kods ir pārskatāms un viegli lasāms. Tik pat labi, ja jau uztraucamies par bitiem, varam atteikties no atstarpēm un jaunajām rindiņām vispār… 🙂

    #245255
    Crow
    Participant

    Tāpēc es savam kodam veidoju divas relīzes – DEV un PRODUCTION.

    DEV versija ir viegli lasāma, ar komentāriem, gģe nado, un tiri-piri.

    PRODUCTION versija ir viena gara pentere, kurā nav nekā lieka.

    Pagaidām gan viss notiek ar roku pārsvarā, bet plānoju padarīt automatizētu, taču esmu par slinku. Katram ir kāda uts. Turklāt dažādi tūļi jau ir, bet tad atkal – es cenšos maksimāli izvairīties no 3rd party shit.

    Ä€, un tieši tāpēc XML smird pēc gangrēnas. Drausmīga liekvārdība un pļurza. I will hate it 4ever.

    #245256
    root
    Participant

    daGrevi sakombinē iekaviņas ar nepareizi lietotām pēdiņām (” un ‘ ir atšķirība, btw), iestati savu editoru lai crlf vietā liek spaces, čakarē PHP kodu ar inline HTML un nedod dies HTML html html un aplikācija kura prasīs velszin kādus resursus na vidu. Ja nemaldos joomlai ar virtuemartu bija šitais niķis.

    Web aplikācijām jābūt lightening fast pēc iespējas. un jo ātrāk, jo labāk. Lasāms kods vēl nenozīmē skillz un Fox – slašiem tur jābūt 🙂 Wnk tici uz vārda

    #245257
    Mad182
    Participant

    Crow wrote:

    Tāpēc es savam kodam veidoju divas relīzes – DEV un PRODUCTION.

    DEV versija ir viegli lasāma, ar komentāriem, gģe nado, un tiri-piri.

    Man domāt, ka laikā, ko Tu pavadi dzešot komentārus un atstarpes, tiek patērēts vairāk resursu, nekā tas jebkad prasītu no servera to kodu izpildot. To laiku labāk lietderīgi izmantot, izdomājot kā kādu sarežģītaku kveriju iekešot vai no tāda izvairīties, nevis dzenāt bitus. Bet ko nu es saprotu…

Tiek skatīts 1 ieraksts (no 32 kopumā)
  • Jums ir jāpieslēdzas sistēmai, lai varētu komentēt šo tēmu.
Jaunākais portālā