Jump to content
php.lv forumi

Ievadītā text validēšana


Mr.SergE

Recommended Posts

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 by Mr.SergE
Link to comment
Share on other sites

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 by Zandis Murāns
Link to comment
Share on other sites

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

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

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

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

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 by blackhalt
Link to comment
Share on other sites

×
×
  • Create New...