Azért javasoltam, hogy ne elavult könyvből tanulj, mert így rossz szokásokat szedsz fel, és később nehezen fogsz tőlük megszabadulni.
A -w kapcsolón, a kódba begyógyított HTML-darabokon, a open(IRAS, ">>$megjegyzes") stílusú fájlmegnyitáson és úgy általában a CGI-n nem divatból, jókedvében lépett túl a szakma, hanem jó okkal. Ilyen kis példánál szőrszálhasogatásnak tűnhet ezekbe belekötni, de a nagyobb, sok modulból álló kódoknál már igenis számítanak.
Talán valamiféle SQL injection-hoz hasonlóra gondoltál? Egyáltalán van ennek perl megfelelője?
Az nem perl-specifikus, hogy ha bármiféle ellenőrzés és szűrés nélkül elmented az user input, aztán úgy, ahogy van, beleírod egy HTML közepébe, akkor azzal szarvashibát vétesz.
Gondold meg, mi történik, ha valaki egy pornóképre mutató <image> taget másol be a text inputmeződbe? Vagy egy <script> taget, benne akármilyen ártalmas Javascript kóddal? A kulcsszó a xss vulnerability, ez annak a legotrombább, legprimitívebb változata.
A CGI-vel van még egy (amúgy sok...) gond: a param metódusa, amivel a paraméter értékét szeded ki a kérésből, lista kontextusban több értéket is visszaad, ha a paraméter többször is szerepelt a kérésben. Ez veszélyes, ha például egy hashet populálsz a paraméterekből, lásd https://metacpan.org/pod/distribution/CGI/lib/CGI.pod#Fetching-the-valu… . A te kódodban pont nincs jelentősége, de élesben előfordult már (pl. a Bugzillánál asszem).
Lokális fájlba írás pedig mehet a felmérés idejére létrehozott külön partícióra, ha az megtelne egy túlbuzgó kínai hacker miatt
Ez lenne a legutolsó, amiből bajod lenne. Mivel a programod minden egyes kérésnél újraolvassa a teljes fájlt (ráadásul soronként), már jóval azelőtt "hazavágná vele a teljes webszolgáltatást" a hacker, hogy betelne a tárhely.
De látod, az elavult forrásból felszedett magabiztos féltudás birtokában már vannak elképzeléseid, hogy az ablak réseit hogyan tömd be, miközben a pajtaajtó tágra van nyitva.
Mivel iskola vagyunk, a kollegák biztosan 1 időpontban (2 tanóra között) töltötték volna ki, és megnéztem volna, hogy ha egyszerre kattannak a küldés gombra, akkor a fájlírást puffereléssel oldja meg vagy "or die" lép életbe?
Miért kéne meghalnia? Több folyamat is megnyithatja ugyanazt a fájlt írásra, olvasásra egyaránt. Az, hogy ilyenkor mi kerül bele és mit fogsz kiolvasni belőle, esetleges.
A minimális példaprogramod csak egy alkalommal ír a fájl végére, így az igen kevéssé valószínű, hogy két kérésből származó írás összekeveredik, de az már simán lehet, hogy amíg az egyik folyamat olvassa a (z időközben nagyra nőtt) fájlt, addig egy másik beleír a végére.
Ezen a fájl lockolásával (perldoc -f flock) lehet segíteni, de akkor meg egyszerre egy kérést szolgál ki a programod, a többi addig blokkol, amíg az egy író nem végzett vele.
Nem ördögtől való ilyen helyi flat fájlt használni, csak érdemes tisztában lenni a limitációkkal.