TeXovani ciziho zdroje?

Petr Olsak petr at olsak.net
Fri Jul 4 10:13:07 CEST 2003


On Thu, 3 Jul 2003, Jan Kasprzak wrote:

> 	Dobry den,
>
> predstavte si, ze chcete napsat nejakou (treba webovou) sluzbu, ktera
> bude cast vstupu od uzivatele kompilovat TeXem. A ted je problem,
> jak osetrit, aby TeX na zaklade uzivatelova vstupu neudelal neco spatneho
> (\input nejakeho jinak pres web neviditelneho souboru a zpristupneni jeho
> obsahu uzivateli, \openout/\write nekam na disk, atd.).
>
> 	Mam dva dotazy:
>
> 1) ktera primitiva TeXu lze povazovat za nebezpecna (krome tech tri
> 	jmenovanych)
> 2) jak byste tohle resili? Jeste je tady jedna vec, ze uzivatel ten text
> 	zadava menekrat nez se pak TeXuje, takze by bylo dobre kontrolovat
> 	zadany vstup jiz pri vkladani, nikoliv az pri tisku. Navic pri finalnim
> 	TeXovani by bylo dobre mit jeste porad \input k dispozici.
> 	ani \openout \write asi uz nemusi byt.
>
> 	Zkusil jsem si navrhnout par reseni, ale po case jsem vzdycky prisel
> na neco, jak by se to asi dalo prolomit. Shanim tedy inspiraci.
>
> 	Zrejme zatim staci omezit se na format Plain.

Na zaklade znalosti TeXu co mam mohu zodpovedne prohlasit, ze
\let\openout=\undefined \let\openin=\undefined \let\input=\undefined
v plainu je pro tyto bezpecnostni pozadavky postacujici.

V LaTeXu to nepomuze, protoze tam je vyznam primitvu \input ukryt
v kontrolni sekvenci \@@input (nebo tak nejak).

Z dotazu neni jasne, zda chces funkcionalitu \input zachovat pro sve
vlastni potreby. Pokud ano, pak by mohlo stacit
\let\tajneslovoproinput=\input pred pouzitim \input. Domnivam se, ze
neexistuje moznost v TeXu zjistit deklarovane kontrolni sekvence (ledaze
se clovek muze podivat do binarniho formatu), tj. tajneslovoproinput je
utocnikem neodhalitelne. Samozrejme se predpoklada, ze utocnik nevi,
jakymi prikazy se jeho dokument dale zpracovavan na urovni vnejsiho
souboru (po \endinput). Kdyby to vedel, muze si zkusit trasovat vyznamy
tech maker, az se k \tajmenuslovuproinput dohrabe. Vyznamy maker muze
trasovat jednak do logu, a pokud nema pristup do logu, pak je muze
zobrazovat i do dvi pomoci \meaning !

Kdyby mel utocnik pristup do logu, musime zakazat mnohe \tracing...
prikazy.

Primitiv \write bych nezakazoval. Nastavi/li se na zacatku pozadovane
vystupni proudy do konkretnich souboru pomoci \openout, pak se zakaze
\openout, pak stale je mozne zapisovat pomoci \write.

Za nejnebezpecnejsi povazuji rozsireni web2c TeXu (nad standardni TeX),
ktere za jiste konfigurace umozni spustet prikazy systemu pomoci \write18.
V texmf/web2c/texmf.cnf je k tomu konfiguracni parametr shell_escape,
ktery musi byt nastaven na false.

>
> 	Diky,
>
> -Yenya
>
> --
> \ Jan "Yenya" Kasprzak <kas at fi.muni.cz>       http://www.fi.muni.cz/~kas/
> \\ PGP: finger kas at aisa.fi.muni.cz   0D99A7FB206605D7 8B35FCDE05B18A5E //
> \\\             Czech Linux Homepage:  http://www.linux.cz/              ///
> \\\\     If you hold a Unix shell to your ear, do you hear the C?       ////
>




More information about the csTeX mailing list