kullanıcı tarafından sağlanan form girişi önceden doldurulmuş Sanitizing

2 Cevap php

Ben metin girişini kabul eden bir form var. Ben bu tür & gibi karakterleri kabul edebilmek olmak istiyorum ve; ve> ve <, kullanıcı tarafından temin edilen veriler için yararlı olan karakter. Ben kullanıcı, örneğin, söylemek mümkün olmak istiyorum

The ampersand (&) is encoded as & (and I see from the preview that I can't even do that here - it should look like The ampersand (&) is encoded as &amp; but I had to type in amp;amp; after the ampersand to get that to look right.) (btw, the preview is cool, but I can't count on users having scripts enabled)

Ben verilerini ayrıştırmak ve onunla bir sorun varsa, ben düzenleme ve yeniden başvuru için aynı alanda doldurulmuş aynı biçimde geri kullanıcıya, kullanıcının girdisini, mevcut.

Ben ham verileri sunmak, ben tarayıcısı tarafından yürütüldüğünde (örneğin komut dosyaları veya HTML gibi) düşman girişi sahip riski çalıştırın. Onu (örneğin htmlspecialcharacters yoluyla gibi) filtre Ancak, daha sonra kullanıcı o yazmış karakteri (diyelim işareti) (bir temsilini) görmek istiyorsunuz, ama o zaman tekrar gönderdiğinde, o = aslında = teslim edilecek Olarak çıkıyor, hatta bir işareti içerir (& gibi göründüğünü, bu durumda) değiştirme. Girişi ile halen bir sorun varsa, bu düzenleme için tekrar sunulacak, ve biz yedek derin bir seviye olacak.

Ne Kullanıcı gerçekte gönderir verilerin dezenfekte sürümüne aynıdır yalnızca kullanıcı verileri kabul edilir. Bu sunucuda bir metin dosyası için mukadder ve bir e-posta web sitesi arkasında kuruluşa gönderilir.

Ben "yanıtlanabilir bir soru" olduğunu varsayalım "Bu bile mümkün mü?"

Jose

edit:

<?php
$var=$_GET["test2"];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">

<title>Input Escape Test</title>
</head><body>
The php parser would store the following input:<br>
<?php echo $var ?>
<br>

<form method="get" action="test.php"><p>
  <label for "test2">Test - question five: <br>type in a character on the first line<br>and its HTML entity on the second line.
  <textarea name="test2" cols="50" rows="3"><?php echo  $var; ?></textarea><br/>
  <input type="submit"/>
</p></form>
</body></html>

results in a form where the user attempts to answer the question with ampersand ampersand a m p semicolon. IF that gets rejected (say, because of other illegal characters), the user is presented with his input back, minus the stripped characters. However, the a m p semicolon is also stripped from view (though it's in the source). The user will then attempt to add another a m p semicolon to the displayed result.

The only way the user gets to see ampersand a m p semicolon displayed (upon rejected input), is to type in ampersand a m p semicolon a m p semicolon

Nihayet memnun, kullanıcı tıkladığında tekrar göndermek ve amfi virgül görünüşte tekrar kaybolur. Kullanıcı, (teslim) cevap olarak saklanır ne olacağını bilmiyor.

I want the user to be able to type in: ampersand a m p semicolon and, upon rejection, see ampersand a m p semicolon and upon acceptance, store ampersand a m p semicolon

Jose

2 Cevap

Evet, bu Javascript yanı sıra sunucu tarafı kodu mümkündür. Eğer javascript etkin olan kullanıcıları saymak olmaz dediğim gibi, ben size sunucu tarafında dönüşüm bu tür yapmak istiyorum varsayıyorum? Sadece kullanıcı sunucu tarafı kodu için bir POST isteği ile form verilerini göndermek ve geri html verileri yazarken orada her <> meydana gelmesi, ve, "ve" kendi varlık forma Dönüşümü tepki sayfa. Bu o kullanıcı tarafından tam olarak girildiği gibi tarayıcısında göstermek olacaktır.

Edit: Sorry, I didn't read your question carefully enough. You should be able to use just one level of escaping, i.e. to write &amp; for a '&' and not &amp;amp;. This one level will be stripped when the browser parses your page and will be disappeared from the data when it get's sent back as form data. Have a look at the generated html code and try to find out what makes you need that second level of escapes.

Yorumlarına yanıt olarak Edit2: İşte IE 8.0 ve Firefox beklendiği gibi çalışır basit bir test sayfası. Eğer gönderme tuşuna bastığınızda (ve sadece URL kodlama% 26) tarayıcınızın adres çubuğuna sunucusuna gönderilen oluyor ne göreceksiniz. Eğer &Amp; Gördüğünüz gibi değerinden ve sunucusuna gönderilen verilerin sıyrıldı alır.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
<meta http-equiv="Content-type" content="text/html;charset=ISO-8859-1" />
<title>Input Escape Test</title>
</head><body>
<form method="get" action=""><p>
  <input name="test1" type="text" size="30" value="hello &amp; test"/><br/>
  <textarea name="test2" cols="50" rows="3">hello &amp; test</textarea><br/>
  <input type="submit"/>
</p></form>
</body></html>

Bir veritabanına, tarayıcı, PHP üzerinden veri bastırıyor zaman, her yerde, sen alıcı sonuna kadar kabul edilebilir birine bunu gösterimini değiştirmek zorundadır.

Tarayıcıya şeyler gönderme durumunda, htmlentities dönüştürücü gerekir:

print "<input type='text' name='inp' value='" . htmlentities($_POST['inp']) . "'>\n";

C.