giriş xss korumak için nasıl URL

3 Cevap php

Ben bir url kabul form metin alanı var. Form gönderildiğinde, ben uygun anti-sql-enjeksiyon ile veritabanına bu alan eklemek. Benim sorum olsa xss ilgili.

Bu giriş alanı bir url ve ben sayfada tekrar göstermek gerekir. Nasıl ben (ben zaten sql enjeksiyon halledilir beri hiçbir şey gerekli olduğunu düşünüyorum) ve yol out of veritabanı üzerinde veritabanına yolda xss korumak mı?

Kullanıcının biz bunu basitleştirerek ediyorum, bu gibi var ve sql enjeksiyon hakkında merak etmeyin lütfen farzedelim. Nerede bundan sonra buradan gideceğiz?

$url = $_POST['url'];

Teşekkürler

3 Cevap

Bu, ihtiyacınız (örneğin <body> ve </body> arasına veya <div> ve </div> arasında olduğu gibi), HTML içeriği koymak olacak varsayarsak 5 özel bir XML karakterleri kodlamak için (&, <,>, ", '), ve OWASP çizgi (/) gibi. PHP yerleşiğini dahil önerir, htmlentities() will do the first part for you, and a simple str_replace() çizgi yapabilirsiniz:

function makeHTMLSafe($string) {
    $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
    $string = str_replace('/', '&#x2F;', $string);
    return $string;
}

Ancak, böyle bir <a, o zaman farklı bir dizi kodlamak gerekir ve href= fıkra gibi bir HTML niteliğine, içine kusurlu değerini koyarak gidiyoruz karakter ([boşluk]% * +, - /; <=> ^ ve |) ve çift tırnak HTML niteliklerini gerekir:

function makeHTMLAttributeSafe($string) {
    $scaryCharacters = array(32, 37, 42, 43, 44, 45, 47, 59, 60, 61, 62, 94, 124);
    $translationTable = array();
    foreach ($scaryCharacters as $num) {
        $hex = str_pad(dechex($num), 2, '0', STR_PAD_LEFT);
        $translationTable[chr($num)] = '&#x' . $hex . ';';
    }

    $string = strtr($string, $translationTable);
    return $string;
}

Nihai endişe yasadışı UTF-8 karakter-zaman bazı tarayıcılarda teslim, bir kötü şekillendirilmiş UTF-8 bayt dizisi bir HTML işletmenin patlak verebilir. Bu karşı korumak için, sadece size olsun tüm UTF-8 karakter geçerli olduğundan emin olun:

function assertValidUTF8($string) {
    if (strlen($string) AND !preg_match('/^.{1}/us', $string)) {
        die;
    }

    return $string;
}

Bu düzenli ifadeye u değiştirici bir Unicode eşleşen regex yapar. Tek bir chararchter eşleştirerek, ., biz tüm dize geçerli Unicode emin konum.

Bu tüm bağlam-bağımlı olduğundan, kullanıcıya çıktı sunmadan önce son mümkün an-sadece bu kodlama birini yapmak en iyisidir. Bu uygulamada olmak da kolay kaçırdığınızı herhangi bir yerleri görmek için yapar.

OWASP onların XSS prevention cheat sheet hakkında bilgi büyük bir sağlar.

Bir kullanıcıya göstermeden önce htmlspecialchars ile kodlamak gerekir.