在checmarx中反射的XSS和存储的XSS

时间:2015-03-17 09:47:12

标签: salesforce xss visualforce apex

我有2页

  1. 父页面包含一个链接,点击此链接我正在调用javascript函数

  2. function callPage( productId ){
       var product = document.getElementById(ProductId).id;
       var OpptyId = {!oppty.Id};
       var urlToOpen = "/apex/" + '{!namespacePrefix}' + 'testPage?product='+product+'&OpptyId'=OpptyId ;
    
       window.open(urlToOpen ,'','resizable=0,location=0,status=0,scrollbars=0,width=850,height=350,top=100,left=220')
    }
    

    其中Oppty Id来自控制器。

    1. 在我的子页面中,我将所有这些参数作为

    2. ProductValueId = ApexPages.currentPage().getParameters().get('product');
      opptyValue = ApexPages.currentPage().getParameters().get('OpptyId');
      

      然后将这些字段用作javascript中的

      function setValue()
      {
          var productId = '{!productValueId}';
          window.parent.opener.document.getElementById(productId).value='{!productValue}';
      }
      

      其中{!productValue}来自控制器。

      我不明白我应该如何以及在哪里修改我的checkmarx问题。

      所以,请帮助我,因为我想提交代码审查申请。

      最好的问候

1 个答案:

答案 0 :(得分:2)

您正在使用查询字符串参数product,将其读入productValueId控制器成员/属性,然后直接将其输出到Visualforce页面。

所以基本上我在查询字符串上给你的任何内容都会输出到页面响应中。

通过一些努力,可以对查询字符串进行编码,该查询字符串将突破您的JavaScript并执行我想要的任何内容。

E.g。

/apex/ABC__testPage?product=productId';alert('xss&OpptyId=006100000000001

或类似的东西。公平地说,Visualforce将为您编码表达式。

Checkmarx找到了潜在的路径。您需要删除此直接路径或提供足够的理由,使其不对XSS开放。

要做的一件有用的事情是对从查询字符串中读取的值强制执行数据类型。例如。明确使用Id而不是string作为productValueId的类型。

然后,您还可以验证查询字符串参数中引用的记录实际上对当前用户有效。即他们没有改变一些价值观来获取他们原本不应该看到的记录。

顺便说一下,Salesforce StackExchange是向Salesforce提出具体问题的好地方。