Mr.SergE Posted October 14, 2008 Report Share Posted October 14, 2008 (edited) Droši vien uzkritīšu dažam labam uz nerviem, bet tiešām vēlos tikai un vienīgi pārbaudīt savas domas gaitas pareizību. Tātad, man ir publisks teksta ievades lauks, kas ar capcha, atjautības uzdevumu, moderēšanu, jebko citu tiek pārbaudīts pret spam-botiem. Ar to tā kā tiksim galā. Tālāk šis ievades lauks ceļo uz datu patiesuma pārbaudi (lūk šis arī ir tas, ko vēlos zināt, vai daru pareizi un vai nav kaut kas vajadzīgs vēl vai arī kaut kas ir lieks): 0. Datus padodam ar POST metodi uz atsevišķu skripta lapu, no kuras džavaskripts vai header() ar redirektu pēc skripta izpildes pārsūta atpakaļ uz to lapu, kurā bija aizpildīta forma, pēc vajadzības pievienojot arī warning message no sērijas "Ieraksts saglabāts!", "Kur e-pasts, bļa?", utml. 1. Pārbauda, vai aizpildīti visi nepieciešamie lauki 2. Izmet ārā visus sūdus no teksta laukiem: //no php dokumentācijas komentāriem function html2txt($ievaditais){ $search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA ); $text = preg_replace($search, '', $ievaditais); return $text; } 3. Pārveido visas saites par strādājošām saitēm (gribu, lai ir atbalsts ne tikai http, https, mailto, bet arī callto un tamlīdzīgiem zvēriem): Daru pēc šī parauga: http://www.m-bread.com/lab/php/urls2linksComplex (varbūt kādam ir vienkāršāks/alternatīvāks variants?) 4. Pārveido garus linkus par īsākiem (vai kāds var piedāvāt labus variantus?) 5. Pārveido (sadala/noslēpj) debīliķu sarakstītās garās teksta rindas bez atstarpēm un/vai interpunkcijas (vai kāds var piedāvāt labus variantus? šobrīd izmantoju html iespēju overflow="hidden") 6. Pārveido rindas sākumu/beigas par <p></p> vai rindas beigas par <br/> vai jeb kā savādāk, kā nu nepieciešams, lai nav tikai pliks \r\n 7. Ieraksta rezultātu MySQL mysql_query("INSERT INTO kaka (id, ievaditais) VALUES ('', '$text')"); 8. Izvada pēc nepieciešamības datus no MySQL Pateikšos par jebkādiem komentāriem. Edited October 14, 2008 by Mr.SergE Link to comment Share on other sites More sharing options...
andrisp Posted October 14, 2008 Report Share Posted October 14, 2008 Par otro soli: Labāk iesaku izmantot kaut ko līdzīgu htmlpurify. 7. solī mysql_real_escape_string() neaizmirsi ? Vai tava forma atceras lietotāja ievadīto infu pēc atmešanas atpakaļ ? Link to comment Share on other sites More sharing options...
Zandis Murāns Posted October 14, 2008 Report Share Posted October 14, 2008 (edited) Es uzskatu, ka datubāzē vajag glabāt precīzi tādu tekstu, kādu lietotājs ir ievadījis (protams, rakstot kveriju, tie dati ir jāeskeipo, kā jau andrisp teica), taču pēctam, kad jāatrāda tie dati, jādara visas manipulācijas ar to tekstu. Vēl es uzskatu, ka pilnīgi nevajadzīga lieta ir stripot kaut kādus html tagus. Pa manam php tas būtu šitā: function html2txt($htmls) { return htmlspecialchars(nl2br($htmls)); } echo html2txt($no_datu_bazes); Edited October 14, 2008 by Zandis Murāns Link to comment Share on other sites More sharing options...
blackhalt Posted October 14, 2008 Report Share Posted October 14, 2008 Es uzskatu, ka datubāzē vajag glabāt jau apstrādātu tekstu :P Pie 1. trim(), lai nakceptētu pliku enter un tā. Pārbauda vai nav pārāk garš teksts (tipa Mērnieku Laiki 1.nodaļa, vai Vecā derība copy + paste). Arī visādus Vārds, E-pasts utml pārbauda pēc garuma. Ja ir parasīts URL, tad pārbauda vai tas vispār ir URL, ja E-pasts, tad vai tas vispār ir epasts. Pēdiņas uzreiz pārveido par "'",""" Pārbauda vai cilvēks neatkārtojas :), tipa vai postotais teksts nav 1:1 ar iepriekšējo, ko šis cilvēks ir rakstījis. Pārbauda vai cilvēks neposto jau kādu 50 tekstu pēc kārtas un vai tas nenotiek ik sekundi. Pārbauda vai cilvēka teksts nesastāv tikai no viena vārda: 'pinpispinpispinpispinpispinpispinpis' :) Un tos 'aaaaaaaaaaaaaaaaaaaa' x 100 arī cērt nost. Visur, kur var, cilvēku informē par to, ko viņš dara nelabi. Jā un šitote: mysql_real_escape_string Beigās ir podziņa 'Preview'(es tādu gribētu), kur cilvēkam tiek parādīts, kā tas postējamais gabals izskatīsies un ja grib, tad viņš to var palabot. Protams 'Preview' var arī neizmantot. Pārbauda... :) Link to comment Share on other sites More sharing options...
blackhalt Posted October 14, 2008 Report Share Posted October 14, 2008 Re, te arī labo manu tekstu: Pirmā pēdiņa ir: & #39; Link to comment Share on other sites More sharing options...
andrisp Posted October 14, 2008 Report Share Posted October 14, 2008 Par to apstrādi pirms vai pēc. Ir variants glabāt abus variantus. Apstrādāto rādīt, tad kad vajag vienkārši parādīt, bet neapstrādāto - tad kad vajag labot. Link to comment Share on other sites More sharing options...
Klez Posted October 14, 2008 Report Share Posted October 14, 2008 jo ja apstraadaats jau ir db tad ir jaataisa atpakalj uz neapstraadaatu (ja ir vajadziiba labot ) es arii esmu par neapstraadaata teksta glabaashun ieksh db. protams garuma validaacijas un tukshumus jau iznjem saakumaa Link to comment Share on other sites More sharing options...
Mr.SergE Posted October 14, 2008 Author Report Share Posted October 14, 2008 Par HTML Purifier (ja tas ir tas, ko andrisp domāja)—neiebraucu, kāpēc viņš būtu jāizmanto, jo man viņu mājaslapā testējot, kaut kā neradās uzticība projektam. Nesaprotu līdz galam, ko tas izdara un ko neizdara. Jā, par mysql_real_escape_string aizmirsu pieminēt, bet gribēju taujāt, vai jūs parasti izmantojat arī get_magic_quotes_gpc vai arī tikai noeskeipojat? Runājot par gariem tekstiem un bezjēdzīgi garām simbolu virknēm—vai kādam ir kāda loģiska metode, kā ar to cīnīties? Nu, piemēram, ka cilvēku ierobežo uz atsevišķa vārda garumu, kas to zina, ja nu kāds izdomās dezoksiribonukleīnskābi ierakstīt. Savukārt ar zinātniskajiem traktātiem—cik tad ļaut? Līdz 500 zīmēm? Līdz astoņām rindkopām? Tīri no pieredzes—kā šķiet, kas ir garš teksts/simbolu virkne. Es visu šo jautājumu jūru uzdodu, lai beidzot sakārtotu tekstu ievades skriptu, bet vēl joprojām nesaprotu, kāpēc man sanāk vesela bibliotēka ar faliem un funkciju grupām tikai, lai pārbaudītu ievadīto tekstu? Un jā, es uzskatu, ka datubāzēs ir jāglabā apstrādāts teksts, jo, ja lietotājs kaut kādus sūdus vāra, tad man nav nekādas nepieciešamības šos sūdus glabāt. Link to comment Share on other sites More sharing options...
blackhalt Posted October 14, 2008 Report Share Posted October 14, 2008 Nu tas ir no Tavas gribēšanas atkarīgs, ko un kā ;) Es liku wordwrap uz 70, bet jāierēķina arī, lai <br /> netiek sašķelts. Vārdi, epasti = 255 teksts = 5120 Atkārtojas vienāds vārds tekstā = 200 Bet es nezinu nekādu zinātnisko pētījumu cik tad būtu baigi labi. Link to comment Share on other sites More sharing options...
blackhalt Posted October 14, 2008 Report Share Posted October 14, 2008 (edited) Tur gan jāievēro kaut kāda loģiskā secība, lai `kaut kas 1` nenotiktu pirms `kaut kas 2` un neizbojātu `kaut kas 1` cēlos mērķus. Un & vienmēr kļūst par & Beigās Tev būs valīds XHTML ar visiem komentāriem ;) Un ja Tev ir magic_quotes_gpc = On, tad arī ar to jārēģinās, jo ja kāds gribēs kādu pēdiņu ievietot tekstā, tad tā tiks `sabojāta` pret \" Itogo, ja iepriekš visas pēdiņas būsi smuki nomainījis pret " un & #39; (tur ir arī backslash) , tad viss būs okidoki. Attiecīgi jāpadomā, kā tos Tavus spiežamos URL smuki iejūgt sistēmā. Edited October 14, 2008 by blackhalt Link to comment Share on other sites More sharing options...
Recommended Posts