2010-11-13 21 views
5

'daki URL'deki herhangi bir karaktere izin vermek CodeIgniter PHP framework'ü kullanıyorum. Dinamik bir PHP sayfasını yüklemek için JS kullanın: Söz konusu URL herhangi izin verilmeyen karakterleri içermiyordu çünküCodeIgniter

http://192.168.0.81/index.php/controller/method/dude%27s%20face 
An Error Was Encountered 
The URI you submitted has disallowed characters. 

Bu tamamen doğru değildir:

$('someIFrame').writeAttribute(
    'src', 
    '/index.php/controller/method/' + 
    escape(userGeneratedString) 
); 

ben bu koştum, CodeIgniter bana bu hatayı verdi . Benim yapılandırma dosyası söz konusu URL'ye tüm karakterlerin mevcut sağlar:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@\-'; 

yüzden sinirli var ve sadece tüm karakterlerin hatayı önlemek için izin verdi.

// Leave blank to allow all characters -- but only if you are insane. 
// DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! 
//$config['permitted_uri_chars'] = 'a-z 0-9~%.:_()@\-'; 
$config['permitted_uri_chars'] = ''; 

Bu satırın üstündeki uyarı mesajı korkutucu geliyor. Tüm karakterlere izin vererek neyin yanlış gidebilir? Haykırılacak mıyım?

+1

@thisMayham. Aynı değil mi? ;) @JoJo Cevapların yanındaki yeşil onay taslağını tıklayarak cevapları kabul edebilirsiniz - bu, belirli bir sorunun probleminizi çözmenize yardımcı olduğu anlamına gelir. Bu, hem müdahaleye hem de askere çabaları için küçük bir ödül verir ve sorunu çözülmüş olarak işaretler. –

+0

Ayrıca bkz. [Security.se]: [** URL'deki tüm karakterlere izin vermek neden tehlikelidir? **] (http://security.stackexchange.com/q/133511/12139) – unor

cevap

6

Codeigniter'daki URL'ler urldecoded, yani %27, izin verilen karakter listenizde olmayan ' anlamına gelir ve bu nedenle hatayı tetikler. Yani karakterlerinin bir kez kodunu çözmesine izin vermeniz gerekir. Başka bir deyişle, kod yazıcısı size %27'u gördüğü zaman, zaten bir ' koduna dönüştürüldü. ** Eğer geri bildirim verme umurumda değil o ** ima yana

Source