htmlspecialchars () - Nasıl ve ne zaman birden fazla kullanımını kullanmak ve önlemek için

3 Cevap php

Benim patron için bir PHP intranet inşa ediyorum. Basit bir müşteri, sipariş, alıntı sistemi. Bu İnternetten erişimi engellendi ve sadece 3 kişi tarafından kullanılacaktır. Ben doğrulama olduğum gibi güvenlik ile çok ilgili değilim. Javascript tüm makinelerde devre dışı bırakır.

Ben sorun budur:

  1. Çalışan aşağıdaki :;[]"' vb herhangi birini içeren bir forma geçerli bir veri girdiğinde
  2. Bir validationAndProcessing.php sayfaya $ _POSTS bu veri oluştururlar ve çalışan alanlara verileri girdiğiniz veya belirler. Onlar olmasaydı bunlar veri giriş sayfasına geri yönlendirilen ve kaçırmış alan kırmızı vurgulanır.
  3. htmlspecialchars () onlar daha önce girilen ne formuna yeniden doldurulan tüm verilere uygulanır.
  4. Başarılı bir veri veritabanına girilir ve çalışan veri sayfasını görüntülemek için alınmış ise Form sonra, validationAndProcessing.php sayfaya yollanılır.

Benim soru şudur:

Bir çalışanın art arda 1. adımda hiçbir veri girerse, () verilerine uygulanan htmlspecialchars zorunda adım 1 ve 4 arasında her zaman hareket devam edecektir.

So that:- &
becomes:- &
becomes:- &
becomes:- &

vb.

Ben htmlspecialchars (nasıl durdurabilirim) zaten temizlenmiş verilere birden çok kez uygulanan?

Thanks, Adam

3 Cevap

Giriş manual page on htmlspecialchars:

dize htmlspecialchars (string $ dizge [, int $ öncelem_türü = ENT_COMPAT [, string $ charset [bool $double_encode = true]]])

$double_encode seçenek aradığınızı olmalıdır.

Bir düzgün kurmak veri akışı olsa da, bu shouldn't ya da zaten HTML kodlanmış karakterleri içeremez olabilir olabilir kullanıcı veya bir 3. parti hizmetinden gelen veriler varsa dışında, hiç bir olasılık. :-). (Ben bir kaç yanlış kurmak veri inşa değil değil benim kariyerimde akar. Ama onlar temiz ve iyi tanımlanmış konum çok önemlidir yüzden biliyorum bu yüzden

Sadece asla başka bir yerde, HTML çıkış htmlspecialchars kullanıyor olmalıdır.

<input name="var" value="<?php echo htmlspecialchars($var)?>">

: $var o çıktı kodlanmış değer olur HTML bir işareti, diyelim içeriyorsa

<input name="var" value="this&amp;that">

Ancak, kullanıcı sadece kendi giriş alanına this&that görecek, ve sunulması üzerine, $_GET['var'] kodlanmış sürüm, this&that olmayacaktır.

Şeyler PHP tarafında yapmak isteyebilirsiniz tek şey sihirli tırnak üzerinde iseniz eğik kaldırmak olduğunu:

if (get_magic_quotes_gpc())
    $var = stripslashes($_POST['var']);
else
    $var = $_POST['var'];

Oradan, veritabanında olmayan kodlanmış HTML sürümlerini ham verileri saklamak gerekir. SQL enjeksiyon önlemek normal mysql fonksiyonlarını kullanarak eğer mysql_real_escape_string kullanın, ya da bunun yerine PDO kullanın.

So that:- & becomes:- & becomes:- & becomes:- & etc..

You are wrong. Try it and see

<form>
<input name="a" value="<?php echo htmlspecialchars($_GET["a"])?>">
<input type=submit>
</form>

GO TRY IT AND SEE