WordPress Eklentileri ve Temaları için En İyi Güvenlik Uygulamaları Nelerdir? [kapalı]


22

Bu soruda önerildiği gibi , bu konuyu Eklenti / Tema güvenliği için en iyi uygulamalarla ilgili topluluk tartışma / oylama için yeni bir soru olarak ekliyorum.

İşte temaları gözden geçirmek için kullanılan mevcut (devam etmekte olan) ayarlarımı / veri güvenliği kontrol listemi temel alan başlangıç ​​kontrol listesi (ilkeler Eklentiler için Temalar için olduğundan farklı olmamalıdır).

Güvenli ve sağlam kodlanmış tema ayarları sayfası olan bir temayı incelemek istiyorsanız, şu temayı inceleyin:
http://wordpress.org/extend/themes/coraline


Uygun ayrıcalıklara sahip biri bunu topluluk wiki yapmaktan sakıncası yoksa?
Chip Bennett,

Wiki modunda bir soru sormak için bir modun soruyu uygun şekilde etiketlemesi gerekir, modun dikkatini çekmek için işaretlemiştim, şimdi sadece bir zaman meselesi .. :)
t31os

Coraline'de bu kadar özel olan ne? Ben hala içeri girmenin bir yolu var. Anons A'nın içgüdüsünü bağlamayı öneririm: wordpress.stackexchange.com/questions/13539/…
kaiser

Coraline hakkında özellikle özel bir şey olmayabilir. Sadece temaları incelerken, Tema geliştiricilerini şu anda belirttiğimiz tek şey, çünkü ilk güvenlik özel Tema incelemelerinin çoğunu yapan Justin Tadlock tarafından verilen örnekti. Oenology'yi de iyi bir örnek olarak sunardım ama kendi Temamı pezevenk etmeye çalışırken rastlamak istemiyorum. :)
Chip Bennett

Yanıtlar:



12

Verileri temizleyin, doğrulayın ve kaçın

Veritabanına hem ön hem de arka uçtan (!) Giren ve çıkan olabilecek her şeyi temizleyin!

Eklentiler ve Temalar uygun veri doğrulama işlemi yapmalıdır:

  1. Veritabanına veri girmeden önce tüm güvenilmeyen verileri doğrulayın ve sterilize edin
  2. Ayarlar form alanlarına gönderilmeden önce tüm güvenilmeyen verilerden kaçın
  3. Tema şablon dosyalarında çıktı alınmadan önce tüm güvenilmeyen verilerden kaçış

Eklentiler ve Temalar, esc_attr()metin girişleri ve / esc_html()veya esc_textarea()metin alanları için kullanılmalıdır.

Ayrıca WordPress API kullanılabilir dan esc_url(), esc_url_raw(), esc_js()ve wp_filter_kses().

Kötü örnek:

<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>

İyi örnek:

<a href="<?php echo esc_url($url); ?>">anchor</a>

İşte kaçan fonksiyonların kullanımını anlatan harika bir Jaquith videosu:


3
Sanitize
edilirken, sanırım

9

Yalnızca $ _GET / $ _POST / $ _REQUEST dikkatle ve daha iyi API'ler kullanılamadığında kullanın

Eklentiler ve Temalar almak ve form girdi verileri kaydetmek yerine güvenmek için Ayarlar API'sini kullanmalıdır $_POSTve $_REQUESTdoğrudan veri.


3
Her zaman $ _POST, $ _REQUEST ve $ _GET değerlerine güvensiz davranın. Bu dizilerin değerlerini sterilize edin ve beyaz listeye alın ve kendi değişkenlerinize koyun. Kullanıcıdan gelen değerleri hiçbir zaman sterilize etmeyin ve bunları $ _POST'a geri koyun.
goldenapples

2
Her zaman, kullanmanız gereken anahtarın uygun dizide ayarlandığından emin olun. isset () arkadaşınız :)
mfields

9

kullanım $wpdb->prepare

$wpdbNesne üzerinden özel sorgular oluştururken $wpdb->prepare, mysql_*aile işlevlerinin herkese yanlış öğrettiği gibi, sorguları SQL koduyla karışık verilerle yazmak yerine her zaman değerlerle doldurmak için kullanın .


$wpdb->prepareolduğu değil Hazırlanan tablolar ile aynı.
hakre

8

Kötü niyetli kod çalıştırmak için kullanılabilecek PHP işlevlerine dikkat edin

PHP yazan herkes için iyi bir okuma: İstiflenebilir PHP fonksiyonları StackOverflow'ta.

Tema Değiştirme API'sini kullan

Temalar, kendi kendine icat edilmiş bir ad şemasını değil , set_theme_mod()ilgili işlevleri kullanmalıdır . Theme_mod API, API ayarları için özel bir katmandır; benzersiz isimleri garanti eder, tüm seçenekleri bir diziye iter ve deneyimlerime göre kullanımı çok daha kolaydır. Ayrıca, eklentiler için standartlaştırılmış filtreler sunar - birlikte çalışabilirlik için iyidir.

Etkinleştirmekten kaçının register_globals

Güvenme register_globals = on. Bir Pro Teması benim son müşteri satın aynen bunu yapar. Herhangi bir siteyi 5 dakika içinde bu temayı kullanarak hackleyebilirim ...
ThimbThumb da bunu yaptı (ve hala yapıyor mu?).

Gereksiz geniş erişim izinlerine sahip dosyalar oluşturmayın

Çok serbest erişim izinlerine sahip dosyalar oluşturmayın.

Mümkünse SSL kullanın

Senin Nokta Twitter / Facebook / şey üzerinde paylaş varsa HTTPS URI'siyle bağlantıları. Okuyucunuzun güvenliği de önemlidir.


2
Eğer üzerinde durabilir set_theme_mod()özellikle, nasıl düzgün Ayarlar API kullanımı ile birleştirmek?
Chip Bennett,

@Chip Bennett Cevabımı biraz bilgi ekledim.
fuxia

Bu mini listeyi daha küçük ve daha kesin cevaplarla parçalayabilir misiniz? Topluluk vikisini daha küçük parçalarda yönetmek daha kolaydır. TIA
Rarst

3
Çip: Theme mod sistemi, Ayarlar API'si ile çok iyi bütünleşmiyor. Yakında doğru şekilde nasıl yapıldığını açıklayan bir yazı yazacağım.
Otto,

7

Verileri tek dizide kaydet

Eklentiler ve Temalar, ayarlar sayfası için birden çok seçenek oluşturmak yerine seçenekleri tek bir dizide kaydetmelidir. Ayarlar API'sinin kullanımı bunu hallederdi.


6

Ayar sayfaları eklerken ve çıkarırken uygun yetenek olup olmadığını kontrol edin

Eklentiler , ayarlar sayfasını ekleyebilmek için uygun bir yetenek kullanmalıdır (örn. manage_options).

Temalar , ayarlar sayfasını eklemek için edit_theme_optionsuygun yeteneği kullanmalıdır .


1
Küçük ama önemli not:edit_theme_options Ayarlar API'sini kullanamazsınız , ancak seçenek sunumu için manage_optionsgüncelleme göndermek için kodlama zor . İlgili Trac bileti burada bulunabilir .
t31os

Doğru, ancak 1) Yöneticileri değil, yalnızca Editörleri etkileyecek; ve 2) umarım bu yakında bağlantılı olan Trac bileti ile çözülecektir.
Chip Bennett,

Her zaman özel bir rol veya normal bir rol için edit_theme_optionsbaşlık verilme olasılığı vardır, mevcut durumda olan ayarlar API'sinin yalnızca manage_optionsyetenekli rollerle kullanılabileceğini belirtmenin kullanışlı olabileceğini düşündüm .
t31os

5

Güncel öğreticiler ve bilgiler kullanın

Eklentiler ve Temalar hem Seçenekler ve Ayarlar sayfaları kasten ve uygulamalıdır değil itimat kopyalama ve yapıştırma modası geçmiş ve bu tür aşağıda listelenenler gibi uygun veri güvenliği, içermez yapacağız web öğreticiler.

Ne yapmama örnekleri :


1
Bağlantıların ne yapılmayacağının örnekleri olduğunu göstermek için biraz vurgulanmış bir metin ekledim, çünkü bilgiler arasında gezinmek ve bağlantıları önceden belirten paragrafı okumaksızın tıklamak kolaydır. Ben de orada iken cevap biraz daha güzel yaptı ...;)
t31os

2
Bu, tam olarak örnek öğreticilerin yanlış ve / veya eski bir şekilde yaptıklarını açıklamak için biraz açıklama kullanabilir.
Rarst

4

Ayarlar API'sini kullan

Eklentiler ve Temalar, kullanımı kolay, daha güvenli ve ayar sayfalarının çok çalışmasına dikkat eden Ayarlar API'sini kullanmalıdır:

Ayarlar API'sini kullanma hakkında iyi öğreticiler için, bkz:


API ayarları ve tema seçenekleri ile ilgili olarak bu cevapla ilgili yorumuma bakın .
t31os

1

Onay kutuları basıp seçenekleri için eklentiler ve temalar kullanmalıdır checked()ve selected()çıkışı için fonksiyonlar checked="checked"ve selected="selected"sırasıyla.


Gerçekten bir güvenlik meselesi değil. Hala çok rahat ve kullanması iyi. :)
Rarst

Şey, belki de belki de değil. Aynı şeyi başarmak için bir sürü özel kod gördüm. Daha fazla kod spagetti = güvenlik riskleri oluşturmak için daha fazla fırsat. :)
Chip Bennett

Bennet - birkaç gün önce toscho ile postalamaktan - sanırım ikimiz için de söyleyebilirim - bunun için en basit işlevler bu işlevlerden daha kolay okunur ve anlaşılır. Ben aşağı değilim, ama aynı zamanda bunu yenmiyor. Ben bu herhangi bir değer katmadığından çekirdeğin bir parçası olmamalı.
kaiser

2
Bundan daha kolay olan çocuklar ne geldi meraklıyım checked( $theme_options['whatever_option'] )ya checked( 'some_value' == $theme_options['whatever_option'] ). Bundan daha özlü hale geldiğini bilmiyorum?
Chip Bennett

1

Önek fonksiyonu ve değişken isimleri

Eklentiler tüm seçenekleri, özel işlevleri, özel değişkenleri ve eklenti-slug ile özel sabitleri öneklemelidir.

Temalar, tüm seçenekleri, özel işlevleri, özel değişkenleri ve tema slug ile özel sabitleri ön eklemelidir.


Bunu tüm sınıf isimlerinin yanı sıra post_types ve taxonomies gibi özel nesnelerin isimlerine genişletirim.
mfields


0

Yönetici sayfalarının uygun bölümlerine ayar sayfaları ekleyin

Eklentiler, üst düzey bir menü eklemek yerine add_options_page(), Eklenti Ayarları Sayfasını Settingsmenüye eklemek için bu işlevi kullanmalıdır add_menu_page().

Temalar, üst düzey bir menü eklemek yerine add_theme_page(), Tema Ayarları Sayfasını Appearancemenüye eklemek için bu işlevi kullanmalıdır add_menu_page().

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.