Benim webapp I (örneğin POST / GET / redirect) HTTP yönlendirme için Location:
başlıkları kullanıyorum. Ama hedef yerleri dinamik olması gerekiyor (örneğin login.php?dest=pagexy.php
). Hepimiz herhangi bir kullanıcı tarafından değiştirilebilir girdi, böylece düzgün XSS önlemek için kaçtı gerektiğini biliyorum
header('Location: '.$_REQUEST['dest']);
yanlış görünüyor. Basit urlencode
-ing sadece basit dosyalar değil, yolları (Single-Sign-On ile, örneğin çapraz etki alanı URL'ler) için kullanılabilir.
Ben de benzeri güvenlik açıkları hakkında okudum:
Location: javascript:...bad.stuff... or
Location: data:text/html:base64,...
Yerlerinden açık bir beyaz liste olur muhtemelen en güvenli çözüm olması, ancak sıkıcı ve hatta tüm kullanım-durumlar için mümkün olmayabilir.
Çözümler?
Edit:
Is urlencoding enough/correct for simple files? Assume a recent PHP version (> 5.1.2, AFAIK) that forbids newlines in header().
Nasıl güvenli birbirleriyle önceden etki alanını bilmeden cross-domain kimlik denetimine işleyebilir?