Ben bazı deyimsel PHP kodu bulundu, ancak ben bir net (daha rahat) yolu istiyorum

5 Cevap php

Ben PHP kullanıyorum

  1. bir HTML formu uygulamak ve
  2. form tarafından gönderilen veriler doğrulama için.

Iki komut vardır. Ilk tarafından atanan değerleri hakkında bilmeniz ikinci komut için için, ben aşağıdaki kod ile bir POST yöntemi kullanıyorum:

foreach (${"_".$_SERVER["REQUEST_METHOD"]} as $k => $v) $$k = $v;

POST (anahtar => değer) elemanların her almak (veya GET) ilişkisel dizi ve bu adları ve değerleri ile değişkenleri oluşturmak için.

Ben bu kodu bulundu, ama ben onun işini nasıl yaptığını çalıştı kere ben, onunla etkilendim nerede hatırlamıyorum.

Bu iyi çalışıyor, ama ben birkaç ay içinde ona geri giderseniz ben biliyorum, ben geniş Yorum eklemek sürece nasıl çalıştığını hatırlamak olmaz, ve ben hemen anlamak ve iyi uyacağı bir şey kullanmayı tercih ediyorum benim non-deyimsel tarzı.

Herkes herhangi bir öneriniz var mı?

CONCLUSION:

I ekstraktı () fikir gibi ve muhtemelen bunu kullanacağız. Teşekkür tüm.

Cevaplar kaldırdı bazı noktaları aşağıda beni rahatsız değil neden belki de açıklamak gerekir:

  • Form Şirket intranet üzerinde sadece görülebilir. Kullanıcıların bu saldırı nasıl? 'which button to click on bulmaktan çok daha az sorun var
  • X ve y koordinatları, ölçümler, lot numaraları: Kullanıcıların form alanlarına basit değerleri girin. Doğrulama basittir. Bu işe yaramazsa, ben sitede değilim, onlar gelip bana neden isteyeceğiz.
  • Değerler sadece benim apps erişim DB sonunda. SQL enjeksiyon teşkil edebilecek bir şey izin vermez.
  • Ben diğer geliştiricilerin hakkında endişelenmenize gerek yok. I'm the only developer ve ben sadece basit web uygulamaları yapacak her şey için şişirilmiş Windows uygulamalarını kullanarak kurumsal kültürünü aşmaya çalışıyorum. Ben Access & ile her şeyi yapabilir zaman ben bir MySQL veritabanı kullanmak neden diğer gün üst düzey bir mühendis ile harvardırtli bir tartışma vardı Excel.

Ama ben kendimi başlamak gerekir ...

5 Cevap

isteği vars ayıklanan az söylemek, iyi uygulama güvenlik akıllıca değil ...

aklınızda ile, burada bazı kod:

<?php    
// $req = ${"_".$_SERVER["REQUEST_METHOD"]}
if ($_SERVER["REQUEST_METHOD"] == 'GET') {
    $req = $_GET;
else {
    $req = $_POST;
}

extract($req);
?>

veya basitçe:

<?php 
extract($_REQUEST);
?>

extract, güvenlik risklerini minimize yardımcı olabilir ekstra seçenekler ekleyebilirsiniz için dokümantasyon sayfasını kontrol etmeyin ..

Bir saldırgan kolayca diğer değişkenleri değiştirmek gibi bunu yaparken, potansiyel bir güvenlik riski oluşturuyor.

Sadece $_REQUEST superglobal kullanarak düşündünüz mü?

yanlış bir yol. Sadece kullanın:

extract($_POST);
or
extract($_GET);

Evet, bunu yapmak için daha az deyimsel yolu var. Php.ini ayarını "register_globals" etkinleştirebilirsiniz.

Bunu yapmadan önce Ancak, böyle parlak bir fikir olmayabilir neden olarak bir ipucu elde etmek için "register_globals güvenlik php" için google emin olun.

Genellikle size bu şekilde gönderilen ne güvenmek iyi değil konuşma. Bir başkaları tarafından önerilen bu gerçekten gitmek istiyorum ama ben onun yerine bu öneririm yolu ise, () ekstresi kullanın:

Bir şeklidir Her script gibi kabul alanların listesini olmalıdır:

$fields = array('name', 'age', 'city');

Ve sonra yapın:

$form = array();
foreach ($fields as $field) {
  $form[$field] = $_POST[$field];
}

Sadece müşteri göndermek için karar ne olursa olsun dayalı küresel değişkenleri oluşturmak, yanlışlıkla orada olmak, ancak müşteriden keyfi değerleri ile değiştirilir beklediğiniz bir şey yazılmadan olabilir. Bu bir güvenlik açığı oluşturabilir. Sadece ne beklediğiniz kabul ve başka bir şey için daha güvenli bir uygulamadır.