Předmět Autor Datum
Dá sa to. Ak je to vstup od používateľa, ktorému nemôžeš dôverovať, tak to treba ošetriť na strane s… poslední
los 09.08.2006 22:18
los

Dá sa to. Ak je to vstup od používateľa, ktorému nemôžeš dôverovať, tak to treba ošetriť na strane servera. Myslím, že najlepšie bude to prejsť pekne zľava doprava, pamätať si v zásobníku zoznam otvorených elementov a postupne pričítavať k nejakému počítadlu počet prejdených znakov. Keď počítadlo dosiahne maximálnu dĺžku, uzavrieš tagy, ktoré máš v zásobníku a skončíš. Keď prejdeš cez začiatočný tag, dáš ho do zásobníka a k počítadlu pričítaš aj počet znakov potrebných na jeho uzavretie. Keď prejdeš cez koncový tag, tak ho zo zásobníka odstrániš (musí sa rovnať tomu, čo je na vrchu zásobníka, v opačnom prípade ho z výsledného reťazca odstrániš).

Čiže napr. ak chceme skrátiť text <p>0123456789</p> na 10 znakov, tak by mal výsledok byť <p>012</p>. Dosiahnuť by sa to malo nejako takto:
1. prečíta sa začiatočný tag <p>, počítadlo sa zvýši o jeho dĺžku (3) plus miesto na jeho uzavretie (4), do zásobníka sa dá p; v počítadle teda bude 7.
2. prečíta sa text, z ktorého sa ale zoberú iba 3 znaky, pretože inak by sme prekročili limit; počítadlo dosiahne maximálnu dĺžku 10.
3. uzavrú sa tagy podľa zásobníka.

Text 012345<p>67890</p> sa skráti iba na 012345, pretože <p> a </p> by sa tam už nevošlo.

Predpokladám, že máš zoznam povolených značiek (môžu tam byť aj atribúty?), aby tam niekto nemohol vložiť element script. Ešte môžeš vytvoriť nejaké pravidlá, ako môžu tagy byť v sebe vnorené (aby sa nedalo dať ul do p a pod.). Keď prejdeš cez znak <, >, & alebo " a ten znak nebude tvoriť tag alebo entitu (na tie treba tiež myslieť), tak ho musíš zakódovať.

Snáď by to tak nejako mohlo fungovať.

Zpět do poradny Odpovědět na původní otázku Nahoru