php $ _REQUEST veriler sadece yarım çözümlenmiş olduğunu

2 Cevap php

Ben sorgu dizesi yoluyla kodlanmış url alma duyuyorum. Ben sonraki sayfaya tekrar geçmek gerekir. I $_REQUEST['url'] kullanarak, bunu ilk defa aldığınızda, sadece bölü örneğin, çözülür:

http://example.com/search~S10?/Xllamas&searchscope=10&SORT=D/Xllamas&searchscope=10&SORT=D&SUBKEY=llamas/51%2C64%2C64%2CB/browse

php docs page for urldecode çözme isteği veri karşı danışmanlık ve zaten çözümlenmiş olacağını söylüyor. Bunu da tamamen deşifre gerekir, bu yüzden tüm çözülen çift kodlayan bazı bölgelerinde olmadan yeniden kodlamak, ya da olamaz.

Bu verilerin benim deneyim php dokümanlar ile yersiz olduğunu neden emin değilim. Aynı herhangi bir yardım veya işaretçileri için teşekkür ederiz!

EDIT: yaklaşık dağınık ilgili kodu, göndermek için girişimi:

the url is encoded and added to the querystring (in an html file using smarty template):
<a class="button" href="{$baseurl}search_nojs?searcharg={$searcharg|escape:'url'}&url={$next|escape:'url'}"><span>Next&gt;&gt;</span></a>

bu bağlantıyı takip eğer, geri (bir php dosyası) sorgu dizesi dışına url kapma ediyorum:

       if(array_key_exists('url', $_REQUEST)) {
            $sm->assign("searchurl", $_REQUEST['url']);
        }

Then I'd like to stick the url back into the querystring for the next link (in another html file):
href="{$baseurl}detail?bibid={$res.bibid}&searcharg={$searcharg}{if $searchurl}&searchurl={$searchurl}{/if}"

Ben de {$searchurl} düz sayfa üzerine baskı, ve aynı yarım kaçtı sonuç alıyorum.

İşte ben aldığım verilere vs sorgu dizesi bir başka örneğidir $_REQUEST:

originally encoded url in querystring:
searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

data retrieved from $_REQUEST:
searcharg=mammals&searchurl=http://example.com/search~S10?/Xmammals&searchscope=10&SORT=D/Xmammals&searchscope=10&SORT=D&SUBKEY=mammals/51%2C1114%2C1114%2CB/browse

Ben bu yöntemi merak görünebilir biliyorum - Ben bir kara-kutu veritabanı etrafında çalışan bir mobil ekran yapmaya çalışıyorum. Tekrar teşekkürler herhangi bir yardım için!

2 Cevap

Burada i $ _REQUEST aldığım verilere vs sorgu dizesi bir başka örneğidir:

originally encoded url in querystring: searcharg=mammals&url=http%3A%2F%2Fexample.com%2Fsearch%7ES10%3F%2FXmammals%26searchscope%3D10%26SORT%3DD%2FXmammals%26searchscope%3D10%26SORT%3DD%26SUBKEY%3Dmammals%2F51%252C1114%252C1114%252CB%2Fbrowse

This is double encoded. For example: %252C -> %2C -> , So at the point that you encode the url parameter, you're introducing double encoding. Perhaps you should ensure that, before encoding parameters, you decode them until they can be decoded no more (aka canonicalisation). You could use urldecode in a loop for this.

Ayrıca (link olarak) html bağlam içine geri url parametresi koyduğunuzda HTML çok Özellikleri için kaçmak o sağlamak istiyoruz. Aksi takdirde bir XSS açığı var.

comma (U+002C) is a reserved character in the query ve böylece kodlanmalıdır %2C,

3.4. Sorgu Bileşeni

The query component is a string of information to be interpreted by the resource.

  query         = *uric

Within a query component, the characters ";", "/", "?", ":", "@", "&", "=", "+", ",", and "$" are reserved.