User Tools

Site Tools


linuxbog:web:ssi-shellcgi-script
Linux - Friheden til egen webserver: Version 2.5.20040516 - 2020-12-31
forrige Kapitel 3. Server-Side Includes næste

3.3. Inkludering af uddata fra CGI-programmer og andre programmer

Uddata fra et CGI-program kan også inkluderes f.eks.

<!--#exec cgi="/cgi-bin/hoved.cgi" -->

Alt imellem <..> vil blive erstattet af de data som programmethoved.cgiudskriver. Hvis CGI-programmet udskriver en omdirigering af formen

Location:URL\r\n\r\n

indsættesURLsom et link istedet. Det følgende eksempel bruger et CGI-program til at generere <body bgcolor=“#farve”> , hvor farven afhænger af tiden.

<!--#exec cgi="/cgi-bin/colorbody.cgi" --> 
 <h1>Test</h1>
</body>

Og koden tilcolorbody.cgier et lille Perl-program

#!/usr/bin/perl

#find RRGGBB farve på basis af tiden
my $color=sprintf("%x", ( time*25 % 0x1000000 ));

print "Content-Type: text/html\r\n\r\n";

#udskriver <body ..> tag
print "<body bgcolor=\"#$color\">\n";

Programmet fungerer ved attimeer antallet af sekunder siden 1 jan. 1970. Dette ganges med 25 der er 'hastigheden' hvormed farven ændres og modulus 0x1000000 tages, det giver et resultat mellem 0x000000 og 0xffffff, dvs. alle mulige farver. Intensiteten af den blå komponent cykler med en periode på 10 sekunder, den grønne komponent med en periode på 43 minutter og den røde komponent varierer med en periode på omkring en uge.

Browseren modtager HTML-kode som:

<body bgcolor="#ff1adc78">
 <h1>Test</h1>
</body>

Reloades siden så vil baggrundfarven ændre sig fra gang til gang. NB. dette kunne gøres smartere med Javascript, men det kræver at browseren kan køre Javascript-programmer og at brugeren ikke har slået det fra.

Det er også muligt at udføre programmer direkte og inkludere deres output f.eks.

<!--#exec cmd="who" -->

Apache vil starte en shell og udføre who -programmet, der lister alle, der er logged ind på serveren.

Et mere avanceret eksempel er følgende:

<pre>
De sidste 50 sider du hentede på denne server var:
<!--#exec cmd="cat /var/log/httpd/access_log | grep ${REMOTE_ADDR} | tail -n50" -->
</pre>

Først udskrives Apache's log af alle filer den har afsendt. Dette filteres af grep der udskriver alle linjer der matcher IP addressen på den server der ønsker denne side, og tail -n50 udskriver de sidste 50 linjer. Dvs. de sidst 50 filer som den server hentede. Er access_log filen stor tager det dog en del tid at udføre.

Der er nogle sikkerhedaspekter i at give alle og enhver bruger på serveren lov til at bruge webserver-processerne til at udføre arbitrære kommandoer med arbitrære inddata. Med Options IncludesNOEXEC vil ovenstående #exec kommandoer ikke kunne udføres.


forrige hjem næste
Inkludering af tekst i et HTML-dokument op Inkludere datoer i HTML-sider
linuxbog/web/ssi-shellcgi-script.txt · Last modified: by 127.0.0.1

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki

Brug af AI : Al tekst kán være uddrag af AI genereret tekst og kan være fejlbehæftet.
AI kan lave fejl og det kan mennesker også, men al tekst er gennemgået af et menneske for fejl, og personlig bias kan være tilføjet.