我有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来自控制器。
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问题。
所以,请帮助我,因为我想提交代码审查申请。
最好的问候
答案 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提出具体问题的好地方。