【问题标题】:Is Qooxdoo protected against XSSQooxdoo 是否受到 XSS 保护
【发布时间】:2016-06-13 14:20:07
【问题描述】:

我正在寻找有关 Qooxdoo 安全性的信息。 我想检查我的应用程序与OWASP top 10 需要回顾的一点是 XSS OWASP A3 XSS

我如何确保 Qooxdoo 能够抵御 XSS 攻击? Qooxdoo 是否使用了一些消毒工具?

已解决

所有讨论的简短回答。是的,Qooxdoo 是 XSS 安全的。默认情况下,不会执行任何字段中的 javascript 值。

但是,如果你使用rich=true,你必须检查输入/输出

【问题讨论】:

  • 您认为 OWASP 有哪些特定领域适用? OWASP 似乎与服务器安全而不是客户端相关,即如果客户端受到威胁,问题是服务器是否可以保护自己。
  • 你说得对,我想对照 OWASP 检查我的完整申请。我使用 Jspresso 和 docker,所以我可以检查所有 OWASP 点。但是对于 XSS 来说,必须检查客户端,在我的情况下是 Qooxdoo,这就是为什么我只为 Qooxdoo 提出问题

标签: xss qooxdoo jspresso


【解决方案1】:

一个常见的 XSS 攻击向量是攻击者以某种方式将 JS 代码输入到 Web 应用程序中,这样该代码然后显示在网页的 DOM 中并因此被激活的情况。

为了防止这种 XSS,您必须确保后端服务器不会将用户生成(未清理)的 html 发送到浏览器...(这与 qooxdoo 无关)。

也就是说,常规的 qooxdoo 小部件通常不会将数据显示为 html,因此即使没有智能服务器,您也相当安全。例外是 qx.ui.basic.Label 小部件及其后代。如果您设置rich 属性,Label 小部件能够直接显示HTML。 rich 属性默认设置为 false,但如果启用它,则必须确保不显示“危险”的 html 内容。

只有极少数(非必需的)qooxdoo 小部件允许您将 HTML 代码插入 DOM。在这些情况下,您必须注意清理数据。有问题的小部件是:

qx.ui.embed.Html
qx.ui.table.cellrenderer.Html
qx.ui.progressive.renderer.table.cell.Html
qx.ui.virtual.cell.Html
qx.ui.virtual.layer.HtmlCell
qx.ui.virtual.layer.HtmlCellSpan

如果您确实使用 qx.html.*qx.bom.*qx.dom.* 对象直接使用 DOM,那么您将超出 qooxoo 的范围,必须注意采取相应的措施。

另一个重要的攻击媒介是身份验证 cookie。大多数攻击都是通过让浏览器在用户不知道的情况下将请求与 cookie 一起发送到其服务器来实现的。

Qooxdoo 本身确实要求您使用 cookie。由于 qooxdoo 应用程序设计运行在单个浏览器窗口中,因此您可以在不使用 cookie 的情况下工作。实现这样的事情的一种简单方法是拥有一个“服务器访问单例”,它负责与后端的所有通信,并在添加到每个请求的特殊标头中提供访问令牌。

下面的代码可以作为 cookie 问题的指南。

qx.Class.define('myapp.Server', {
    extend : qx.io.remote.Rpc,
    type : "singleton",

    construct : function() {
        this.base(arguments);
        this.set({
            timeout     : 60000,
            url         : 'QX-JSON-RPC/',
            serviceName : 'default'
        });
    },

    properties: {
        sessionCookie: {
            init: null,
            nullable: true
        }
    },

    members : {
        /**
         * override the request creation, to add our 'cookie' header
         */
        createRequest: function() {
            var req = this.base(arguments);
            var cookie = this.getSessionCookie();
            if (cookie){
                req.setRequestHeader('X-Session-Cookie',this.getSessionCookie());
            }
            return req;
        }
    }
});

如果您在myapp.uiLogin 中提供登录弹出窗口,您可以替换 标准callAsync,如果后端对您的请求不满意,则添加以下内容以弹出登录窗口。

 /**
 * A asyncCall handler which tries to
 * login in the case of a permission exception.
 *
 * @param handler {Function} the callback function.
 * @param methodName {String} the name of the method to call.
 * @return {var} the method call reference.
 */
callAsync : function(handler, methodName) {
    var origArguments = arguments;
    var origThis = this;
    var origHandler = handler;
    var that = this;
    var superHandler = function(ret, exc, id) {
        if (exc && exc.code == 6) {
            var login = myapp.uiLogin.getInstance();

            login.addListenerOnce('login', function(e) {
                var ret = e.getData();
                that.setSessionCookie(ret.sessionCookie);
                origArguments.callee.base.apply(origThis, origArguments);
            });

            login.open();
            return;
        }

        origHandler(ret, exc, id);
    };

    if (methodName != 'login') {
        arguments[0] = superHandler;
    }

    arguments.callee.base.apply(this, arguments);
},

查看the CallBackery application,了解它在实际应用程序中的工作原理。

【讨论】:

  • 我不确定为什么这是关于 Qooxdoo 对 XSS 免疫的答案。
  • 您想特别保护自己免受哪种 xss 攻击...?许多都以某种方式涉及 cookie,因此通过编写一个不使用 cookie 的应用程序,您可以非常轻松地绕过一大堆...
  • 许多根本不涉及cookies。即使那些确实涉及 cookie 的问题也可以通过标准 XSS 防御得到更好的缓解。我什至不确定这个答案应该防御的 XSS 漏洞是什么。 (或者这如何减轻它,你只是用不同形式的输入替换一种形式的输入,但根本没有改变输入它的内容)
  • 我认为这个问题专门针对客户端 XSS(通过使用标准 qooxdoo 小部件在 DOM 中注入有效 javascript 的能力)以及 qooxdoo 是否专门处理它。见owasp.org/index.php/…
  • 我的理解是完全依赖于应用代码。如果它使用rich=true 标签(不是默认值)来显示恶意用户输入的值并且后端不执行任何过滤,那么是的,javascript 代码 将 i> 执行。开发人员(或他使用的框架)有责任确保在将键入的字符串设置为rich qooxdoo 标签之前将其从任何恶意代码中删除。从 4.3 开始,Jspresso 将使用 OWASP java-html-sanitizer 库对传入值进行系统过滤。
猜你喜欢
  • 2012-08-17
  • 2010-12-14
  • 1970-01-01
  • 2016-02-12
  • 2011-11-07
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多