철학적 호언 장담
응용 프로그램이 서로 다른 소스에서 액세스 같은 방식으로 작동해야하는 경우 정말 후 :
을 무엇 (Salesforce UI, PHP 커넥터, 일부 모바일 응용 프로그램) 그러면 Apex에 대해 재사용되는 일부 저장 프로 시저와 같은 생각을하는 것이 가장 좋습니다. 즉, 안전한 매개 변수를 전달할 수 있습니다.
&에 대한 질문을 너무 수월하게 처리하려는 경우 database.com이나 다른 클라우드 기반 데이터베이스 솔루션과 같은 것이 필요할 수도 있습니다.
실제 대답
나는 (바인드 변수/준비된 명령문과 같은) API를 통해 별도로 쿼리 명령과 별도로 PARAMS을 통과 할 박스 방식의 밖으로 잘 모르는 것 같아요. REST와 SOAP API 모두 Apex 내에 본질적으로 무엇이 Database.query()
인지 알려줍니다. 물론 retrieve()
명령이나 queryMore()
과 같은 몇 가지 차이점이 있지만 기준선입니다.
당신이 할 수있는 일은 John이 제안한 것과 유사한 방법으로 자주 사용되는 검색을 노출하는 것입니다 (추가 성능을위한 보너스 포인트 - 사전 컴파일 됨) 또는 일반적인 것을 구축하는 것입니다. runQuery
는 params[0]
처럼 바인드 변수를 포함 할 경우
List<sObject> runQuery(String query, List<List<String>> params){...}
그것을 작동합니다. 보이는 미친 그리고 나는 그것을 테스트하지 않았다;) 나는 바인딩 변수가 최선의 방법이라고 말하고 싶지만. 대안은 사용자의 입력을 피하는 것이지만 SQL 및 XSS 주입은 놀라 울 정도로 창조적 일 수 있습니다. Examples of XSS that I can use to test my page input?을 확인하십시오 (예, 저는 SOQL에 대해서만 질문했습니다).
실제 SOQL 주입 : http://wiki.developerforce.com/page/Secure_Coding_SQL_Injection. "최악의 경우 일어날 수 있기 때문에"사용자가 예상했던 것보다 더 많은 것을 검색 할 것이므로 (SELECT를 INSERT로 변환 할 수 없습니다) 이스케이프는 안전해야합니다 ...
현재 내 요청을 처리하기 위해 SFDC 인스턴스의 Apex 코드 또는 쿼리를 직접 전달할지 여부. Apex 코드를 사용하면 더 많은 유지 관리가 필요하지만 SQL 인젝션 –