wpdb-> insert: SQL enjeksiyonuna karşı hazırlık yapmam gerekir mi?


14

Wpdb-> insert önce wpdb hazırlık kullanmam gerekir mi?

Wpdb-> insert kullanarak bir wordpress tablosuna değerler ekliyorsam, eklemeden önce verilerimi "temizlemem" gerekir mi yoksa bu yöntem (wpdb-> insert) bunu benim için yapıyor mu?

Yanıtlar:


21

Hayır, verileri hazırlamamalı ya da bu bilgilerden kaçmamalısınız wpdb.

Gönderen wpdb sınıf referansı :

veri :

(dizi) Eklenecek veriler (sütun => değer çiftlerinde). Hem $ veri sütunları hem de $ veri değerleri "raw" olmalıdır (ikisi de SQL'den kaçmamalıdır).

Bununla birlikte, insertyöntemi kullanmak yerine kendi SQL'inizi yazıyorsanız , evet, kullanarak kaçmalısınız prepare.


8
Bir not eklemek için: Her ikisi de insert& updatebuna gerek yok. Ancak ile birlikte kullanılmalıdır query.
kaiser

1

Aşağıdaki wpdb sınıfı için bir uyarıdır.

https://codex.wordpress.org/Class_Reference/wpdb

Bir uyarı

Bu sınıftaki bazı işlevler girdi olarak bir SQL ifadesi alır. SQL enjeksiyon saldırılarını önlemek için SQL sorgusuna dahil ettiğiniz tüm güvenilir olmayan değerlerden kaçmanız gerekir. Kullanmayı planladığınız işlevin sizin için SQL'den kaçtığını veya kaçmasını beklediğini görmek için belgelere bakın.

Bu yüzden bunu okudum - wpdb sınıfı sizin için verileri otomatik olarak hazırlamıyor veya kaçmıyor.

Kodunuzdaki veri kaynağına% 100 güvenemiyorsanız, sınıf (?) 'I kullanmanızı öneririm.

Hazırlık sınıfını kullanmanın, hazırlık sınıfını düzgün kullanmadan düzelteceğini düşünmeyin. Bu konuda oldukça yeniyim, bu yüzden doğru değilsem lütfen herhangi bir düzeltmeyi yanıt olarak gönderin.

$ wpdb-> ready ("SELECT * FROM tablo NEREDEN ID =% d AND name =% s", $ id, $ name);

Yukarıdaki açıklamada, 2 ekstra özellik vardır. Biri kimlik için, diğeri de ad için. Okuduğum kadarıyla, her biri sorgunuzdaki öğe sayısına karşılık gelir. Ayrıca% s = string,% d = integer ve% f = float.

Ayrıca, okumalarımdan, eğer ekstra özellikleri koymazsanız, hazırlayın aslında hiçbir şey yapmaz. Bir uyarı olacak, ancak bunu kapatırsanız, belki de bilemezsiniz.

Aşağıda, bir INSERT öğesine bir hazırlık sınıfı ekledikleri sınıf referansının kendisinden bir örnek verilmiştir.

https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

$ wpdb-> query ($ wpdb-> hazırla ("INP $ wpdb-> postmeta (post_id, meta_key, meta_value) DEĞERLER (% d,% s,% s)", dizi (10, $ metakey, $ metavalue) ));

Benim endişem, 'kimsenin' referans vermediği aynı sayfaya göre yükseltilmiş cevabın yanlış olması. Ben hazırla () kullandığınızı varsayıyorum ama diğer standart php kaçış yöntemleri değil çünkü ben daha derin kazdık kadar ben de bu yanıtı doğru aldı.

Her neyse ... belki de orijinal cevaptan bu yana işler değişti.


hmmm, bu bir cevaptan çok bir soruya
benziyor

Kabul edilen cevap doğrudur. $wpdb->insert()$ Wpdb-> update () ` gibi işlevler kullandığınızda veya $wpdb->delete()verilerin RAW olması gerekir. Örneğin $wpdb->query()SQL deyimini girdi olarak kullandığınızda, güvenilmeyen verilerden kaçmalısınız.
nmr

Sanırım şimdi anlıyorum. Bu yüzden ... akıl sağlığım için ... örnek olarak kullandığınız şey, 'sorgu yöntemini' kullandığım örneklerin aksine 'ekleme yöntemi' ve 'silme yöntemi' ... (% wpdb -> sorgu). Cevabımı silebilir miyim? Yoksa bıraktın mı?
Felixius

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.