Neden esc_url kullanmalıyım?


12

Bu şey kodumu zorlaştırıyor. Wordpress kodeksi, güvenlik hakkında belirsiz bir şekilde konuşarak esc_url kullanılmasına neden olur. Ama gerçekten zahmete değer mi?

Örneğin, aşağıdakileri kullanarak önemli, pratik güvenlik avantajı nedir?

<?php echo esc_url( home_url( '/' ) ); ?>

onun yerine

<?php echo home_url() ?>

Not: Tema geliştirme hakkında değil, belirli bir site hakkında konuşuyorum.

Yanıtlar:


12

Veri Doğrulama ile ilgili belgeleri kontrol ederseniz , işlev hakkında şunları söyleyebilir:

URL'leri temizlerken her zaman esc_url kullanın (metin düğümlerinde, özellik düğümlerinde veya başka herhangi bir yerde). Sağlanan beyaz listeye alınmış protokollerden [...] birine sahip olmayan URL'leri reddeder, geçersiz karakterleri ortadan kaldırır ve tehlikeli karakterleri kaldırır.

İşte orada - pratik güvenlik yararı. Geçerli protokol, bulanık karakterler yok.

Zorunlulukla ilgili cevap kesinlikle evet . Çıkıştan kaçmak en temel güvenlik uygulamasıdır.


2
Tüm saygımla, örneğin ev bağlantısının nasıl bir güvenlik riski oluşturabileceğini göremiyorum. Belki bu yönergeler tema oluşturmak içindir ve "özel" kod için geçerli değildir? Sonuçta, ev adresini ve diğer bağlantıları html'de kodlamak ve güvenlik riskleri varsa hiç php kullanmamak en iyisi olabilir mi?
IXN

9
Güvenlik uygulamalarının tutarlı ve evrensel olarak uygulanması, her bir vakanın buna değip değmeyeceği konusundaki tartışmalardan çok daha verimlidir. :)
Rarst

7
Diğer taraftan , Codex tarafından önerilen bir kaynak Kural 3: Güven WordPress kurar . Bu , uygun bağlamlarında kullanılırsa, wp çekirdek işlevlerinin aşırı büyütülmesine karşı önerilmektedir . Bu öneriye göre, kendi sterilizasyonunu yapmayı beklerdim. home_url()home_url
Franco

3

iyi, tüm kullanıcı girişi sterilize edilmelidir ... Enjekte ettiğiniz URL kullanıcı girişi değilse (örneğin, tamamen güvendiğiniz biri tarafından site ayarı, sabit kodlanmış değerler), esc-url'den kendinizi rahatlatabilirsiniz.

ama sitenize bu url enjekte olabilir, ben kolayca js kodu, veya yönlendirme kodu enjekte edebilir ... hatta bazı durumlarda sunucu tarafı kodu.

bu, oturumun ele geçirilmesine ve kullanıcı hesaplarınızın çalınmasına ve diğer kötü seçeneklere yol açabilir.

Düzenle:

Örnekte esc_url( home_url( '/' ) );
bir yarı kodlanmış değeri ameliyat! bu nedenle esc_urlortadan kaldırılabilir.
Hala bir tehdit olduğunda ve olmadığı zaman ve her değer için esc_url () tutmayı önereceği zaman arasındaki farkları neden görmüyorum dedi.


3
"Güvendiğiniz biri tarafından yapılan site ayarı", hâlâ kelimenin tam anlamıyla kullanıcı girdisidir. :)
Rarst

@Erkek evet, ben seninleyim, ama o esc_url kullanarak "tiksinti", biraz daha affediciydim.
Tomer W

2

Kafanızda tutulması gereken başka bir şey esc_url()ise <a href="SANITIZE_THIS_URL">your_text</a>, URL çıkışınızda URL'yi bir bağlantı için href niteliği veya bir resim öğesi için src niteliği gibi kullanacaksanız, kullanmanız gerekir esc_url().

esc_url_raw(), temiz bir URL istediğiniz ancak HTML öğelerinin kodlanmasını istemediğiniz diğer durumlar içindir. HTML olmayan herhangi bir kullanım (DB, redirect) bunu kullanır.

esc_url_raw()Fonksiyon hemen hemen aynı yapacak esc_url()o yerine & # 038 vb & ile olmaz anlamına, ancak kod çözme kişiler olmaz. Mark belirttiği gibi, kullanımı güvenlidir esc_url_raw()böyle hakkında daha fazla bilgi için wp_remote_get ()'' olarak, veri tabanı sorgulamaları, yönlendirmeler ve HTTP işlevlerinde ) (esc_url_raw


1

esc_url geçerli bir HTML üretmek için kullanılır (girdiyi sterilize etmemek için). Çıktı almak istediğiniz şeyin bu bağlam için geçerli bir HTML olduğundan% 100 emin olmadığınız zaman bunu kullanmalısınız.


Kaçan işlevlerin tüm ailesi açıkça dezenfektasyon içindir.
Rarst
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.