Distorting proxy'ler, HTTP istek ve yanıt başlıklarını değiştirerek istemcinin özgün bilgilerini hedef sunucuya iletmeden ya da istemciye geri döndürmeden önce gizler veya tahrif eder.
Distorting proxy'leri anlamak
Bir distorting proxy, hem istemciden sunucuya giden isteklerde hem de sunucudan istemciye dönen yanıtlarda HTTP başlıklarını etkin biçimde değiştirerek, ekleyerek veya kaldırarak çalışır. İstekleri değiştirmeden ileten transparent proxy'lerden veya yalnızca X-Forwarded-For başlığını kaldırıp yine de kendini tanıtan anonymous proxy'lerden farklı olarak, distorting proxy'ler istemci veya proxy bilgilerini kasıtlı olarak yanlış gösterir. Bu manipülasyonun temel amacı anonimliği artırmak, içerik kısıtlamalarını aşmak veya belirli uygulama davranışlarını mümkün kılmaktır.
Proxy türlerinin karşılaştırması
| Proxy türü | Başlık değişikliği | X-Forwarded-For |
Via |
Anonimlik düzeyi |
|---|---|---|---|---|
| Transparent | Yok (özgün başlıkları aynen iletir) | Özgün IP | Özgün IP | Yok |
| Anonymous | X-Forwarded-For başlığını kaldırır, Via ekler (proxy'yi tanıtır) |
Kaldırılır | Proxy IP'si (tanıtır) | Düşük |
| Distorting | Birden çok başlığı değiştirir, değerleri sahteleyebilir | Sahte/Kaldırılmış | Sahte/Kaldırılmış/Değiştirilmiş | Yüksek (etkiliyse) |
| Elite | Tanımlayıcı tüm başlıkları kaldırır, kendini proxy olarak tanıtmaz | Kaldırılır | Kaldırılır | En yüksek |
Başlık manipülasyonunun amacı
Distorting proxy'lerin başlık manipülasyonu birkaç teknik hedefe hizmet eder:
- Artırılmış anonimlik: İstemcinin özgün IP adresini, işletim sistemini, tarayıcısını ve diğer tanımlayıcı özelliklerini gizlemek.
- Kısıtlamaları aşmak: Coğrafi içerik engellerini, IP tabanlı erişim denetimlerini veya user-agent'a özgü içerik sunumunu atlatmak.
- Web scraping ve otomasyon: Anti-bot sistemlerinin tespitinden ve hız sınırlamasından kaçınmak için çeşitli kullanıcı ortamlarını taklit etmek.
- Güvenlik: Hassas olabilecek başlıkları kaldırmak veya belirli uygulama mantığı için güvenlikle ilgili başlıklar eklemek.
- Test ve geliştirme: Uygulama testleri için farklı istemci yapılandırmalarını veya ağ koşullarını simüle etmek.
Sık manipüle edilen başlıklar
Distorting proxy'ler hedeflerine ulaşmak için belirli HTTP başlıklarını hedef alır.
X-Forwarded-For
Bu başlık, bir HTTP proxy'si veya yük dengeleyici üzerinden web sunucusuna bağlanan istemcinin kaynak IP adresini belirtir.
* Varsayılan davranış: Proxy'ler genellikle istemcinin IP'sini bu başlığa ekler.
* Tahrifat: Bir distorting proxy bu başlığı tamamen kaldırabilir, kendi IP adresiyle değiştirebilir veya uydurma bir IP adresi yerleştirebilir.
* Sonuç: Bu başlığın kaldırılması veya sahtelenmesi, hedef sunucunun istemcinin gerçek IP'sini kaydetmesini engelleyerek anonimliği artırır.
User-Agent
User-Agent başlığı, ağ protokolü taraflarının istekte bulunan istemcinin uygulama türünü, işletim sistemini, yazılım sağlayıcısını veya yazılım sürümünü tanımlamasına olanak veren karakteristik bir dize içerir.
* Varsayılan davranış: Tarayıcı kendi User-Agent dizesini gönderir.
* Tahrifat: Proxy'ler bu başlığı değiştirerek farklı bir tarayıcı, işletim sistemi veya cihaz gibi görünebilir.
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36
Şu şekilde değiştirilebilir:
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1
* Sonuç: Tarayıcıya özgü içerik filtrelerini aşmak, mobil için optimize edilmiş içeriğe erişmek veya belirli user agent'ları beyaz listeye alan bot tespit mekanizmalarından kaçmak.
Referer
Referer başlığı, istenen kaynağa bağlantı veren sayfanın URL'sini içerir.
* Varsayılan davranış: Tarayıcı bir önceki sayfanın URL'sini gönderir.
* Tahrifat: Proxy'ler yönlendirme takibini önlemek için bu başlığı kaldırabilir veya hedef sunucuyu isteğin kaynağı konusunda yanıltmak için farklı bir URL ile değiştirebilir.
* Sonuç: Sitelerin trafiğin kaynağını bilmesini engelleyerek gizliliği artırmak veya analitiği manipüle etmek için trafik kaynaklarını sahtelemek.
Accept-Language
Bu başlık, istemcinin tercih ettiği doğal dili ve yerel ayarı belirtir.
* Varsayılan davranış: Tarayıcı, kullanıcı ayarlarına göre tercih edilen dilleri gönderir.
* Tahrifat: Proxy'ler bu başlığı değiştirerek farklı bir coğrafi bölgeden veya farklı dil tercihlerine sahip bir istemciyi taklit edebilir.
Accept-Language: en-US,en;q=0.9,es;q=0.8
Şu şekilde değiştirilebilir:
Accept-Language: fr-FR,fr;q=0.9,en;q=0.8
* Sonuç: Dil ayarlarına dayalı coğrafi kısıtlamaları aşmak veya içerik yerelleştirmesini test etmek.
Via
Via başlığı, isteğin hangi protokol ve alıcı (host ve port) üzerinden alındığını göstermek için proxy'ler tarafından eklenir.
* Varsayılan davranış: Proxy'ler kendi tanımlayıcılarını ekler.
* Tahrifat: Bir distorting proxy, ara proxy'lerin varlığını gizlemek veya kendi kimliğini yanlış göstermek için bu başlığı kaldırabilir ya da içeriğini değiştirebilir.
* Sonuç: Proxy zincirini daha da gizlemek ve anonimliği artırmak.
Proxy-Connection / Connection
Bu başlıklar istemci, proxy ve sunucu arasındaki bağlantı davranışını yönetir.
* Varsayılan davranış: Proxy-Connection proxy'ye özgü bağlantı yönetimi için, Connection ise uçtan uca kullanılır.
* Tahrifat: Proxy'ler bağlantı kalıcılığını denetlemek (örneğin Keep-Alive, Close) veya proxy katmanları arasında doğru işlenmeyi sağlamak için bu başlıkları manipüle edebilir.
* Sonuç: Ağ kaynağı kullanımını optimize etmek veya belirli sunucu yapılandırmalarıyla uyumluluğu sağlamak.
Özel başlıklar
Proxy'ler ayrıca, genellikle X- önekli özel başlıklar ekleyebilir veya değiştirebilir; bunlar uygulamaya özgü mantık ya da dahili yönlendirme içindir.
* Varsayılan davranış: Standart istemci isteklerinde bulunmaz.
* Tahrifat: Sahte bir kimlikle X-Proxy-ID gibi başlıklar eklemek veya bilgi açığa çıkarabilecek mevcut özel başlıkları kaldırmak.
* Sonuç: Proxy'ler arası dahili iletişimi, A/B testlerini veya güvenlik token'ı aktarımını mümkün kılmak.
Başlık manipülasyonu mekanizmaları
Proxy hizmetleri başlık manipülasyonunu, genellikle yazılım ayarları veya kod aracılığıyla yapılandırılan çeşitli mekanizmalarla uygular.
Proxy sunucu yapılandırması
Ters proxy olarak çalışan web sunucuları (örneğin Nginx, Apache HTTP Server) başlık değişikliği için yönergeler sunar.
Nginx örneği
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
# Anonimliği artırmak için X-Forwarded-For başlığını kaldır
proxy_set_header X-Forwarded-For "";
# Veya sahte bir IP ayarla
# proxy_set_header X-Forwarded-For "192.0.2.1";
# User-Agent başlığını değiştir
proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/100.0";
# Referer başlığını kaldır
proxy_set_header Referer "";
# Özel bir başlık ekle
proxy_set_header X-Proxy-Served-By "DistortingProxy v1.0";
# Via başlığını gizle
proxy_hide_header Via;
}
}
proxy_set_header: Bir başlığın üzerine yazar veya ekler.proxy_hide_header: Bir başlığın istemciye iletilmesini engeller.proxy_pass_header: Aksi halde gizlenecek bir başlığı açıkça iletir.
Özel proxy yazılımları/kütüphaneleri
Özel proxy çözümleri (örneğin Squid veya Python/Node.js ile yazılmış özel proxy'ler) başlıklar üzerinde programatik denetim sağlar.
Kavramsal Python proxy örneği
import socket
import threading
def handle_client(client_socket):
request_data = client_socket.recv(4096)
headers = request_data.decode('utf-8').split('\r\n')
modified_headers = []
host = None
for header in headers:
if header.startswith("Host:"):
host = header.split(" ")[1]
modified_headers.append(header) # Yönlendirme için Host korunur
elif header.startswith("User-Agent:"):
modified_headers.append("User-Agent: Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Mobile Safari/537.36")
elif header.startswith("X-Forwarded-For:"):
# X-Forwarded-For kaldırılır
continue
elif header.startswith("Referer:"):
# Sahte bir Referer ayarlanır
modified_headers.append("Referer: http://www.example.com/fake-source")
else:
modified_headers.append(header)
modified_request = "\r\n".join(modified_headers) + "\r\n\r\n"
# Hedef sunucuya ilet
if host:
try:
target_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
target_socket.connect((host, 80))
target_socket.sendall(modified_request.encode('utf-8'))
response_data = target_socket.recv(4096)
client_socket.sendall(response_data)
except Exception as e:
print(f"Error connecting to target: {e}")
finally:
target_socket.close()
client_socket.close()
def start_proxy(port):
proxy_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxy_socket.bind(('', port))
proxy_socket.listen(5)
print(f"Proxy listening on port {port}")
while True:
client_socket, addr = proxy_socket.accept()
print(f"Accepted connection from {addr[0]}:{addr[1]}")
client_handler = threading.Thread(target=handle_client, args=(client_socket,))
client_handler.start()
if __name__ == "__main__":
start_proxy(8080)
Bu basitleştirilmiş örnek, özel bir proxy'nin gelen başlıkları nasıl ayrıştırıp isteği iletmeden önce belirli başlıkları nasıl yeniden yazabileceğini gösterir.
Pratik sonuçlar
- Anti-bot atlatma:
User-Agentbaşlığını rotasyona sokarak veX-Forwarded-Forbaşlığını gizleyerek web scraping işlemleri meşru ve çeşitli kullanıcı trafiği gibi görünebilir, böylece engellenme olasılığı azalır. - Coğrafi kısıtlamaları aşma:
Accept-Languagebaşlığını değiştirmek veya konum belirten başlıkları kaldırmak, bölgeye özgü içeriğe erişim sağlayabilir. - Güvenlik duruşu testi: Kurumlar, web uygulamalarının beklenmedik veya hatalı biçimlendirilmiş başlıklara nasıl yanıt verdiğini test etmek ve olası açıkları belirlemek için distorting proxy'ler kullanabilir.
- A/B testi ve içerik kişiselleştirme: Proxy'ler, test amacıyla belirli içerik varyantlarını veya kişiselleştirme kurallarını zorlamak için özel başlıklar enjekte edebilir.
Riskler ve dikkat edilecek noktalar
Güçlü olmakla birlikte başlık manipülasyonu riskler taşır:
- Site işlevselliğinin bozulması: Aşırı agresif veya hatalı başlık değişiklikleri site işlevselliğini bozarak hatalara veya içeriğin eksik görüntülenmesine yol açabilir. Siteler oturum yönetimi, kimlik doğrulama veya içerik sunumu için genellikle belirli başlıklara dayanır.
- Gelişmiş sistemlerce tespit: Gelişmiş anti-bot ve dolandırıcılık tespit sistemleri yalnızca başlıklara bakmaz. Davranış kalıplarını, JavaScript parmak izini ve IP itibarını da değerlendirir; bunları tek başına başlık manipülasyonu tam olarak alt edemez. Manipüle edilen başlıklar arasındaki tutarsızlıklar (örneğin mobil benzeri istek kalıplarıyla birlikte masaüstü
User-Agentdeğeri) şüphe uyandırabilir. - Hukuki ve etik kaygılar: İstemci bilgilerinin yanlış gösterilmesi, özellikle hizmet şartlarını aşmak, kısıtlı verilere erişmek veya kötü niyetli faaliyetlerde bulunmak için kullanıldığında hukuki sonuçlar doğurabilir.
- Performans yükü: Başlıkların ayrıştırılması, değiştirilmesi ve yeniden birleştirilmesi her isteğe gecikme ekler ve proxy hizmetinin hızını ve yanıt verme süresini etkileyebilir.
- Hatalı yapılandırma riskleri: Yanlış proxy yapılandırmaları istemci bilgilerini istemeden açığa çıkarabilir, hedeflenen anonimliği sağlayamayabilir veya proxy altyapısının kendisinde güvenlik açıkları oluşturabilir.
