salesforce RemoteAction和Chrome开发人员工具 - >网络日志暴露数据

时间:2017-05-18 17:42:07

标签: salesforce apex

enter image description here我创建了一个VF页面和RemoteAction,在apex类或vf页面中的任何位置都没有system.debug或console.log,因此在Chrome开发人员工具中 - >控制台日志没有输出,但令人惊讶的是在网络选项卡中,如果选择apexremote,您将看到查询返回的数据,甚至是对象中的加密字段。

如果您看到下面的代码,则credit_card__c字段已加密,我甚至没有在我的VF中公开它,仍然在Chrome开发人员工具网络标签中我看到了整个数据。

如何在Chrome开发者工具的网络标签中停止任何日志?

global class AccountRemoteService {


public String accountName { get; set; }
public static Account account { get; set; }    
global AccountRemoteService(){}

@RemoteAction
global static Account getAccount(String accountName) 
{
    account = [SELECT id, name, credit_card__c FROM Account WHERE name = :accountName ];
    return account;
}    
}

VF页面

<apex:page controller="AccountRemoteService">
<script type="text/javascript">
function getRemoteAccount() 
{
    //get the values of input text and place into the variable.
    var paramAccountName = document.getElementById('accName').value;        
    AccountRemoteService.getAccount( paramAccountName, 
    function(result, event)
    {

      alert('event.status==>'+event.status);
      alert('event.type === '+event.type);
      alert('event.message ==>'+event.message);
        if (event.status) 
        {
            // demonstrates how to get ID for HTML and Visualforce tags
            document.getElementById("{!$Component.theBlock.thePageBlockSection.accountId.Id}").innerHTML = result.Id;
            document.getElementById("{!$Component.theBlock.thePageBlockSection.accountName.Nam}").innerHTML = result.Name;
        } 
        else if (event.type === 'exception') 
        {
            document.getElementById("errors-js").innerHTML = event.message;
        } else 
        {
            document.getElementById("errors-js").innerHTML = 'No Records Found..';
        }
    }, {escape:true});
}
</script>
Account Name :<input id="accName" type="text" />
<button onclick="getRemoteAccount()">Get Account</button>
<div id="errors-js"> </div>
<apex:pageBlock id="theBlock">
    <apex:pageBlockSection id="thePageBlockSection" columns="2">
        <apex:pageBlockSectionItem id="accountId">
            <apex:outputText id="Id"/>
        </apex:pageBlockSectionItem>
        <apex:pageBlockSectionItem id="accountName" >
            <apex:outputText id="Nam" />
        </apex:pageBlockSectionItem>
    </apex:pageBlockSection>
</apex:pageBlock>

1 个答案:

答案 0 :(得分:0)

这里有很多你正在做的事情应该以不同的方式完成,我只想提到一边。

  1. 您要按名称查询帐户,而不是通过唯一值查询帐户结果中可能会导致多个帐户或没有结果,并且您将返回单个帐户记录。在任何一种情况下都会抛出异常。改为使用列表。
  2. 如果您要使用远程操作,则应执行访问以确保用户有权访问您要返回的字段,以免意外泄露数据
  3. 我建议您使用visualforce中的平台安全措施来强制执行字段加密。使用从您的控制器引用该对象,您已经可以访问其公开的visualforce页面获取的帐户;集;
  4. 简而言之,某些情况下加密字段没有被屏蔽,我建议使用平台功能,这有助于简化这一过程。有关详细信息,请参阅here

    您可以使用actionRegion commandButtons和部分页面重新渲染来实现相同或类似的效果。