Bug Tracker

Ticket #2567: json_with_security.diff

File json_with_security.diff, 3.0 KB (added by eventualbuddha, 14 years ago)
  • jquery/src/ajax.js

    diff --git a/jquery/src/ajax.js b/jquery/src/ajax.js
    index 3e72488..947b6be 100644
    a b jQuery.extend({ 
    143143                timeout: 0,
    144144                contentType: "application/x-www-form-urlencoded",
    145145                processData: true,
     146                filter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
    146147                async: true,
    147148                data: null,
    148149                username: null,
    jQuery.extend({ 
    318319                                        // Watch for, and catch, XML document parse errors
    319320                                        try {
    320321                                                // process the data (runs the xml through httpData regardless of callback)
    321                                                 data = jQuery.httpData( xml, s.dataType );
     322                                                data = jQuery.httpData( xml, s.dataType, s.filter );
    322323                                        } catch(e) {
    323324                                                status = "parsererror";
    324325                                        }
    jQuery.extend({ 
    442443                return false;
    443444        },
    444445
    445         httpData: function( r, type ) {
     446        httpData: function( r, type, filter ) {
    446447                var ct = r.getResponseHeader("content-type");
    447448                var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0;
    448449                var data = xml ? r.responseXML : r.responseText;
    jQuery.extend({ 
    450451                if ( xml && data.documentElement.tagName == "parsererror" )
    451452                        throw "parsererror";
    452453
     454                // remove security measure if one is used
     455                if ( filter )
     456                        data = data.replace(filter, "$1");
     457
    453458                // If the type is "script", eval it in global context
    454459                if ( type == "script" )
    455460                        jQuery.globalEval( data );
    456461
    457462                // Get the JavaScript object, if JSON is used.
    458                 if ( type == "json" )
     463                if ( type == "json" ) {
    459464                        data = eval("(" + data + ")");
    460 
     465                }
    461466                return data;
    462467        },
    463468
  • new file jquery/test/data/js_with_security.js

    diff --git a/jquery/test/data/js_with_security.js b/jquery/test/data/js_with_security.js
    new file mode 100644
    index 0000000..1999ee5
    - +  
     1/*-secure- window.js_with_security_ran = true; */
  • new file jquery/test/data/json_with_security.js

    diff --git a/jquery/test/data/json_with_security.js b/jquery/test/data/json_with_security.js
    new file mode 100644
    index 0000000..ff7e378
    - +  
     1/*-secure- { "data": {"lang": "en", "length": 25} } */
  • jquery/test/unit/ajax.js

    diff --git a/jquery/test/unit/ajax.js b/jquery/test/unit/ajax.js
    index 15c4ed7..14ae2b3 100644
    a b test("$.getJSON(String, Function) - JSON object with absolute url to local conte 
    662662        });
    663663});
    664664
     665test("$.getJSON(String, Function) - filter out security token", function() {
     666        expect(2);
     667
     668        stop();
     669        $.getJSON(url("data/json_with_security.js"), function(json) {
     670                ok( json.data.lang == 'en', 'Check JSON: lang' );
     671                ok( json.data.length == 25, 'Check JSON: length' );
     672                start();
     673        });
     674})
     675
    665676test("$.post(String, Hash, Function) - simple with xml", function() {
    666677        expect(4);
    667678        stop();
    test("$.ajax - simple post", function() { 
    764775        });
    765776});
    766777
     778test("$.ajax - get with security filter", function() {
     779        expect(1);
     780        stop();
     781        $.ajax({
     782                type: "GET",
     783                url: url("data/js_with_security.js"),
     784                success: function(){
     785                        ok( window.js_with_security_ran, 'Check for GET' );
     786                        start();
     787                }
     788        });
     789});
     790
    767791test("ajaxSetup()", function() {
    768792        expect(1);
    769793        stop();