Parola yardımcıları ve güvenlik
3 dk okuma
Password alanları (ve parola türündeki Global Data değişkenleri), saklanan bir sırrın çıktıda asla görünmeyeceği şekilde tasarlanmıştır. İki fonksiyon, bunları kendi kodunuzda kullanmanızı sağlar. Üç depolama modunun nasıl çalıştığı Password sayfasında anlatılır.
wpmcf_check_password()
wpmcf_check_password( string $group_key, string $field_key, string $password, mixed $object = null, array $args = [] ): boolDüz metin $password değeri, üst düzey bir Password alanının saklanan değeriyle eşleştiğinde true döner. Hash'lenmiş, şifrelenmiş ve düz metin depolamada çalışır.
Şu durumlarda false döner:
- parola eşleşmiyorsa (karşılaştırma tam ve büyük/küçük harfe duyarlıdır);
$passwordboşsa;- alan boşsa (hiç ayarlanmamış veya temizlenmiş);
- alan bir Password alanı değilse;
- grup, alan veya nesne bilinmiyorsa ya da nesne referansı geçersizse.
$args şunları kabul eder: context (post, user, term, comment, options, widget) ve widget_* argümanları; $object her nesne referansını kabul eder.
// Gate a download behind a per-post password field.
if ( wpmcf_check_password( 'download', 'access_code', sanitize_text_field( wp_unslash( $_POST['code'] ?? '' ) ), $post_id ) ) {
// serve the file
}
// Options-page secret.
wpmcf_check_password( 'integration', 'webhook_secret', $supplied, 'option' );Üç depolama modunun tamamı için yazılarda, kullanıcılarda ve seçeneklerde doğrulandı.
wpmcf_get_password()
wpmcf_get_password( string $group_key, string $field_key, mixed $object = null, array $args = [] ): ?stringBir Password alanının okunabilir sırrını döndürür; alan şifrelenmiş veya düz metin olarak saklanmış olmalıdır. null ise hash'lenmiş bir parola, boş bir alan, Password olmayan bir alan veya başarısız bir okuma için döner.
$apiKey = wpmcf_get_password( 'integration', 'api_secret', 'option' );
if ( $apiKey !== null ) {
wp_remote_get( $url, [ 'headers' => [ 'Authorization' => 'Bearer ' . $apiKey ] ] );
}Sonucu asla yazdırmayın. Şifrelenmiş değerler sitenin SECURE_AUTH_SALT değerinden türetilen bir anahtar kullanır: salt değerleri değişirse bunların şifresi artık çözülemez ve null döndürülür.
Diğer fonksiyonların bir Password alanıyla yaptıkları
Hash'lenmiş, şifrelenmiş ve düz metin bir alan için doğrulandı:
Çağrı | Sonuç |
|---|---|
| saklanan mühürlü dize: |
|
|
| hiçbir şey yazdırmaz |
| değeri alanın Store as ayarına göre mühürleyerek saklar |
| saklanan değeri korur, |
| temizler |
|
|
| izin verilmez: hiçbir şeyle eşleşmez |
REST | asla döndürülmez ve yazmada reddedilir ( |
| boş |
Bir Password alanının yazdırılmasına izin verme
Filtre wpmcf/field/the_password (varsayılan false), yazdıran fonksiyonların düz metin ve şifrelenmiş değerleri göstermesine izin verir (hash'leri asla). Doğrulandı: filtre true döndürdüğünde düz metin parola yazdırıldı; hash yine hiçbir şey yazdırmadı. wpmcf/global/the_password aynısını Global Data için yapar (doğrulandı: açıkken wpmcf_the_global() ve [wpmcf_global], auto biçimiyle şifresi çözülmüş değeri yazdırır). Genel çıktıda ikisini de kapalı tutun; yalnızca kontrol ettiğiniz kod yollarında etkinleştirin.
Global Data parolaları
Türü password olan bir Global Data değişkeni depolamada şifrelenir. wpmcf_get_global(), şifresi çözülmüş değeri döndürür; bu yüzden asla yazdırmayın. wpmcf_the_global(), [wpmcf_global] ve {{ glb.key }} bunun için hiçbir şey yazdırmaz. Bkz. Global Data fonksiyonları.
Güvenlik kontrol listesi
- Her ham değeri kaçışlayın.
wpmcf_get_*kaçışlanmamış veri döndürür. Yazdırdığınız yere göreesc_html(),esc_attr(),esc_url(),wp_kses_post()veyawp_json_encode()kullanın ya da birwpmcf_the_*fonksiyonu kullanın. - Yazma işlemlerinde yetki kontrolü yapılmaz.
wpmcf_update_field(),wpmcf_delete_field(),wpmcf_update_option_field(),wpmcf_delete_option_field()vewpmcf_update_global()çağıran koda güvenir. Bunları ziyaretçi girdisiyle çağırmadan önce bir nonce'u vecurrent_user_can()sonucunu doğrulayın. - Okumalar da kısıtlanmaz.
wpmcf_get_field( ..., 'user_5' )başka bir kullanıcının değerini döndürür;wpmcf_get_field( ..., $private_post_id )özel bir yazının değerini döndürür. Görünürlüğü yalnızca shortcode, blok ve binding'ler uygular. - REST
wpmcfözniteliği yayımlanmış yazılar için herkese açıktır. Bir yazıyı okuyabilen herkes, REST etkin gruplarını da okuyabilir. Yazmak içinedit_postyetkisi gerekir. - Password olmayan alanlara sır koymayın. Metin alanları REST, shortcode ve dışa aktarmalar üzerinden okunabilir.
- Hash'lenmiş parolaları tercih edin ve karşılaştırmayı
wpmcf_check_password()ile yapın. Şifrelenmiş depolamayı yalnızca kodunuzun sırrı başka bir servise göndermesi gerektiğinde kullanın. - İçinde
{{ }}bulunan değerler yalnızca güvenilir yazarlar için çalışır. Yazı değerlerindeki ifadeler yalnızca yazının yazarı filtrelenmemiş HTML kullanabiliyorsa çalışır; yorumlarda hiçbir zaman çalışmaz. Bkz. Değerleri okuma. - Sorgular enjeksiyona karşı güvenlidir.
wpmcf_queryher değeri bağlar ve her tanımlayıcıyı doğrular; hatalı girdi, güvenlik açığı bırakmak yerine hiçbir şeyle eşleşmez. Bkz. Yazıları sorgulama.
Hâlâ takıldınız mı? Destek ile iletişime geçin