我有两页
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问题。
因此,请帮助我,因为我想提交的申请代码审查。
诚挚的问候
发布于 2015-03-18 01:13:49
您将获取查询字符串参数product,将其读入productValueId控制器成员/属性,然后直接输出到Visualforce页面中。
因此,基本上,无论我在查询字符串上给出什么,最终都会输出到页面响应中。
经过一些努力,就有可能对一个查询字符串进行编码,该字符串将从您的JavaScript中分离出来,并执行我不想执行的内容。
例如。
/apex/ABC__testPage?product=productId';alert('xss&OpptyId=006100000000001或者类似的东西。公平地说,Visualforce将为您编码这个表达式。
Checkmarx已经找到了潜在的路径。您需要删除这个直接路径,或者提供足够的理由说明它不对XSS开放。
一个有用的方法是在从查询字符串读取的值上强制数据类型。例如,显式使用Id而不是string作为productValueId的类型。
然后,还可以验证查询字符串params中引用的记录对当前用户是否有效。也就是说,他们没有更改一些值来访问他们不应该看到的记录。
顺便说一句,Salesforce StackExchange是问Salesforce特定问题的好地方。
https://stackoverflow.com/questions/29095864
复制相似问题