PHP - URL geçti güvence parametreler

6 Cevap php

Ben URL parçası dayalı kararlar bir uygulama var:

    if ( isset($this->params['url']['url']) ) {
    $url = $this->params['url']['url'];
    $url = explode('/',$url);
    $id = $this->Provider->getProviderID($url[0]);

    $this->providerName = $url[0]; //set the provider name

    return $id;

    }

Bu bir pasta uygulaması yani $ this-> params ['url'] URL unsuru içeriyor olması umulur. Sonra URL elemanı kullanmak kadar veri benim app kalanı kullanmaya karar. Benim soru ...

nedir insanlar kötü bir şey geçemez, böylece bu giriş güvenliğini sağlamak için en iyi yolu nedir?

, teşekkürler

6 Cevap

Burada Diğer yorumlar AppController en beforeFilter sizin db olarak sağlayıcılarına karşı sağlayıcı doğrulamak, doğru.

Tüm URL'ler bir sağlayıcı dizesi öneki olmalıdır Ancak, bu-> params ['url'] $ bakarak URL'den yanlış şekilde bunu ayıklama hakkında gidiyoruz.

Bu tür sorunları tam olarak ne yönlendirici sınıf, ve bir eylem params'ı geçmek için bu yeteneği içindir. Yemek kitabı kılavuz sayfasını kontrol http://book.cakephp.org/view/46/Routes-Configuration. Sen gibi bir şey deneyebilirsiniz:

Router::connect('/:provider/:controller/:action');

Ayrıca kılavuzda bir regex tarafından rota kendisinde sağlayıcı param doğrulamak için yetenek görürsünüz - Eğer bilinen sağlayıcıları küçük bir kesin listesi varsa, sabit rota regex bu kodu olabilir.

O $ anında kullanılabilir hale URL bu kısmını yakalar bir rota kurarak bu-> params ['kuruluşu'], ama bu gerçektir bile daha iyi html yardımcı link () yöntemi otomatik olarak doğru URL'leri biçimlendirilmiş yapýlar, örneğin

$html->link('label', array(
  'controller' => 'xxx',
  'action' => 'yyy',
  'provider' => 'zzz'
));

Bu / zzz / xxx / yyy gibi bir bağlantı verir

Geçerli sağlayıcı isimleri nelerdir? URL parametresi biridir, aksi takdirde bunu reddetmek, test edin.

Umarım onlar kullanmak gerekiyordu sağlayıcı adları dahil, kesinlikle bir şey göndererek kullanıcıyı engellemek için hiçbir yolu yoktur farkındayız.

Ben istiyorum tekrar yinelemek Karsten yorumu: "pis" bir şey tanımlamak

Ne parametre olmasını bekliyoruz? Eğer bir URL olmasını bekliyorsanız, URL'leri doğrulamak için bir düzenli ifade kullanın. Eğer bir tamsayı bekliyorsanız, bir tamsayı döküm. Aynı bir şamandıra, boolean, vb için de geçerli

These PHP functions might be helpful though: www.php.net/strip_tags www.php.net/ctype_alpha

alfasayısal dize - parametresi sağlayıcıAdı olacaktır. i cevap sağlayıcıAdı diğer uygulama mantığı dayalı geçerli bir olduğunu bir çek ile birlikte ctype_alpha () kullanmak için temelde olduğunu düşünüyorum.

cevaplar için teşekkürler

Eğer izin verilen URL'lerin bilinen bir dizi varsa da, iyi bir fikir bu izin URL'leri beyaz liste etmektir. Geçti URL parametresi için bir karşılaştırma yapmak, veritabanından bu çekin - Sen bile izin URL'leri içeren bir DB tablo alarak dinamik bunu yapabilir. Alternatif olarak, (eğer geçirilen etki sağladı söylüyorlar, ama url değişikliklerin geri kalanı ... Sen etki beyaz liste ve / veya geçerliliğini belirlemek için İfadelerinin kullanabilirsiniz) desenleri beyaz listeye.

En azından, sen sayisinda strip_tags kullandığınızdan emin olun, ya da yerleşik mysql kaçış dizileri (PHP5 kullanıyorsanız, SQL sorguları parameterizing bu sorunları çözer).

Daha pasta gibi Sanitize sınıfını kullanmak olacaktır. Bu durumda Sanitize::escape() veya Sanitize::paranoid() uygun görünüyor.