Placing DML operations inside an Apex class constructor or initializer can cause unintended side effects. For example, simply loading a Visualforce page or initializing a component could automatically run inserts, updates, or deletes — modifying the database without any explicit user action. This makes the behavior unpredictable and potentially insecure. In contrast, performing SOQL queries in constructors or initializers is allowed, since queries do not modify data.
For example, consider the code below, accessing a page that references AccountHandler will cause a database insert, even if the user didn’t intend to create a record.
public class AccountHandler {
public AccountHandler() {
// Dangerous: Just initializing this class will insert a record
Account acc = new Account(Name = 'Auto Created');
insert acc;
}
}
Non-Compliant Code Examples
public class MyClass {
public MyClass() {
insert something;
}
}
Compliant Code Examples
public class MyClass {
public MyClass() {
// anything but a DML statement
}
}
원활한 통합. Datadog Code Security를 경험해 보세요
Datadog Code Security
이 규칙을 사용해 Datadog Code Security로 코드를 분석하세요
규칙 사용 방법
1
2
rulesets:- apex-security # Rules to enforce Apex security.
리포지토리 루트에 위의 내용을 포함하는 static-analysis.datadog.yml을 만듭니다
무료 IDE 플러그인을 사용하거나 CI 파이프라인에 Code Security 검사를 추가합니다