Nein, hast Du nicht, haben schon viele gesagt, haben schon viele versucht, sind alle gescheitert.
Auszuliefernde Dateien
müssen unterhalb des für den WebServer konfigurierten Rootverzeichnisses liegen.
.. in der
Url wird schlicht als ungültig erkannt und verworfen.
Delphi-Quellcode:
// Im realen Leben natürlich konfigurierbar!
const
csRootverzeichnis = '
c:\HTTPServer\Root';
procedure TForm1.ServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
Stream : TFileStream;
Filename :
String;
begin
Filename := Format('
%s%s',[csRootverzeichnis,ARequestinfo.Document]);
if (Pos('
..',sFilename) = 0
then begin
if not FileExists(sFilename)
then Filename := Format('
%s\index.html',csRootverzeichnis]);
Stream := TFileStream.Create(sFilename, fmOpenRead
or fmShareDenyWrite);
// Hier muss man noch den ContentType abhängig vom Dateityp, setzen.
AResponseinfo.ContentType := '
text/html';
AResponseinfo.ContentStream := Stream;
AResponseinfo.ContentLength := Stream.Size;
end else begin
// Warum sollte man hier 'nem Hacker antworten?
// Wenn man 'ne Sperrliste für IPs (ARequestinfo.RemoteIP) implementiert hat, kommt die da rein.
// Die wird natürlich dann auch am Anfang dieser Prozedur abgefragt ;-)
end;
end;
Und ja: Einen simplen, anspruchslosen WebServer selbst zu bauen geht und ist einfach.
Den Bau eines Webservers für den professionellen Einsatz sollte man anderen überlassen.
Und wenn man 'nen Webserver selbst baut lernt man recht schnell, welche Fallstricke es in dem Umfeld gibt auf die geachtet werden muss.
Als Hobbyprogrammierer kann ich mir diesen Spass durchaus leisten.
Allerdings käme ich nie auf die Idee "so ein Dingen" für 'nen Kunden zu bauen und dann die ganze Welt darauf zugreifen zu lassen.