Esimerkkejä Apex-transaktioiden parannetun suojauksen toteutustavoista
Alla on esimerkkejä Apex-transaktioiden parannetun suojauksen toteuttamisesta.
Vaaditut versiot
| Käytettävissä Salesforce Classicissa (ei kaikissa organisaatioissa) ja Lightning Experiencessa. |
Käytettävissä: Enterprise Edition-, Unlimited Edition- ja Developer Edition -versioissa. Vaatii Salesforce Shield- tai Salesforce Event Monitoring -lisäosatilauksen. |
Sisäänkirjautumiset eri IP-osoitteista
Tämä esimerkki luo käytännön, joka käynnistyy, kun joku kirjautuu sisään eri IP-osoitteesta 24 tunnin aikana.
global class MultipleLoginEventCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when LoginEvent loginEvent {
return evaluate(loginEvent);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(LoginEvent loginEvent) {
AggregateResult[] results = [SELECT SourceIp
FROM LoginHistory
WHERE UserId = :loginEvent.UserId
AND LoginTime = LAST_N_DAYS:1
GROUP BY SourceIp];
if(!results.isEmpty()) {
return true;
}
return false;
}
}Sisäänkirjautumiset tietystä IP-osoitteesta
Tämä esimerkki luo käytännön, joka käynnistyy, kun istunto luodaan tietystä IP-osoitteesta.
global class SourceIpEventCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when LoginEvent loginEvent {
return evaluate(loginEvent);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(LoginEvent loginEvent) {
if (loginEvent.SourceIp.equals('1.1.1.1')) {
return true;
}
return false;
}
}Tietojen vienti
Tämä esimerkki toteuttaa transaktioiden suojauskäytännön, joka käynnistyy, kun yli 2 000 liidiä:
- tarkastellaan käyttöliittymästä
- viedään SOQL-kyselyllä
- viedään luettelonäkymästä
- viedään raportista
global class LeadViewAndExportCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when ApiEvent apiEvent {
return evaluate(apiEvent.QueriedEntities, apiEvent.RowsProcessed);
}
when ReportEvent reportEvent {
return evaluate(reportEvent.QueriedEntities, reportEvent.RowsProcessed);
}
when ListViewEvent listViewEvent {
return evaluate(listViewEvent.QueriedEntities, listViewEvent.RowsProcessed);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(String queriedEntities, Decimal rowsProcessed){
if(queriedEntities.contains('Lead') && rowsProcessed > 2000){
return true;
}
return false;
}
}Luottamuksellisten tietojen käyttö
Tämä käytäntö vaatii kaikilta kaksinkertaista todennusta ennen tietyn raportin avaamista.
Sinulla voi olla luottamuksellisia tai salaisia tietoja Salesforce-vuosineljännesraportissasi. Varmista, että raportteja käyttävät tiimit käyttävät kaksinkertaista todennusta (2FA) todistaakseen henkilöllisyytensä ennen näiden tietojen tarkastelemista. Tämä käytäntö tekee 2FA-todennuksesta pakollista, mutta et voi tarjota Korkea vahvistus -istuntoja, jos tiimisi ei pysty täyttämään 2FA-todennuksen vaatimuksia. Sinun täytyy ensin määrittää 2FA Salesforce-ympäristöllesi.
Tämä esimerkki näyttää, miten käytäntö voi tehdä 2FA-todennuksesta pakollisen tietylle raportille. Tässä käytetty raportti voi olla mikä tahansa raportti, jonka nimessä lukee ”Quarterly Report”. Kaikilla raporttia käyttäville täytyy olla 2FA-todennuksella saatu Korkea vahvistus -istunto.
global class ConfidentialDataEventCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when ReportEvent reportEvent {
return evaluate(reportEvent);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(ReportEvent reportEvent) {
// Check if this is a quarterly report.
if (reportEvent.Name.contains('Quarterly Report')) {
return true;
}
return false;
}
}Selaimen tarkistus
Tämä käytäntö käynnistyy, kun käyttäjä, jonka käyttöjärjestelmän ja selaimen yhdistelmä tunnetaan, yrittää kirjautua sisään toisella selaimella ja eri käyttöjärjestelmällä.
Monilla organisaatioilla on omat laitteistonsa ja tukevat eri selaimien tiettyjä versioita. Voit käyttää tätä standardia vähentääksesi avaintyöntekijöiden tileiltä tapahtuvia haavoittuvuuksia reagoimalla tuntemattomilta laitteilta saapuviin sisäänkirjautumisiin. Oletetaan esimerkiksi, että toimitusjohtasi kirjautuu Salesforceen tavallisesti San Franciscosta käyttämällä MacBookia tai Salesforcen iPhone-mobiilisovellusta. Kun sisäänkirjautuminen tapahtuu jostain muusta sijainnista Chromebookilla, on syytä epäillä vilppiä. Hakkerit eivät välttämättä tiedä, mitä alustoja toimitusjohtaja käyttää, joten tämä käytäntö tekee suojausrikkomuksista epätodennäköisempää.
Tässä esimerkissä asiakasorganisaatio tietää, että sen toimitusjohtaja käyttää MacBook-laitetta OS X -järjestelmällä ja Safari-selaimella. Toimitusjohtajan tunnuksilla tehdyt sisäänkirjautumisyritykset estetään automaattisesti.
global class AccessEventCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when LoginEvent loginEvent {
return evaluate(loginEvent);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(LoginEvent loginEvent) {
// If it's a Login attempt from our CEO's user account.
if (loginEvent.UserId == '005x0000005VmCu'){
// The policy is triggered when the CEO isn’t using Safari on Mac OSX.
if (!loginEvent.Platform.contains('Mac OSX') ||
!loginEvent.Browser.contains('Safari')) {
return true;
}
}
return false;
}
}Sisäänkirjautumisten esto maittain
Tämä käytäntö estää käytön maittain.
Organisaatiollasi on haaratoimistoja eri puolilla maailmaa, mutta haluat rajoittaa sen Salesforce-organisaation käyttöä kansainvälisten lakien vuoksi.
Tämä esimerkki luo käytännön, joka estää käyttäjiä kirjautumasta sisään Pohjois-Koreasta. Jos käyttäjäsi ovat Pohjois-Koreassa ja käyttävät VPN-yhteyttä, heidän VPN-yhdyskäytävänsä olisi Singaporessa tai Yhdysvalloissa. He voivat kirjautua sisään onnistuneesti, koska Salesforce tunnistaa VPN-yhdyskäytävän ja Yhdysvalloissa sijaitsevan yrityksen sisäisen IP-osoitteen.
global class CountryEventCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when LoginEvent loginEvent {
return evaluate(loginEvent);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(LoginEvent loginEvent) {
// Get the login's country.
String country = String.valueOf(loginEvent.Country);
// Trigger policy and block access for any user trying to log in from North Korea.
if(country.equals('North Korea')) {
return true;
}
return false;
}
}Voit rajoittaa käyttöoikeuksia myös muiden arvojen perusteella, kuten postinumerolla tai kaupungilla.
Käyttöjärjestelmän estäminen
Tämä käytäntö estää Android-käyttöjärjestelmän vanhan version käytön.
Olet huolissasi mobiilialustan tietyistä haavoittuvuuksista sekä sen kyvyistä ottaa näyttökuvia ja lukea dataa Salesforcea käytettäessä. Voit estää käytön turvattomilta laitteilta, joiden käyttöjärjestelmillä on tunnettuja haavoittuvuuksia. Tämä käytäntö estää käytön laitteilta, joissa on Android 5.0 tai sitä vanhempi.
global class AndroidEventCondition implements TxnSecurity.EventCondition {
public boolean evaluate(SObject event) {
switch on event{
when LoginEvent loginEvent {
return evaluate(loginEvent);
}
when null {
return false;
}
when else{
return false;
}
}
}
private boolean evaluate(LoginEvent loginEvent) {
String platform = loginEvent.Platform;
// Block access from Android versions less than 5
if (platform.contains('Android') && platform.compareTo('Android 5') < 0) {
return true;
}
return false;
}
}