Nasıl Zend Framework programlanmış uygulamalarda SQL Injection saldırıyı önlemek için?

4 Cevap php

Ben ZF güvenliği hakkında herhangi bir kavram yoktur. Veritabanı üzerinde çalışırken ben Filtre kullanmak zorunda mı? Belki bağlayıcı yeterli mi? Buna ne dersiniz:

$users->update($data, 'id=1');

$ Data dizi şekilde filtre edilmelidir? Konuda bildiğiniz bir şey yazmaktan çekinmeyin.

Eğer (özellikle SQL Injection ve XSS hakkında) ZF güvenliği hakkında iyi makalelere bazı bağlantılar verebilir?

4 Cevap

Short answer
While ZF takes and provides some measures to secure your app, you should still apply the same precautions that you'd use without Zend Framework.


Kod parçacığını ilişkin, ilgili Bölüm kontrol Zend_Db in the Reference Guide:

Varsayılan olarak, veri dizisindeki değerler parametreler kullanılarak eklenir. Bu güvenlik sorunları bazı türlerinin riskini azaltır. Sen kaçan veya veri dizisindeki değerlere alıntı uygulamak gerekmez.

Bu güvenlik hakkında rahatsız gerekmez anlamına gelmez. Örneğin, Update method için yukarıdaki

Üçüncü argüman değişecek satırlar için kriter olarak kullanılan SQL ifadesi içeren bir dizedir. Bu argüman değerleri ve tanımlayıcıları tırnaklı veya kaçmış değildir. Herhangi bir dinamik içerik güvenle bu dizeye enterpolasyonlanan sağlamaktan sorumludur. Eğer bu konuda yardımcı yöntemler için Quoting Values and Identifiers bakın.

Eğer Zend_Db_Table Açıkçası kullanıyorsanız bu yana Note, üçüncü argümanın ikinci argüman olduğunu. Dahili olarak, tablo örneği ilk param tablo örneğinin tabloismi olmak db adaptöre çağrı devredecektir.


Ilgili Zend_View ve XSS saldırı vektörleri:

Zend_View eleman nesil oluşturmak ve otomatik olarak kaçan uygun çıkış gerçekleştirmek için ilgili çoğu yardımcı sınıflar, bir başlangıç ​​seti ile birlikte geliyor.

Yine most of which tüm anlamına gelmez. Zend_View Zend_View::escape() çıktıyı sterilize yardım sağlamak, ama bu özel bir şey yok.

Aynı kavram Zend Framework için ve diğer her web uygulama / kitaplık / o kullanıcı verileri işlemek ne için geçerlidir:

Always validate user input. Trust no one.

Bir dize bekliyorsanız, bir dize almak emin olun. Bu (örneğin, bu çok durumda Zend framework kullanıyorsanız) veya elle doğrulama fonksiyonları uygulayarak çerçeve kütüphaneleri kullanılarak yapılabilir.

Doğrulama DAİMA sunucu tarafında yapılmalıdır. İstemci tarafı doğrulama aynı zamanda daha iyi bir kullanıcı deneyimi sağlamak için, mevcut olmalıdır.

Zend durumunda, manuel Validation page bakın.

Bağlanma SQL enjeksiyonu önlemek ama XSS önlemek için hiçbir şey yapmaz gerekir. Her zaman gerekli olduğu gibi verilerinizi filtre olmalı ve görünümde çıktı yankılanan zaman, tehlikeli olabilecek bir şey kaçmak gerekir.

echo $this->escape($this->foo);

Eğer bir şey belirli ihtiyaç duyduğunuz her yerde ben, Zend Filtreler kullanın önerecektir. Eğer uygulamada anypoint bu kullanabilirsiniz.

Talebi Parametre

$alpha = new Zend_Filter_Alpha();
$name = $alpha -> filter($this -> _request -> getParam('name')); //while processing url parameters

Veritabanı

$int = new Zend_Filter_Int();
$select -> where("id = ?", $int -> filter($id)); //during db processing also

Ayrıca Form Elemanlar. Ben bu örnekte olduğu gibi, bu atlar abudantly bulunabilir.