Sayfayı Yazdır | Pencereyi Kapat

OS Fingerprinting ve Güvenliði

Nereden Yazdırıldığı: Bilginin Adresi
Kategori: Bilgisayar Güvenliði / Computer Security
Forum Adı: Güvenlik / Security Makaleleri
Forum Tanımlaması: Bilgisayarýnýzý Her Türlü Saldýrýya Karþý Korumak Ýçin Yapmanýz Gerekenler
URL: https://www.bilgineferi.com/forum/forum_posts.asp?TID=7959
Tarih: 19-05-2024 Saat 07:20


Konu: OS Fingerprinting ve Güvenliði
Mesajı Yazan: megabros
Konu: OS Fingerprinting ve Güvenliði
Mesaj Tarihi: 23-08-2009 Saat 23:53

Web sunucularýna uygulanan parmak izi araþtýrmasý ve güvenliðini masaya yatýrýyoruz.

Web Sunucusu/Uygulamasý Parmak Ýzi Araþtýrmasý

Web sunucusu/uygulamasý parmak izi araþtýrmasý, selefi olan TCP/IP parmak izi araþtýrmasýna (Bugünün en popüler tarama aracý olan Nmap gibi) benzer. Aralarýndaki fark web sunucusu/uygulamasý parmak izi araþtýrmasýnýn OSI modelinde Transport katmanýnýn yerine Uygulama katmanýna odaklanmýþ olmasýdýr. Web sunucusu/uygulamasý parmak izi araþtýrmasýnýn arkasýndaki teori aþaðýda sýralananlarý analiz ederek hedef yazýlýmý, konfigürasyonlarý ve muhtemelen network aðý yapýlarý/topolojisi hakkýnda doðru bir profil ortaya k****ktýr:

· HTTP Protokolünün implementasyon farklýlýklarý

· HTTP Cevap baþlýklarý

· Dosya uzantýlarý (.asp ve .jsp gibi)

· Cookiler (ASPSESSIONID)

· Hata sayfalarý (Kurulum ile beraber gelen)

· Dizin yapýlarý ve isimlendirmeleri (Windows/Unix)

· Web Geliþtirici ara yüzleri (Frontpage/WebPublisher)

· Web Yönetici ara yüzleri (iPlanet/Comanche)

· Ýþletim sistemi parmak izi araþtýrmasý uyuþmazlýklarý (Linux üzerinde IIS?),

Saldýrganlar için amaç hedef web olgusunun ayak izini çýkarmak ve mümkün olduðunca bilgiyi ortaya çýkarmaktýr. Bu bilgi ile, saldýrgan, hedefin kullandýðý yazýlýmýn versiyonunda/tipinde bulunan açýklýðý gerçekleyebilen doðru bir saldýrý senaryosu geliþtirebilir.

Bu bilgiyi doðru olarak ortaya çýkarmak çok önemlidir çünkü güvenlik açýklýklýklarýn büyük bölümü (ara bellek taþmasý, v.b.) belli yazýlým saðlayýcýlarýna ve versiyon numaralarýna büyük ölçüde baðlýdýr. Buna ek olarak, yazýlým versiyonlarýný doðru olarak belirlemek ve uygun açýklýk gerçeklemesini seçmek saldýrýnýn çýkaracaðý “kalabalýðý” azaltacaðý gibi etkisini arttýracaktýr. Bu nedenledir ki, kendisini açýkça tanýmlayan bir web sunucusu/uygulamasý belaya davetiye çýkarmaktadýr.

Aslýnda, HTTP RFC 2086 tam da bu meseleden söz eder ve web yöneticilerini HTTP cevabýndaki “Server:” baþlýðýnda gösterilen yazýlým versiyonunu gizlemeleri hakkýnda uyarýr:

“Not: Sunucunun yazýlým versiyonunu belli etmek bilinen açýklýklarý bulunan yazýlýmlarý saldýrýlara karþý daha fazla açýk kýlar. Sunucu saðlayýcýlarý bu alaný konfigüre edilebilir þekilde hazýrlamaya cesaretlendirilmektedir.”

Diðer bilgi ifþa kategorileri tarafýndan toplanýlan bilgiler ile hedef tarafýndan kullanýlýyor olan web sunucularýn/uygulamalarýn versiyon ve türünü çýkarmak mümkün olduðu gerçeði dolayýsýyla burda sadece günümüzün web parmak izi araþtýrma araçlarýnýn kullandýðý HTTP Protokolü implementasyonu analizine odaklanacaðýz.

Örnekler

Aþaðýdaki bütün örnekler hedef web sunucularýnýn ürettikleri ve yorumladýklarý HTTP isteklerinin analiz tekniklerini göstermektedir.

HTTP Protokolünün implementasyon farklýlýklarý

1. Leksikal – Leksikal karakteristik kategorileri kullanýlan kelimeler/tabirler, gösterilen HTTP Cevap Baþlýklarýndaki kullanýlan büyük/küçük harf ve noktalamalar arasýndaki farklýlýklarý içerir.

2. Cevap Kodu Mesajlarý – 404 hata kodunda, Apache “Not Found” mesajýný bildirirken, Microsoft IIS/5.0 “Object Not Found” mesajýný bildirir.

Apache 1.3.29 – 404

Microsoft-IIS/4.0 – 404

# telnet target1.com 80

Trying target1.com…

Connected to target1.com.

Escape character is ’^]’.

HEAD /non-existent-file.txt HTTP/1.0

HTTP/1.1 404 Not Found

Date: Mon, 07 Jun 2004 14:31:03 GMT

Server: Apache/1.3.29 (Unix) mod_perl/1.29

Connection: close

Content-Type: text/html; charset=iso-

8859-1

Connection closed by foreign host.

# telnet target2.com 80

Trying target2.com…

Connected to target2.com.

Escape character is ’^]’.

HEAD /non-existent-file.txt HTTP/1.0

HTTP/1.1 404 Object Not Found

Server: Microsoft-IIS/4.0

Date: Mon, 07 Jun 2004 14:41:22 GMT

Content-Length: 461

Content-Type: text/html

Connection closed by foreign host.

3. Baþlýklarda Kullanýlan Kelimeler – “Content-length” yerine geri dönülen “Content-Length” baþlýðý.

Netscape-Enterprise/6.0 – HEAD

Microsoft-IIS/4.0 – HEAD

# telnet target1.com 80

Trying target1.com…

Connected to target1.com.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Server: Netscape-Enterprise/6.0

Date: Mon, 07 Jun 2004 14:55:25 GMT

Content-length: 26248

Content-type: text/html

Accept-ranges: bytes

Connection closed by foreign host.

# telnet target2.com 80

Trying target2.com…

Connected to target2.com.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 404 Object Not Found

Server: Microsoft-IIS/4.0

Date: Mon, 07 Jun 2004 15:22:54 GMT

Content-Length: 461

Content-Type: text/html

Connection closed by foreign host.

4. Sözdizimi – HTTP RFC tarafýndan, bütün web haberleþmelerinde haberleþen partilerin birbirlerini anlamalarý için önceden belirlenmiþ yapýlar ve oluþumlarýn kullanýlmasý zorunlu tutulur. Yine de HTTP Cevap baþlýklarýnýn sýrasýnda ve formatýnda farklýlýklar vardýr.

5. Baþlýk Sýralamasý – Apache sunucularý sürekli olarak “Date” baþlýðýný “Server” baþlýðýndan önce yerleþtirirken Microsoft-IIS bu baþlýklarý ters sýrada yerleþtirir.

Apache 1.3.29- HEAD

Microsoft-IIS/4.0 – HEAD

# telnet target1.com 80

Trying target1.com…

Connected to target1.com.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Date: Mon, 07 Jun 2004 15:21:24 GMT

Server: Apache/1.3.29 (Unix) mod_perl/1.29

Content-Location: index.html.en

Vary: negotiate,accept-language,accept-charset

TCN: choice

Last-Modified: Fri, 04 May 2001 00:00:38 GMT

ETag: “4de14-5b0-3af1f126;40a4ed5d”

Accept-Ranges: bytes

Content-Length: 1456

Connection: close

Content-Type: text/html

Content-Language: en

Expires: Mon, 07 Jun 2004 15:21:24 GMT

Connection closed by foreign host.

# telnet target2.com 80

Trying target2.com…

Connected to target2.com.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 404 Object Not Found

Server: Microsoft-IIS/4.0

Date: Mon, 07 Jun 2004 15:22:54 GMT

Content-Length: 461

Content-Type: text/html

Connection closed by foreign host.

6. List metodu Sýralamasý – Bir HTTP isteðinde OPTIONS metodu yollandýðýnda, istenilen URL için izin verilen metodlar “Allow” baþlýðý içinde dönülür. Apache sadece “Allow” baþlýðýný dönerken, IIS ayrýca “Public” baþlýðýný da içerir.

Apache 1.3.29- OPTIONS

Microsoft-IIS/5.0 – OPTIONS

# telnet target1.com 80

Trying target1.com…

Connected to target1.com.

Escape character is ’^]’.

OPTIONS * HTTP/1.0

HTTP/1.1 200 OK

Date: Mon, 07 Jun 2004 16:21:58 GMT

Server: Apache/1.3.29 (Unix) mod_perl/1.29

Content-Length: 0

Allow: GET, HEAD, OPTIONS, TRACE

Connection: close

Connection closed by foreign host.

# telnet target2.com 80

Trying target2.com…

Connected to target2.com.

Escape character is ’^]’.

OPTIONS * HTTP/1.0

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Date: Mon, 7 Jun 2004 12:21:38 GMT

Content-Length: 0

Accept-Ranges: bytes

DASL: <DAV:sql>

DAV: 1, 2

Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL,

PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH

Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL,

PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH

Cache-Control: private

Connection closed by foreign host.

7. Semantic – HTTP cevabýnda dönülen kelimeler ve ibarelerin yaný sýra, doðru ve yanlýþ oluþturulmuþ isteklerin yorumlarýnda belirgin farklýlýklar vardýr.

8. Belli baþlýklarýn bulunmasý – Bir sunucu, cevabýnda istediði baþlýðý kullanabilir. Bazý baþlýklar spesifikasyon tarafýndan zorunlu tutulmuþlarsa da, bir çok baþlýk (mesela ETag) opsiyoneldir. Aþaðýdaki örneklerde, Apache sunucularý cevap baþlýklarýnda IIS tarafýndan kullanýlmayan þu ilave kayýtlarý içerir; ETag, Vary ve Expires.

Apache 1.3.29- HEAD

Microsoft-IIS/4.0 – HEAD

# telnet target1.com 80

Trying target1.com…

Connected to target1.com.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Date: Mon, 07 Jun 2004 15:21:24 GMT

Server: Apache/1.3.29 (Unix) mod_perl/1.29

Content-Location: index.html.en

Vary: negotiate,accept-language,accept-charset

TCN: choice

Last-Modified: Fri, 04 May 2001 00:00:38 GMT

ETag: “4de14-5b0-3af1f126;40a4ed5d”

Accept-Ranges: bytes

Content-Length: 1456

Connection: close

Content-Type: text/html

Content-Language: en

Expires: Mon, 07 Jun 2004 15:21:24 GMT

Connection closed by foreign host.

# telnet target2.com 80

Trying target2.com…

Connected to target2.com.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 404 Object Not Found

Server: Microsoft-IIS/4.0

Date: Mon, 07 Jun 2004 15:22:54 GMT

Content-Length: 461

Content-Type: text/html

Connection closed by foreign host.

9. Normal olmayan Cevap Baþlýklarý – Ayný istekler hedef web sunucularýna gönderilse de, yorumlar farklý olabilir ve bu yüzden deðiþik cevap kodlarý üretilebilir. Bu anlamsal (semantik) farklýlýða en iyi örnek Whisker tarayýcý aracýnýn kullandýðý “Light FingerPrinting” kontrolüdür. Whisker 2.1’in main.test dosyasýndan alýnan aþaðýdaki Perl kodu bölümü, hedef sunucunun Apache olup olmadýðýný anlamak için banner’lerinde görülen bilgilerden baðýmsýz olarak iki test koþar. Ýlk istek “GET //” isteðidir ve eðer cevap HTTP durum kodu 200 ise, ikinci istek yollanýr. Ýkinci istek URL kodlanmýþ ve “GET //” olarak çevrilen “GET /%2f”’dir. Bu sefer Apache sunucusu, 404 – Not Found hatasý döner. Diðer web sunucularý (IIS) bu tür istekler için ayný durum kodunu (404) dönmez.

# now do some light fingerprinting…

– CUT –

my $Aflag=0;

$req{whisker}->{uri}=’//’;

if(!_do_request(\\\\\\\\\\\\\\\\\\%req,\\\\\\\\\\\\\\\\\\%G_RESP)){

_d_response(\\\\\\\\\\\\\\\\\\%G_RESP);

if($G_RESP{whisker}->{code}==200){

$req{whisker}->{uri}=’/%2f’;

if(!_do_request(\\\\\\\\\\\\\\\\\\%req,\\\\\\\\\\\\\\\\\\%G_RESP)){

_d_response(\\\\\\\\\\\\\\\\\\%G_RESP);

$Aflag++ if($G_RESP{whisker}->{code}==404);

}       }       }

m_re_banner(’Apache’,$Aflag);

Hedef siteye karþý Whisker koþulduðunda, ön testler ýþýðýnda web sunucusunun Apache sunucusu olduðu rapor edilir. Aþaðýdaki örnek Whisker raporundan bir bölümdür;

———————————————————————–

Title: Server banner

Id: 100

Severity: Informational

The server returned the following banner:

Microsoft-IIS/4.0

———————————————————————–

Title: Alternate server type

Id: 103

Severity: Informational

Testing has identified the server might be an ’Apache’ server. This Change could be due to the server not correctly identifying itself (the Admins changed the banner).  Tests will now check for this server type as well as the previously identified server types.

———————————————————————–

Bu rapor saldýrgana, sadece sunucu yöneticilerinin web bannerlarýný deðiþtirecek kadar becerikli olduklarýný göstermez ayný zamanda Whisker raporun doðruluðunu güçlendirebilecek diðer Apache testlerini de taramasýna ekleyecektir.

Çözümler

Web sunucunuz tarafýndan saðlanan tanýmlayýcý bütün verileri kaldýrmak mümkün deðildir. Gerçek þudur ki, kararlý bir saldýrý web sunucu yazýlýmýnýzý tanýmlayabilecektir. Amacýnýz keþif barýný olabildiðince yukarýya çekerek saldýrganýn güvenlik tehlike alarmlarýný tetikleyecek kadar fazla uðraþmasýný saðlamak olmalýdýr. Aþaðýdaki adýmlar bu iþ için yardýmcý olacaktýr. Öneriler uygulanmasý kolaydan zora doðu sýralanmýþlardýr.

1. Sunucu Banner Bilgisinin Deðiþtirilmesi

Web sunucusunun cevap baþlýklarýndaki “Server” alaný tarafýndan gösterilen bilgiyi deðiþtirmek (aldatma amaçlý) mümkündür. HTTP Server alanýný deðiþtirmek ile kazanýlacak güvenlik hakkýnda web güvenlik çevrelerinde bir çok tartýþma olmuþtur. Sadece banner bilgisinin deðiþtirilmesi ve yazýlým versiyonunu gizleyici diðer önleyici faktörlerin uygulanmamasý keþfi düzenleyen gerçek insanlara karþý etkili olmamakla beraber, otomatikleþtirilmiþ WORM (solucan) programlarýna karþý yardýmcý olur. Çok miktarda sistemi enfekte etmek için kullanýlan solucanlarýn gittikçe artan popülerliði nedeniyle web sunucularýn bu þekilde korunmasý hayati önem taþýr. Bu adým organizasyonlara yama üretilme süresinde yeni çýkacak ve banner bilgisine göre hareket eden solucanlara karþý zaman kazandýrýr.

· Apache Sunucularý – Modsecurity’nin Server banner bilgisini Apache kodunun derlemeden önce deðiþtirilmesi yerine httpd.conf dosyasýný edit?? ederek deðiþtirmesini saðlayan SecServerSignature ayarý vardýr.

· IIS Sunucularý – IISLockDown ve URLScan araçlarýný kurarak, istemcilere dönen banner bilgisini deðiþtirebilirsiniz.

2. Baþlýklardaki Bilgi Detayýnýn Minimize Edilmesi

Cevap baþlýklarýnda dönülen bilgi miktarýný kýsýtlayýn. Mesela, Apache ServerTokens direktifini kullanarak Server banner alanýndaki bilginin detaylarýnýn kontrol edilmesini saðlar:

ServerTokens Prod[uctOnly]

Server sends (e.g.): Server: Apache

ServerTokens Min[imal]

Server sends (e.g.): Server: Apache/1.3.0

ServerTokens OS

Server sends (e.g.): Server: Apache/1.3.0 (Unix)

ServerTokens Full (or not specified)

Server sends (e.g.): Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2

Baþlýklarý minimize ederek, ek olarak kurulmuþ Apache modülleri gibi bilgileri gizleyebilirsiniz.

3. Sahte Baþlýklar Oluþturun

Web sunucu parmak izi araþtýrmasýný engelleyici/þaþýrtýcý alternatif tekniklerden bir tanesi sahte bir web topolojisi oluþturmaktýr. Saldýrganlar genellikle banner elde etme tekniði oturumlarýný Parmak Ýzi araþtýrmasý iþinin bir parçasý olarak kullanýrlar. Parmak Ýzi araþtýrmasýnda saldýrgan hedefin genel yapýsýný tanýmlamaya çalýþýr.  Ýlave olarak eklenen sahte baþlýklar ile karmaþýk bir web yapýsý simule edilebilir (Mesela bir DMZ). Ek baþlýklar eklenerek sahte bir geri vekilin (reverse proxy) olduðu simule edilebilir.

Bu iþi baþarmak için Apache sunucularýnda httpd.conf dosyasýna aþaðýdaki kayýtlar eklenebilir;

_ Header set Via “1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6)”

_ ErrorHeader set Via “1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6)”

_ Header set X-Cache “MISS from www.nonexistenthost.com”

_ ErrorHeader set X-Cache “MISS from http://www.nonexistenthost.com/ - www.nonexistenthost.com

Bu kayýtlar aþaðýda gösterildiði gibi “Via” ve “X-Cache” ibarelerini bütün HTTP cevap baþlýklarýna ekler:

# telnet localhost 80

Trying 127.0.0.1…

Connected to localhost.

Escape character is ’^]’.

HEAD / HTTP/1.0

HTTP/1.1 200 OK

Server: Microsoft-IIS/4.0

Date: Sun, 30 Mar 2003 21:59:46 GMT

Content-Location: index.html.en

Vary: negotiate,accept-language,accept-charset

TCN: choice

Via: 1.1 squid.proxy.companyx.com (Squid/2.4.STABLE6)

X-Cache: MISS from www.nonexistenthost.com

Content-Length: 2673

Connection: close

Bu durum sanki Squid Proxy sunucusu kullandýðýmýzý ve web verilerini olmayan bir sunucudan sunduðumuzu gösterir. Bu durum saldýrganý ya Apache sunucumuza (tabi ki baþarýsýz olacak) Squid saldýrýlarýný uygulamaya ya da olmayan ve X-Cache baþlýðýnda belirtilen bileþene saldýrý yapmaya sevk eder.

4. Üçüncü Parti Web Güvenlik Araçlarýný Kurulumu

Modsecurity veya ServerMask gibi ek üçüncü parti web güvenlik araçlarýný kurarak HTTPrint gibi günümüz web sunucu parmak izi araþtýrma araçlarýný þaþýrtmak veya tamamen egale etmek mümkündür. Yukarýdaki örnek bölümünde anlatýldýðý gibi bu tür araçlar hedef web sunucularýný bir çok isteðe boðacak ve belli cevaplar üretmeye zorlayacaklardýr. Aþaðýda HTTPrint tarafýndan üretilen bazý anormal istekler bulunmaktadýr:

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “JUNKMETHOD / HTTP/1.0″ 501

344 “-” “-”

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / JUNK/1.0″ 400 381 “-”

“-”

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “get / HTTP/1.0″ 501 330 “-”

“-”

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / HTTP/0.8″ 200 1456 “-”

“-”

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / HTTP/1.2″ 200 1456 “-”

“-”

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET / HTTP/3.0″ 200 1456 “-”

“-”

192.168.139.101 – - [08/Jun/2004:11:21:40 -0400] “GET /../../ HTTP/1.0″ 400 344

“-” “-”

Eðer Apache sunucularý için ModSecurity gibi bir araç implement etmek istersek bu anormal istekler nedeniyle tetiklenecek HTTP RFC uyumlu filtreler üretebiliriz. Ýþte kullanýlabilecek ModSecurity httpd.conf kayýtlarý:

# This will return a 403 – Forbidden Status Code for all Mod_Security actions

SecFilterDefaultAction “deny,log,status:403″

# This will deny directory traversals

SecFilter “\\\\\\\\\\\\\\\\\\.\\\\\\\\\\\\\\\\\\./”

# This entry forces compliance of the request method.  Any requests that do NOT

# start with either GET|HEAD|POST will be denied.  This will catch/trigger on

# junk methods.

SecFilterSelective THE_REQUEST “!^(GET|HEAD|POST)”

# This entry will force HTTP compliance to the end portion of the request.  If

# the request does NOT end with a valid HTTP version, then it will be denied.

SecFilterSelective THE_REQUEST “!HTTP\\\\\\\\\\\\\\\\\\/(0\\\\\\\\\\\\\\\\\\.9|1\\\\\\\\\\\\\\\\\\.0|1\\\\\\\\\\\\\\\\\\.1)$”

5. Kaynak Kodu Deðiþtirme

Bu parmak izi deðiþtirme önlemlerinden en zor fakat en etkili olaný budur. Bu iþte riskin ödüle oraný programlama becerinizin seviyesine ve web yapýnýza göre büyük ölçüde deðiþebilir. Genel olarak konuþursak, bu iþi web sunucunuzun kaynak kodunu derlemeden önce veya makina kodunu bir editör yardýmý ile direk olarak deðiþtirerek yapabilirsiniz. Apache gibi açýk kaynak kodlu web sunucularý için bu iþ daha kolaydýr çünkü kaynak koduna eriþiminiz vardýr.

Baþlýk Sýralamasý – Aþaðýdaki Apache 1.3.29 sunucusu için DATE/SERVER sýralamasýný düzeltecek ve IIS OPTIONS çýktý bilgisini taklit edecek bir yama kodudur. Bu yama /apache_1.3.29/src/main dizini içerisindeki http_protocol.c dosyasýný yeniler. OPTIONS bölümü normal olarak IIS cevap alanlarý ile iliþkilendirilen baþlýklarýn dönülmelerini saðlar. Bu baþlýklar Public, DASL, DAV ve Cache-Control’ü kapsar.

— http_protocol.c.orig        Mon Apr 26 02:11:58 2004

+++ http_protocol.c     Mon Apr 26 02:43:31 2004

@@ -1597,9 +1597,6 @@

/* output the HTTP/1.x Status-Line */

ap_rvputs(r, protocol, ” “, r->status_line, CRLF, NULL);

-    /* output the date header */

-    ap_send_header_field(r, “Date”, ap_gm_timestr_822(r->pool, r->request_time));

-

/* keep the set-by-proxy server header, otherwise

* generate a new server header */

if (r->proxyreq) {

@@ -1612,6 +1609,9 @@

ap_send_header_field(r, “Server”, ap_get_server_version());

}

+    /* output the date header */

+    ap_send_header_field(r, “Date”, ap_gm_timestr_822(r->pool, r->request_time));

+

/* unset so we don’t send them again */

ap_table_unset(r->headers_out, “Date”);        /* Avoid bogosity */

ap_table_unset(r->headers_out, “Server”);

@@ -1716,7 +1716,9 @@

ap_basic_http_header(r);

ap_table_setn(r->headers_out, “Content-Length”, “0″);

+    ap_table_setn(r->headers_out, “Public”, “OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH”);

ap_table_setn(r->headers_out, “Allow”, make_allow(r));

+    ap_table_setn(r->headers_out, “Cache-Control”, “private”);

ap_set_keepalive(r);

ap_table_do((int (*) (void *, const char *, const char *))

ap_send_header_field,

Saygýlar..



Sayfayı Yazdır | Pencereyi Kapat