Özel / korumalı yöntemler girişi Güvenliğini?

5 Cevap php

Normalde, her aklı başında geliştiriciler (vb sanitasyon, doğrulayarak, doğru türleri döküm) tüm kamu yöntemleri girişini sağlamak için çalışıyoruz

Benim soru: Eğer kodu olan da doğrulayarak / korumalı özel yöntemlere iletilen parametrelerinin? Eğer kamu yöntemleri düzgün parametrelerini securize ve (.. diğer sınıflar, db, kullanıcı girişi vb) dışında değerler dönerseniz Bence bu, gerekli değildir.

Havai performace oluşturma ve aynı zamanda bir işaret olduğunu, sanırım, - ama sürekli çerçeveler ve uygulamaları (yani prestashop bir isim) doğrulama yöntemi sıklıkla vücutta, yöntem çağrısı tekrarlanır ve bir kez daha securize değer döndürülür karşıya am kötü tasarım.

5 Cevap

Eğer kamu API'ler kötü parametrelere karşı kendilerini savunmak uygulamaları olması gerektiğini görüşüne uymak ise, ölçüt API kullanıcı doğrudan bu yöntemi çağırmak (ya da dolaylı yoluyla aramak için gidiyor olup yöntemlerin görünürlüğü, ama olmamalı doğrulama ertelemektedir başka biri).

Doğrulama yapmak gerektiğini yöntemlerden örnekler:

class A {
    protected final function myMethodDefaultImplementation(...) {
        /* subclasses can just call this method in their myMethod implementations */
        /* should do validation */
        ...
    }
    protected abstract myMethod(...);

    public function orderByDate() {
        return $this->orderBy(ORDER_BY_DATE)
    }

    private function orderBy($crit) {
        /* should do validation */
        ...
    }
}

Korunan için, ben yöntemi geçersiz veya başka bir sınıftan denir sonra ve yönteme geçerli girişleri kabul edilemez olabilir beri bunları doğrulamak gerektiğini düşünüyorum. Bu diğer uygulamalar tarafından kullanılan olacak bir bileşen ise, bu özellikle doğrudur.

Özel için, sana yöntemlerine geçirilen şeyin kontrol çünkü bir atık olduğunu düşünüyorum, bu yüzden hiç özel yöntemi aramadan önce bu verilerin valide edilmelidir.

Tam - Size iyi app tasarımı ise o zaman gerekli olmamalıdır.

Bu görünürlük anahtar kelime bakmadan gerekli olduğunda ben buna (kamu, özel, korumalı) bir yöntemin ne tür önemli değil söyleyebilirim, Eğer uygun önlemler almak.

Sadece son olası şans girdileri. Ben OO semantik bu herhangi bir farklı hale nasıl görmüyorum.

for some reason Parametreli sorgular veya bir ORM (örneğin ony Ben şu anda aklınıza gelebilecek :) kullanamazsınız eğer Örneğin, bu gibi fonksiyon yazmak istiyorum:

function getname($id) {
    $id = intval($id);
    mysql_query("SELECT * FROM users WHERE id = $id");
    ...
}

Herhangi bir kod, bu işlevini çağırın ve beklenmeyen sonuçlara yol için şimdi bu imkansız.