首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建搜索功能

构建搜索功能
EN

Code Review用户
提问于 2016-07-25 10:49:46
回答 1查看 100关注 0票数 3

我试图通过提供一个搜索字符串来搜索帐户表。我正在构建一个基于不同条件的查询,然后将返回的记录添加到列表中。

该功能工作正常,但我想知道如何进一步优化下面的方法。

代码语言:javascript
复制
    public PageReference search(){
    clear();
    runningUserId = Userinfo.getUserId();
    String searchquery;
    Boolean existUser = AccSearchAccess__c.getValues(runningUserId) !=null? true : false;
    if(existUser){
        searchquery='Select  Name,Id,AccessLevel__c FROM Account where Name like \'%'+accountName+'%\'';
    }
    else{
        set<id> accountIds = new set<id>();
        List<WMAccess__c> wmaLst = [Select id,Account__c from WMAccess__c where WM_User__c = : UserInfo.getUserId()];
        for(WMAccess__c wm : wmaLst){
            accountIds.add(wm.Account__c);
        }
        if(!accountIds.isEmpty()){
            searchquery='Select  Name,Id,AccessLevel__c FROM Account where Name like \'%'+accountName+'%\' AND id IN:accountIds';
        }
    }

    accList= Database.query(searchquery);
    if(accList.size()>0)
        for(Account acc : accList){
            AccountWrapper aw = new AccountWrapper(acc, false);
            aw.accountId = acc.id; 
            aw.accountName = acc.Name;
            aw.accountAccess = acc.AccessLevel__c;
            accountsList.add(aw);
        }
    return null;
}
EN

回答 1

Code Review用户

回答已采纳

发布于 2016-07-26 16:44:53

您已经暴露了一个注入漏洞。

代码语言:javascript
复制
'WHERE Name like \'%'+accountName+'%\''

当您将用户输入合并到查询中时,应该调用String.escapeSingleQuotes,或者更好的是使用动态绑定。

代码语言:javascript
复制
// OK
searchQuery += 'WHERE Name LIKE \'%' + String.escapeSingleQuotes(accountName) + '%\'';

// BETTER
String fuzzySearchTerm = '%' + accountName + '%';
searchQuery += 'WHERE Name LIKE :fuzzySearchTerm';
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/135833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档