Zabezpieczenia aplikacji webowych   Leave a comment

Ten przykład pochodzi z http://css-tricks.com/app-from-scratch-8-finishing. Proponuję kwarantannę danych już po stronie klienta w JS poprzez zaimplementowanie funkcji dostępnych w PHP. Poniższa funkcja pochodzi z http://phpjs.org/ z projektu Rhino (ciekawostka – port PHP na JS, GWT robi to odwrotnie):

// Check for JS in the href attribute
function cleanHREF(str) {
    return str.replace(/<a(.*?)href=[‚"](javascript:)(.+?)</a>/gi, "Naughty!");
}

var $whitelist = ‚<b><i><strong><em><a>’,

// Strip HTML tags with a whitelist
function strip_tags(str, allowed_tags) {

    var key = ”, allowed = false;
    var matches = [];
    var allowed_array = [];
    var allowed_tag = ”;
    var i = 0;
    var k = ”;
    var html = ”;

    var replacer = function(search, replace, str) {
        return str.split(search).join(replace);
    };

    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z]+)/gi);
    }

    str += ”;

    // Match tags
    matches = str.match(/(</?[S][^>]*>)/gi);

    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
            // IE7 Hack
            continue;
        }

        // Save HTML tag
        html = matches[key].toString();

        // Is tag not in allowed list? Remove from str!
        allowed = false;

        // Go through all allowed tags
        for (k in allowed_array) {
            // Init
            allowed_tag = allowed_array[k];
            i = -1;

            if (i != 0) { i = html.toLowerCase().indexOf(‚<‚+allowed_tag+’>’);}
            if (i != 0) { i = html.toLowerCase().indexOf(‚<‚+allowed_tag+’ ‚);}
            if (i != 0) { i = html.toLowerCase().indexOf(‚</’+allowed_tag)   ;}

            // Determine
            if (i == 0) {
                allowed = true;
                break;
            }
        }

        if (!allowed) {
            str = replacer(html, "", str); // Custom replace. No regexing
        }
    }

    return str;
}

Dzięki temu wywołanie SUBMIT w AJAX będzie wyglądało tak:

// AJAX style adding of list items
$(‚#add-new’).submit(function(){
    // HTML tag whitelist. All other tags are stripped.
    var $whitelist = ‚<b><i><strong><em><a>’,
        forList = $("#current-list").val();
        newListItemText = strip_tags(cleanHREF($("#new-list-item-text").val()), $whitelist),

Posted 15 Maj 2010 by marekwmsdn in JavaScript

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: