Kohana 3, artık sorgularda params adlı bağlanırlar, ama nasıl ben bağlamak yapamam olanları kaçış?

2 Cevap php

Kohana 3, bu yüzden gibi bir sorguda bir param bağlayabilirsiniz

$query = 'SELECT name FROM users WHERE id = :id';

Bu temiz, ama bazen tablo adı gibi yapılandırılabilir için başka şeyler, istiyorum. Ben tablo adı için bir adlandırılmış param kullandığınızda, başarısız olur. Ben sadece bu durumlarda dize inşa edilmiştir.

Benim soru dize binanın bu tür yaparken nasıl potansiyel kötü karakterler kaçabilir mi? Kohana 2.x olarak, $this->db->escape() yapabilirdi ama Kohana 3 kökten farklı olduğundan, yeni bir yol var hayal ediyorum?

2 Cevap

Sadece Mark Byers cevabı eklemek için, tablo adının parametrizasyonları başarısız olduğunu nedeni tablo adı bir identifier ise parametreler, values olarak kaçtı olmasıdır. Ne muhtemelen oluyor yerine ters tırnakların sarılmış gerekirken tablo adı, tırnak sarılmış olmasıdır.

Mark diyor Ancak, tablo adlarını kaçmak için bir ihtiyaç kötü Tasarım önerir. Ya sabit kodlu veya içerikleri zaten kaçan ihtiyaç için değil güvenilir olabilir, bazı yapılandırma dosyasında saklanmalıdır. Kendi yapılandırma güvenmiyorum böyle bir ölçüde sizin tüm üsleri kapsayacak şekilde çalışırken büyük olasılıkla bir zaman kaybıdır.

Ben Kohana hiç kullanmadım, bu yüzden özür dilemek bu açıklama tamamen alakasız ise, ama ben yapmak için çalışıyoruz ne hakkında birkaç yorum var:

Ben tablo adı için bir adlandırılmış param kullandığınızda, başarısız olur.

Ben altta yatan veritabanının parametre mekanizması dayanarak çünkü bu olduğunu varsayalım, ve ben bir sorguda bir parametre olarak bir tablo adı vermek sağlar herhangi bir veritabanı bilmiyorum. Yani evet, büyük olasılıkla bir dize kendiniz inşa etmek gerekir.

dize binanın bu tür yaparken nasıl potansiyel kötü karakter kaçabilir?

Bu soru tablo adları bazı potansiyel kötü karakterler var ... eğer öyleyse, neden? Ya ... garip görünüyor Yoksa güvenilmeyen bir kaynaktan (kullanıcı?) Gelen tablo adını alıyoruz. Bu benim için kötü bir fikir gibi geliyor. Onlar bir tablodan okumaya çalışırsanız ne olur onlar erişimi olması gerekiyordu değil mi? O izin verilen tablenames iyi tanımlanmış bir liste var ve tablo yerine potansiyel kötü tablo adları kaçan, bu listede var olduğunu kontrol etmek daha iyi olmaz mıydı?

Ve ben son bir gözlem var: Bir sorguda tablo adını değiştirmek mümkün ve hala çalışıyor ise, bu muhtemelen veritabanı doğru normalize olmayan bir işaretidir. Belki size tabloları birleştirmek ve gruplandırma hakkında bilgi fazladan bir sütun eklemek ve istediğiniz verileri seçmek için bir WHERE yan tümcesini kullanabilirsiniz? Ben bir şey daha somut önermek için modeli hakkında daha fazla bilgi gerekiyordu.

Bu tüm soru cevap yardımcı olur, ben emin değilim, ama bu sizin sorunuzu okurken benim düşünceler vardı. Ben bunu bazı kullanabilirsiniz umuyoruz.