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.
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.
_________________ #IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
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 http:// ?
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.
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
_________________ #IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
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
_________________ #IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
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...
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.
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.
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 \,
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.
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.
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... =)
_________________ Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
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.
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 <PHP> html <PHP> 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
_________________ #IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
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...
Garsh teksts ir jaaliek paragraafos <p> nevis visu laiku jaasplito ar <br>. btw <br> nevis <br> (ja vien neesam oldskuul un dazhkaart gribam parseeties)
un tas dev un production kods. Prieksh klienta puses jaa, bet ne jau serera pusee...
EDIT:
izraadaas forums nonjem sleshus. Kaadeelj te nekas normaali nestraadaa?
kāpēc vispār jāpārbauda ievades dati, paskaidrojiet, lūdzu?
kāds programmētājs veic eval() tam tekstam, ko lietotājs ievada? kāds programmētājs izvadīs to tekstu bez htmlspecialchars(), vai? O_O
kāds tiešām ļaus jūzerim prasīt ?getfile.php?file=../../../../etc/passwd ? It`s so 90-ties .. jū nou
Nu nē - ja ir faili, tad jūzerim dot pieeju tikai caur getfile.php?file=INTEGER. Un viss - ja kāds nesaprot ideju, tad palasiet par DB normālformām, par ko wannabe php koderi laikam pat nenojauš.
Normālā vidē intval(), trim(), mysql_real_escape_string(), stripslashes() un htmlspecialchars() ir pietiekami, atkarībā no situācijas.
Vienkārši - teksts ir teksts, un ja kāds postē sviestu, tad priekš tā ir spamfiltrs un admins, kas visādus "QPE5Di Qmnsq pmnx pwibxed ejlmz ywcfrg dtcunwo khtnfmr." tipa tekstus vienkārši izdzēš.
Starp citu, es nekādi nesaprotu tos cilvēkus, kas HTML glabā datubāzē. Izņemot, ja tas ir speciāli saformatēts HTML teksts, ko saģenerējis foruma admins iekš fckeditora vai līdzīga rīka. tāpēc $str = str_replace('\r\n', '<br>', $str); nav jābūt pie ievades. Tam ir jābūt pie izvades - ja bez bbkodiem un tas nav admina gatavots richtext formatējums, tad echo nl2br(htmlspecialchars($txt));
Principā neliekas normāla doma kaut ko jūzeriem ļaut vadīt iekšā uz savu galvu un pēc tam drūmi pārbaudīt un validēt - nafig. Neļaut neko, tikai tekstu, to ar bbcode noformējot.
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...
Tāpēc jau PRODUCTION versija saucās tā, ka to uzmeiko tikai pāris reizes visā lifecycle; kad viss pārējais ir izdarīts. Kas attiecas uz minēto kveriju optimizēšanu, tev pilnīga taisnība. Taču ja reiz runa iesākās par iekavām un tiri piri, tad es iespēru savus divus eiro centus...
TavaMaate: ja Tu uztvēri manu komentāru kā uzbraucienu, tad Tu vienkārši to neesi sapratis.
Piedod, lūdzu, par komentāriem un dziļāku problēmas analīzi - turpini vien izglītot jauno koderu paaudzi. Pēdējo 5 gadu laikā, kopš veidoju nopietnas vebiskas un ne-vebiskas aplikācijas, esmu gana atskatījies wannabe php koderu brīnumus, kur uzpeld iepriekšminētās principiālās pieejas problēmas. Kuras nevajag labot ar vorkaraundiem - IMO cilvēkiem vajag pašiem pārslimot savas "bērnu slimības" (index.php fails kā visa aplikācija, utf8_decode un latin1_swedish_ci miksēšana, spageti kods un megaūberiecienītie globālo mainīgo lietošana kodā vietās, kur to toč nekad nevajag, failu pieeja ar minēto "getfile.php?file=glāžšķūņu.doc", normālformu ignorēšana, intval() funkcijas nezināšana, DATETIME lietošana taimstampu vietā, brutāla jūzera norādīto failu inklūdošana, utt utjpr), nevis radīt ilūziju "izpildīšu 1 funkciju, un likšu lapā banneri '100% kruc'". Cheers ;)
P.S - ja vēlies all-in-one risinājumu, tad iesaki cilvēkiem gan iekš $_GET, gan iekš $_POST repleisot "--" un "drop table" un "drop database" un "load data infile" ar tukšumiem. lai funkcija domātu kodera vietā.
root : 20 Augusts 2010 11:42:31
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('\r\n', '<br>', $str);
$str = str_replace('\\', "\", $str);
$str = str_replace('|', 'I', $str);
$str = str_replace('||', 'I', $str);
$str = str_replace('/\\\$/', '$', $str);
$str = str_replace('[l]http://', '[l]', $str);
$str = str_replace('[l] http://', '[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.
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
Mad182 : 20 Augusts 2010 14:02:00
_________________
100% Microsoft free
root : 20 Augusts 2010 14:44:34
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
daGrevis : 20 Augusts 2010 14:59:50
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
root : 20 Augusts 2010 15:08:59
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
rATRIJS : 20 Augusts 2010 15:15:56
_________________
Apple un Biibele FTW!!!
Crow : 20 Augusts 2010 15:31:14
daGrevis : 20 Augusts 2010 16:43:11
Tā varētu būt. bet tas ir tikai piemērs. xD
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
root : 20 Augusts 2010 18:19:34
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
daGrevis : 20 Augusts 2010 21:09:23
Hmm, nu nezinu vai '()', t.i. divi baiti, mainīs pasauli, bet ok, ņemšu vērā. =)
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
root : 20 Augusts 2010 21:18:48
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
Mad182 : 20 Augusts 2010 21:26:53
_________________
100% Microsoft free
foxsk8 : 20 Augusts 2010 21:51:25
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 \,
$str = str_replace('/', '', $str);
$str = str_replace('\\', '', $str);
echo stripslashes($str);
_________________
https://twitter.com/foxsk8
https://twitter.com/notepadlv
https://twitter.com/styleweblv
Profesionāla mājas lapu izstrāde | Styleweb.lv
Crow : 20 Augusts 2010 21:54:06
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.
daGrevis : 20 Augusts 2010 22:18:22
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
Mad182 : 20 Augusts 2010 22:29:23
_________________
100% Microsoft free
daGrevis : 20 Augusts 2010 22:37:22
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
Crow : 20 Augusts 2010 22:46:37
root : 20 Augusts 2010 23:16:44
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
Mad182 : 21 Augusts 2010 7:40:28
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...
_________________
100% Microsoft free
Aldis : 21 Augusts 2010 10:41:23
_________________
daGrevis : 21 Augusts 2010 11:57:07
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
rATRIJS : 21 Augusts 2010 12:52:41
_________________
Apple un Biibele FTW!!!
Mad182 : 21 Augusts 2010 13:13:14
_________________
100% Microsoft free
usver : 21 Augusts 2010 13:24:46
Crow : 21 Augusts 2010 15:22:22
Tāpēc jau PRODUCTION versija saucās tā, ka to uzmeiko tikai pāris reizes visā lifecycle; kad viss pārējais ir izdarīts. Kas attiecas uz minēto kveriju optimizēšanu, tev pilnīga taisnība. Taču ja reiz runa iesākās par iekavām un tiri piri, tad es iespēru savus divus eiro centus...
foxsk8 : 21 Augusts 2010 15:57:57
<><>
Šādi jau viss šancē
_________________
https://twitter.com/foxsk8
https://twitter.com/notepadlv
https://twitter.com/styleweblv
Profesionāla mājas lapu izstrāde | Styleweb.lv
root : 21 Augusts 2010 23:34:16
_________________
#IP Over Avian Carriers
#Every language has an optimization operator. In C++ that operator is ‘//’
Mad182 : 22 Augusts 2010 10:14:50
_________________
100% Microsoft free
usver : 22 Augusts 2010 10:52:44
daGrevis : 22 Augusts 2010 23:18:26
_________________
Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/
http://twitter.com/#!/daGrevis
http://last.fm/user/daGrevis
http://ask.fm/daGrevis
http://dagrevis.lv/
Crow : 22 Augusts 2010 23:26:08
Grāvi, krekeri tev un kvakss no manis! Atgādināji man, ka sākot no 5.2 eksistē tak šitas brīnums!