2016-03-24 12 views
0

POST tarafından gönderilen bir formun tüm değerlerini almak ve bunları farklı değişkenlere kaydetmek için özüm kullanıyorum. Şüphesiz, ekstrakt() bayrağıyla EXTR_SKIP kullanmak, güvenlik sorunlarını önlemek için 'en iyi yol' şeklindedir, örneğin (belki?) Bilmediğim formun ve diğer güvenlik sorunlarının üzerine yazılması (Web güvenliği hakkında bilgim) oldukçaGüvenlik sorunlarını önlemek için EXTR_SKIP bayrağıyla birlikte ekstrakt() kullanma

+1

Bunu neden $ $? POST? Değişkeni ile uğraşmak yerine kullanmak istersiniz? – Jon

+0

@Jon Çünkü çok fazla girdim var ve her zaman en hızlı yolu öğrenmek, daha üretken olmak (açıkçası güvenlikten haberdar olmak). –

+1

Bu, bunun için istemeyeceğiniz bir çözüm. register_globals() 'bir sebepten dolayı otomatik olarak kapatıldı.^^ Hala, $ _POST' veya '$ _GET' dizilerinde iken, bununla başa çıkmak en iyisidir. Bunu yapmak, kodunuza bakarken, sıkı kullanıcı girdisinin ne olduğunu bildiğiniz anlamına gelir ve normal bir değişkene taşıdığınızda, istediğiniz şekilde dezenfekte edip etmediğinizi kısaca anlayabilirsiniz. – Jon

cevap

2

Ben girdilerin çok şey var ve ben her zaman (tabii ki hızlı okuyabilmek için güvenlik

Optimize farkında daha verimli olmasını, hızlı yolunu öğrenmek ister) sınırlıdır hızlı yazabilme becerisi yok

Eğer gerçekten bu rotaya gitmek istiyorsanız:

<?php  
// Important, ONLY allow the indices you really want to support 
$whitelist = array_key_whitelist($_POST, [ 
    'foo', 
    'bar', 
    'baz', 
    'moo', 
    'usr', 
    'lol' 
]); 
// Then run extract() as expected 
extract($whitelist, EXTR_SKIP); 

Ve işlev tabii ki: Bu, ileride, değişkenler kendi aklı başında olarak ayarlanmış almayabilir bir döngü çerçevesinde EXTR_SKIP ile extract() daha marjinal güvenlidir

<?php 
/** 
* Only allow the whitelisted array keys to exist: 
* 
* @ref http://stackoverflow.com/a/36193403/2224584 
* @param array $input 
* @param array $allowedKeys 
* @return array 
*/ 
function array_key_whitelist(array $input, array $allowedKeys = []): array 
{ 
    $return = []; 
    foreach ($allowedKeys as $key) { 
     if (array_key_exists($key, $input)) { 
      $return[$key] = $input[$key]; 
     } 
    } 
    return $return; 
} 

Önceden tanımlanmışlarsa değerler.

Fakat cidden, bu bir alıştırmadan çok daha güzel bir koddur. aslında izlemeniz gerekir.

İlgili konular