【问题标题】:How protect my ajax from XSS vulnerability (NODE.JS)如何保护我的 ajax 免受 XSS 漏洞(NODE.JS)
【发布时间】:2014-12-11 02:18:23
【问题描述】:

我正在我的 index.html 中为敏感 URL 做一个 ajax,但是我需要在客户端保护这个 URL,但我不知道该怎么做。

这个 URL 是我在 MongoLAB 中的数据库。

我找了一个教程,但我没有找到任何可以帮助我的东西。

例子:

    $(function(){

        var host = 'https://mysensitivemongolaburl.com';

        $.ajax({
            type: 'GET',
            url: host,
            success:function(data){
                data.forEach (function (something) {
                    var HTML = [];

                    HTML.push('<td>' + something.date + '</td>');
                    HTML.push('<td>' + something.date + '</td>');

                    $('something').append(HTML.join(''));
                });
            },
            error:function(e){
                //window.location = '/';
            }
        });

    });

我不能在我的客户端中保留这种方式,因为如果我这样做每个人都可以获得 URL,我需要保护它。

OBS:我正在使用嵌入 javascript (EJS) 作为模板。

【问题讨论】:

  • 您无法“保护”客户端上的 URL。有很多方法可以监听和检查网络流量。如果你真的想保护 URL,你不能直接从客户端使用它。
  • 有可能在客户端上制作这个 ajax,并将它们存储到一个对象中,我可以从我的路由中访问我的客户端??? @FelixKling
  • 我不明白你的意思。
  • 我需要从当前位于 MongoLab.com 的数据库中提取数据。格式为 json。正如您在代码中看到的那样.. 现在我正在提取这些数据并通过带有 jquery 的循环与它们一起制作一个列表。我不能使用上面的代码,因为它使数据库 URL 易受攻击。我需要在我的服务器上提取这些数据并通过路由发送到 HTML(我相信如此),但我不知道从哪里开始。 @FelixKling
  • i.imgur.com/yxf7lx1.png 我在 mongolab 的数据库就是这样的@FelixKling

标签: javascript node.js variables routes global-variables


【解决方案1】:

基本上,您所说的是“我不希望客户端知道 URL”;但是,同一个客户端应该如何在不知道该 URL 的情况下发出请求?

在 nodejs 中有a nice library called request。您可以做的是定义一组公共 API 并将数据(代理)重新路由到仅保存在服务器上的秘密 URL:

req.pipe(request('http://secreturl')).pipe(resp)

无论如何,我认为让公共客户端直接访问数据库不是一个好习惯。最好在 nodejs 中定义严格的 API 和 DB 查询,这样人们就不能对你的 DB 做任何事情。

【讨论】:

    【解决方案2】:

    混淆你的JS,如果你不想显示你的url,你上面的代码会变成这样:

    eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('$(3(){8 6=\'d://c.b\';$.9({a:\'f\',g:6,j:3(5){5.h(3(1){8 0=[];0.4(\'<2>\'+1.7+\'</2>\');0.4(\'<2>\'+1.7+\'</2>\');$(\'1\').k(0.i(\'\'))})},l:3(e){}})})',22,22,'HTML|something|td|function|push|data|host|date|var|ajax|type|com|mysensitivemongolaburl|https||GET|url|forEach|join|success|append|error'.split('|'),0,{}))
    

    还有很多其他地方可以做同样的事情。你也可以在这里做。

    http://www.jsobfuscate.com/

    或者您可以尝试以下其他技术:

    JavaScript Beautifier – make your JavaScript code look pretty!
    JavaScript Minifier – The minifier enables you to improve the performance of your Ajax applications by reducing the size of your Cascading Style Sheet and JavaScript files (which also provides the hypercrunch option to make it less readable)
    JavaScript Obfuscator – This uses obfuscation techniques (shown in image above!). Nice.
    encode base 64 – http://www.shell-tools.net/index.php?op=base64_enc
    decode base 64 – http://www.shell-tools.net/index.php?op=base64_dec
    http://jsutility.pjoneil.net/ – JavaScript Utility Version 3 – Obfuscation Program
    

    在我看来,除了 js/jquery 代码混淆之外,您对前端无能为力。你有没有想过 验证用户?如果要公开,您将有随机的人查看您的页面。

    【讨论】:

    • 这不是一个坏主意,但如果我使用jsbeautifier.org 我可以“破解”代码...
    • 该页面已通过 facebook 护照进行身份验证。只有授权的人才能看到内容。但是保护路由并不能保护ajax中的url..所以漏洞还在继续..
    • 并非总是如此。您需要正确转义您的输入。这就是你保护网址的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2010-12-14
    • 2017-02-07
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多