Menu Bar

Kata Mutiara

"Keberhasilan merupakan tetesan dari jeri-payah perjuangan, luka, pengorbanan dan hal-hal yang mengejutkan. Kegagalan merupakan tetesan dari kemalasan, kebekuan, kelemahan, kehinaan dan kerendahan"

ANIMASI TULISAN BERJALAN

Tuesday, February 11, 2025

Proyek Sederhana Spring Web JPA+MYSQL+Angular 16

/**/

 1. Backend (Spring Boot)

1.1. Struktur Proyek

danamon-backend
│── pom.xml
│── src/main/java/com/joko
│   ├── controller
│   │   ├── DanamonEmployeeController.java
│   ├── model
│   │   ├── DanamonEmployee.java
│   ├── repository
│   │   ├── DanamonEmployeeRepository.java
│   ├── SpringbootCrudAngular16MysqlApplication.java
│── src/main/resources
│   ├── application.properties

1.2. pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>3.1.1</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>com.joko</groupId>

<artifactId>Springboot-crud-angular16-mysql</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>Springboot-crud-angular16-mysql</name>

<description>Springboot-crud-angular16-mysql</description>

<properties>

<java.version>17</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-validation</artifactId>

</dependency>


<dependency>

<groupId>com.mysql</groupId>

<artifactId>mysql-connector-j</artifactId>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.datatype</groupId>

<artifactId>jackson-datatype-jsr310</artifactId>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>


<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>


</project>

1.3. Model (DanamonEmployee.java)

package com.joko.model;


import jakarta.persistence.Column;

import jakarta.persistence.Entity;

import jakarta.persistence.GeneratedValue;

import jakarta.persistence.GenerationType;

import jakarta.persistence.Id;

import jakarta.persistence.Table;

import jakarta.validation.constraints.NotBlank;

import jakarta.validation.constraints.Size;


@Entity

@Table(name="employees")

public class DanamonEmployee {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@NotBlank

@Size(max = 120)

@Column(name = "name")

private String name;

@NotBlank

@Size(max = 200)

@Column(name = "address")

private String address;

@NotBlank

@Size(max = 200)

@Column(name = "salary")

private String salary;

@NotBlank

@Size(max = 120)

@Column(name = "job")

private String job;

public DanamonEmployee () {}


public DanamonEmployee(@NotBlank @Size(max = 120) String name, @NotBlank @Size(max = 200) String address,

@NotBlank @Size(max = 200) String salary,@NotBlank @Size(max = 120) String job) {

super();

this.name = name;

this.address = address;

this.salary = salary;

this.job = job;

}



@Override

public String toString() {

return "DanamonEmployee [id=" + id + ", name=" + name + ", address=" + address + ", salary=" + salary

+ ", job="+job+", getId()=" + getId() + ", getName()=" + getName() + ", getAddress()=" + getAddress()

+ ", getSalary()=" + getSalary() +", getJob()="+getJob()+ ", toString()=" + super.toString() + "]";

}




public Long getId() {

return id;

}


public void setId(Long id) {

this.id = id;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


public String getAddress() {

return address;

}


public void setAddress(String address) {

this.address = address;

}


public String getSalary() {

return salary;

}


public void setSalary(String salary) {

this.salary = salary;

}




public String getJob() {

return job;

}




public void setJob(String job) {

this.job = job;

}

}

1.4. Repository (DanamonEmployeeRepository.java)

package com.joko.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import com.joko.model.DanamonEmployee;

public interface DanamonEmployeeRepository extends JpaRepository<DanamonEmployee, Long>{

    List<DanamonEmployee> findByNameContaining(String name);

    @SuppressWarnings("unchecked")
    DanamonEmployee save(DanamonEmployee danamonEmployee);

}

1.5. Controller (DanamonEmployeeController.java)

package com.joko.controller;


import java.util.ArrayList;

import java.util.List;

import java.util.Optional;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.DeleteMapping;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.PutMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.bind.annotation.RestControllerAdvice;


import com.joko.model.DanamonEmployee;

import com.joko.repository.DanamonEmployeeRepository;


@RestController

@RequestMapping("/bdi/api")

public class DanamonEmployeeController {

@Autowired

DanamonEmployeeRepository danamonEmployeeRepository;

private static final Logger logger =LoggerFactory.getLogger(DanamonEmployeeController.class);

@GetMapping("/employee")

public ResponseEntity<List<DanamonEmployee>> getAllDanamonEmployee(@RequestParam(required = false) String name) {

try {

List<DanamonEmployee> danamonEmployees = new ArrayList<DanamonEmployee>();

if (name == null)

danamonEmployeeRepository.findAll().forEach(danamonEmployees::add);

else

danamonEmployeeRepository.findByNameContaining(name).forEach(danamonEmployees::add);


if (danamonEmployees.isEmpty()) {

logger.info(" Get All employee No Content");

return new ResponseEntity<>(HttpStatus.NO_CONTENT);

}

logger.info(" Get All employee succcess");

return new ResponseEntity<>(danamonEmployees, HttpStatus.OK);

} catch (Exception e) {

// TODO: handle exception

logger.error("INTERNAL_SERVER_ERROR Failure Get All employee ",e);

return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);

}

}

@GetMapping("/employee/{id}")

public ResponseEntity<DanamonEmployee> getDanamonEmployeeById(@PathVariable("id") long id) {

Optional<DanamonEmployee> danamonEmployees = danamonEmployeeRepository.findById(id);


if (danamonEmployees.isPresent()) {

logger.info(" Get employee by Id success");

return new ResponseEntity<>(danamonEmployees.get(), HttpStatus.OK);

} else {

logger.error(" Not Found Fail to Get employee by id");

return new ResponseEntity<>(HttpStatus.NOT_FOUND);

}

}

@PostMapping("/employee")

public ResponseEntity<DanamonEmployee> createDanamonEmployee(@RequestBody DanamonEmployee danamonEmployee) {

try {

DanamonEmployee danamonemployee = danamonEmployeeRepository.save(new DanamonEmployee(danamonEmployee.getName(), danamonEmployee.getAddress(),danamonEmployee.getSalary(),danamonEmployee.getJob()));

logger.info(" Successfully added new employee: ID={}, Name={}, Address={}, Salary={}, Job={}",

danamonemployee.getId(),

danamonemployee.getName(),

danamonemployee.getAddress(),

danamonemployee.getSalary(),

danamonemployee.getJob()

);

return new ResponseEntity<>(danamonemployee, HttpStatus.CREATED);

} catch (Exception e) {

logger.error(" INTERNAL_SERVER_ERROR Fail adding new employee",e);

return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);

}

}

@PutMapping("/employee/{id}")

public ResponseEntity<DanamonEmployee> updateDanamonEmployee(@PathVariable("id") long id, @RequestBody DanamonEmployee danamonEmployee) {

Optional<DanamonEmployee> employeedata = danamonEmployeeRepository.findById(id);


if (employeedata.isPresent()) {

DanamonEmployee emp = employeedata.get();

emp.setName(danamonEmployee.getName());

emp.setAddress(danamonEmployee.getAddress());

emp.setSalary(danamonEmployee.getSalary());

emp.setJob(danamonEmployee.getJob());

logger.info(" You have been success updating employee by id");

return new ResponseEntity<>(danamonEmployeeRepository.save(emp), HttpStatus.OK);

} else {

logger.error(" NOT_FOUND Fail updating employee by id");

return new ResponseEntity<>(HttpStatus.NOT_FOUND);

}

}

@DeleteMapping("/employee/{id}")

public ResponseEntity<HttpStatus> deleteDanamonEmployee(@PathVariable("id") long id) {

try {

danamonEmployeeRepository.deleteById(id);

logger.info(" You have been success deleting employee by id");

return new ResponseEntity<>(HttpStatus.NO_CONTENT);

} catch (Exception e) {

logger.error(" INTERNAL_SERVER_ERROR, error delete employee by id",e);

return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);

}

}

@DeleteMapping("/employee")

public ResponseEntity<HttpStatus> deleteAllDanamonEmployee() {

try {

danamonEmployeeRepository.deleteAll();

logger.info(" You have been success deleting all employee");

return new ResponseEntity<>(HttpStatus.NO_CONTENT);

} catch (Exception e) {

logger.error(" INTERNAL_SERVER_ERROR, error delete All employee ",e);

return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);

}

}

}



@RestControllerAdvice

class GlobalExceptionHandler{

private static final Logger logger =LoggerFactory.getLogger(GlobalExceptionHandler.class);

public ResponseEntity<String> handleRunTimeException(RuntimeException e){

logger.error("Exception Occur:{}",e.getMessage());

return ResponseEntity.badRequest().body(e.getMessage());

}

}

1.6. SpringbootCrudAngular16MysqlApplication.java

package com.joko;


import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication

public class SpringbootCrudAngular16MysqlApplication {


public static void main(String[] args) {

SpringApplication.run(SpringbootCrudAngular16MysqlApplication.class, args);

}


}

1.6. Konfigurasi Database (application.properties)

server.port=8087


spring.datasource.url= jdbc:mysql://localhost:3306/testdb?useSSL=false

spring.datasource.username= root

spring.datasource.password= root


spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL8Dialect

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto= update

spring.jpa.properties.hibernate.globally_quoted_identifiers=true


2. Frontend (Angular 16)

2.1. Install Angular CLI dan Buat Proyek

npm install -g @angular/cli
ng new danamon-frontend
cd danamon-frontend
ng add @angular/material
2.2. Buat Service untuk API
ng generate service services/employee
typescript
// src/app/services/employee.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class EmployeeService {
  private baseUrl = 'http://localhost:8087/bdi/api/employee';

  constructor(private http: HttpClient) {}

  getEmployees(): Observable<any> {
    return this.http.get(this.baseUrl);
  }

  getEmployeeById(id: number): Observable<any> {
    return this.http.get(`${this.baseUrl}/${id}`);
  }

  createEmployee(employee: any): Observable<any> {
    return this.http.post(this.baseUrl, employee);
  }

  updateEmployee(id: number, employee: any): Observable<any> {
    return this.http.put(`${this.baseUrl}/${id}`, employee);
  }

  deleteEmployee(id: number): Observable<any> {
    return this.http.delete(`${this.baseUrl}/${id}`);
  }

  deleteAllEmployees(): Observable<any> {
    return this.http.delete(this.baseUrl);
  }
}


2.3. Buat Model untuk Employee
ng generate interface models/employee
typescript
// src/app/models/employee.ts
export interface Employee {
    id?: number;
    name: string;
    address: string;
    salary: string;
    job: string;
  }
 

2.4. Buat Component untuk Employee CRUD
ng generate component components/employee-list
ng generate component components/employee-form

2.5. Implementasi Employee List Component
typescript
// src/app/components/employee-list/employee-list.component.ts
import { Component, OnInit } from '@angular/core';
import { EmployeeService } from '../../services/employee.service';
import { Employee } from '../../models/employee';

@Component({
  selector: 'app-employee-list',
  templateUrl: './employee-list.component.html',
  styleUrls: ['./employee-list.component.css']
})
export class EmployeeListComponent implements OnInit {
  employees: Employee[] = [];

  constructor(private employeeService: EmployeeService) {}

  ngOnInit(): void {
    this.loadEmployees();
  }

  loadEmployees(): void {
    this.employeeService.getEmployees().subscribe(data => {
      this.employees = data;
    });
  }

  deleteEmployee(id: number): void {
    this.employeeService.deleteEmployee(id).subscribe(() => {
      this.loadEmployees();
    });
  }

  deleteAllEmployees(): void {
    this.employeeService.deleteAllEmployees().subscribe(() => {
      this.loadEmployees();
    });
  }
}


2.6. Template HTML untuk Employee List
<!-- src/app/components/employee-list/employee-list.component.html -->
<div class="container">
  <h2>Employee List</h2>
  <button (click)="deleteAllEmployees()" class="btn btn-danger">Delete All</button>
  <table class="table table-bordered mt-3">
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Address</th>
        <th>Salary</th>
        <th>Job</th>
        <th>Actions</th>
      </tr>
    </thead>
    <tbody>
      <tr *ngFor="let employee of employees">
        <td>{{ employee.id }}</td>
        <td>{{ employee.name }}</td>
        <td>{{ employee.address }}</td>
        <td>{{ employee.salary }}</td>
        <td>{{ employee.job }}</td>
        <td>
          <button (click)="deleteEmployee(employee.id!)" class="btn btn-danger">Delete</button>
        </td>
      </tr>
    </tbody>
  </table>
</div>


2.7. Implementasi Employee Form Component
typescript
// src/app/components/employee-form/employee-form.component.ts
import { Component } from '@angular/core';
import { EmployeeService } from '../../services/employee.service';
import { Employee } from '../../models/employee';

@Component({
  selector: 'app-employee-form',
  templateUrl: './employee-form.component.html',
  styleUrls: ['./employee-form.component.css']
})
export class EmployeeFormComponent {
  employee: Employee = { name: '', address: '', salary: '', job: '' };

  constructor(private employeeService: EmployeeService) {}

  saveEmployee(): void {
    this.employeeService.createEmployee(this.employee).subscribe(() => {
      alert('Employee created successfully!');
      this.employee = { name: '', address: '', salary: '', job: '' };
    });
  }
}


2.8. Template HTML untuk Employee Form
<!-- src/app/components/employee-form/employee-form.component.html -->
<div class="container">
  <h2>Create Employee</h2>
  <form (ngSubmit)="saveEmployee()">
    <div class="form-group">
      <label>Name</label>
      <input type="text" class="form-control" [(ngModel)]="employee.name" name="name" required>
    </div>
    <div class="form-group">
      <label>Address</label>
      <input type="text" class="form-control" [(ngModel)]="employee.address" name="address" required>
    </div>
    <div class="form-group">
      <label>Salary</label>
      <input type="text" class="form-control" [(ngModel)]="employee.salary" name="salary" required>
    </div>
    <div class="form-group">
      <label>Job</label>
      <input type="text" class="form-control" [(ngModel)]="employee.job" name="job" required>
    </div>
    <button type="submit" class="btn btn-primary mt-3">Save</button>
  </form>
</div>


2.9. Routing di Angular

Tambahkan route untuk komponen Employee List dan Employee Form di app-routing.module.ts

// src/app/app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { EmployeeListComponent } from './components/employee-list/employee-list.component';
import { EmployeeFormComponent } from './components/employee-form/employee-form.component';

const routes: Routes = [
  { path: 'employees', component: EmployeeListComponent },
  { path: 'add-employee', component: EmployeeFormComponent },
  { path: '', redirectTo: '/employees', pathMatch: 'full' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

2.10. Tambahkan Navbar di app.component.html

<!-- src/app/app.component.html -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
  <div class="container">
    <a class="navbar-brand" href="/">Danamon Employee Management</a>
    <div class="collapse navbar-collapse">
      <ul class="navbar-nav ml-auto">
        <li class="nav-item">
          <a class="nav-link" routerLink="/employees">Employees</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" routerLink="/add-employee">Add Employee</a>
        </li>
      </ul>
    </div>
  </div>
</nav>
<div class="container mt-4">
  <router-outlet></router-outlet>
</div>


3. Jalankan Aplikasi

3.1. Jalankan Backend (Spring Boot)

Pastikan MySQL berjalan, lalu jalankan backend dengan:

mvn spring-boot:run

Atau menggunakan IntelliJ IDEA atau Eclipse, jalankan DanamonBackendApplication.

3.2. Jalankan Frontend (Angular)

ng serve --open

Ini akan membuka browser di http://localhost:4200/.

4. Hasil Akhir

  • Halaman utama akan menampilkan daftar karyawan.
  • Halaman "Add Employee" akan memungkinkan pengguna untuk menambahkan karyawan baru.
  • Tombol "Delete" akan menghapus karyawan dari database.

5. Kesimpulan

✅ Spring Boot + JPA + MySQL menangani backend API untuk CRUD karyawan.
✅ Angular 16 digunakan untuk frontend, memungkinkan user melihat dan mengelola data karyawan.
✅ Bootstrap dan Angular Material membantu dalam styling UI agar lebih rapi.


Tuesday, February 4, 2025

Keamanan Digital di Level Global: Sertifikasi Cybersecurity dan Standar IEC yang Harus Anda Ketahui

Berbagai Macam Sertifikasi Cybersecurity dan Standar IEC

Dalam dunia cybersecurity, terdapat banyak sertifikasi yang diakui secara global untuk membuktikan keahlian seseorang dalam bidang keamanan informasi. Selain itu, International Electrotechnical Commission (IEC) juga mengembangkan standar keamanan untuk berbagai industri. Berikut adalah daftar sertifikasi cybersecurity beserta standar IEC yang relevan:


🔹 Sertifikasi Cybersecurity yang Diakui Secara Global

1️⃣ Certified Information Systems Security Professional (CISSP)

  • Dikeluarkan oleh: (ISC)²

  • Fokus: Manajemen keamanan informasi dan desain arsitektur keamanan.

  • Materi Ujian:
    ✅ Keamanan dan Manajemen Risiko
    ✅ Keamanan Aset
    ✅ Arsitektur dan Rekayasa Keamanan
    ✅ Keamanan Jaringan dan Komunikasi
    ✅ Identitas dan Manajemen Akses
    ✅ Pengujian dan Penilaian Keamanan
    ✅ Keamanan Operasional
    ✅ Keamanan Pengembangan Software

  • Digunakan oleh: Profesional IT dengan pengalaman keamanan minimal 5 tahun.


2️⃣ Certified Ethical Hacker (CEH)

  • Dikeluarkan oleh: EC-Council

  • Fokus: Pengujian penetrasi dan teknik hacking etis.

  • Materi Ujian:
    ✅ Teknik footprinting dan reconnaissance
    ✅ Pemindaian jaringan (network scanning)
    ✅ Teknik hacking berbasis sistem operasi
    ✅ Penggunaan malware dalam pentesting
    ✅ Serangan berbasis web dan aplikasi

  • Digunakan oleh: Penetration tester, security analyst, ethical hacker.


3️⃣ Offensive Security Certified Professional (OSCP)

  • Dikeluarkan oleh: Offensive Security

  • Fokus: Pengujian penetrasi tingkat lanjut dengan eksploitasi manual.

  • Materi Ujian:
    ✅ Eksploitasi berbasis Linux dan Windows
    ✅ Teknik bypass firewall dan IDS
    ✅ Post-exploitation & privilege escalation
    ✅ Teknik buffer overflow

  • Digunakan oleh: Profesional cybersecurity yang ingin mendalami teknik hacking ofensif.


4️⃣ CompTIA Security+

  • Dikeluarkan oleh: CompTIA

  • Fokus: Keamanan dasar untuk profesional IT pemula.

  • Materi Ujian:
    ✅ Keamanan jaringan
    ✅ Manajemen risiko
    ✅ Ancaman dan serangan cyber
    ✅ Enkripsi dan keamanan data

  • Digunakan oleh: IT support, network administrator, security analyst pemula.


5️⃣ Certified Information Security Manager (CISM)

  • Dikeluarkan oleh: ISACA

  • Fokus: Manajemen keamanan informasi pada level perusahaan.

  • Materi Ujian:
    ✅ Manajemen risiko dan tata kelola keamanan informasi
    ✅ Pengembangan kebijakan keamanan organisasi
    ✅ Manajemen insiden keamanan

  • Digunakan oleh: Manajer keamanan informasi dan CISO (Chief Information Security Officer).


6️⃣ Certified Information Systems Auditor (CISA)

  • Dikeluarkan oleh: ISACA

  • Fokus: Audit sistem informasi dan kepatuhan keamanan.

  • Materi Ujian:
    ✅ Pengelolaan risiko IT
    ✅ Tata kelola dan audit keamanan
    ✅ Pengendalian sistem informasi

  • Digunakan oleh: Auditor IT dan compliance officer.


7️⃣ GIAC Security Essentials (GSEC)

  • Dikeluarkan oleh: SANS Institute

  • Fokus: Keamanan komputer dan jaringan tingkat dasar hingga menengah.

  • Materi Ujian:
    ✅ Enkripsi dan keamanan data
    ✅ Keamanan jaringan dan firewall
    ✅ Manajemen akses

  • Digunakan oleh: Administrator keamanan jaringan dan profesional IT.


8️⃣ ISO/IEC 27001 Lead Auditor

  • Dikeluarkan oleh: PECB, IRCA

  • Fokus: Audit dan implementasi sistem manajemen keamanan informasi berdasarkan ISO/IEC 27001.

  • Materi Ujian:
    ✅ Prinsip dasar ISO 27001
    ✅ Audit dan implementasi sistem keamanan informasi

  • Digunakan oleh: Auditor ISO 27001 dan compliance manager.


🔹 Standar IEC dalam Cybersecurity

International Electrotechnical Commission (IEC) menetapkan berbagai standar keamanan untuk industri teknologi. Berikut adalah beberapa standar IEC yang penting dalam cybersecurity:

1️⃣ IEC 62443 – Industrial Cybersecurity

  • Fokus: Keamanan siber dalam sistem kontrol industri (ICS/SCADA).
  • Digunakan oleh: Perusahaan manufaktur, energi, dan infrastruktur kritis.

2️⃣ IEC 62351 – Keamanan Sistem Tenaga Listrik

  • Fokus: Melindungi infrastruktur jaringan listrik dari serangan cyber.
  • Digunakan oleh: Perusahaan listrik dan energi.

3️⃣ IEC 60870-5-104 – Keamanan Komunikasi dalam Sistem SCADA

  • Fokus: Pengamanan komunikasi dalam sistem kontrol industri berbasis SCADA.
  • Digunakan oleh: Operator sistem industri dan energi.

4️⃣ IEC 27001 – Standar Manajemen Keamanan Informasi

  • Fokus: Mengatur sistem keamanan informasi berbasis risiko.
  • Digunakan oleh: Perusahaan yang ingin mendapatkan sertifikasi keamanan informasi.

5️⃣ IEC 62243 – Keamanan Perangkat IoT

  • Fokus: Standar keamanan untuk perangkat yang terhubung dalam Internet of Things (IoT).
  • Digunakan oleh: Produsen perangkat IoT dan pengembang sistem smart home.

🔹 Kesimpulan

🔹 Sertifikasi cybersecurity membantu profesional IT meningkatkan keterampilan mereka dalam mengamankan sistem dan data.
🔹 Standar IEC memastikan keamanan dalam berbagai industri, termasuk manufaktur, listrik, dan komunikasi.
🔹 Memilih sertifikasi atau standar yang tepat bergantung pada peran dan industri yang ditekuni.

7 Lapisan OSI, 21 Ancaman! Kenali Cyberattack di Setiap Layer

Macam-Macam Tipe Cyberattack di Masing-Masing OSI Layer

Model OSI (Open Systems Interconnection) memiliki 7 lapisan, dan setiap lapisan rentan terhadap serangan siber yang berbeda. Berikut adalah daftar cyberattack di setiap layer beserta detailnya:


1️⃣ Physical Layer (Lapisan Fisik)

🔹 Fungsi: Menghubungkan perangkat secara fisik melalui kabel, sinyal, dan perangkat keras jaringan.
🔹 Serangan Umum:

  1. Cable Tapping (Penyadapan Kabel)

    • Menyadap data dari kabel jaringan dengan memasang perangkat penyadap (sniffer).
    • Contoh: Alat fiber optic tap untuk menangkap sinyal dalam kabel serat optik.
  2. Jamming Attack (Gangguan Sinyal)

    • Mengganggu komunikasi nirkabel dengan mengirimkan sinyal frekuensi tinggi yang mengganggu sinyal asli.
    • Contoh: Serangan terhadap Wi-Fi atau Bluetooth dengan menggunakan jammer.
  3. Physical Tampering (Manipulasi Fisik)

    • Menyabotase perangkat jaringan dengan merusak atau mencuri hardware.
    • Contoh: Merusak server fisik atau router untuk menyebabkan gangguan layanan.

2️⃣ Data Link Layer (Lapisan Data Link)

🔹 Fungsi: Mengatur komunikasi antar perangkat dalam jaringan lokal (LAN) menggunakan MAC Address.
🔹 Serangan Umum:
4. MAC Spoofing

  • Menyamar sebagai perangkat lain dengan mengubah alamat MAC untuk mendapatkan akses tidak sah.
  • Contoh: Hacker mengganti MAC Address perangkatnya agar bisa masuk ke jaringan Wi-Fi terbatas.
  1. ARP Spoofing (ARP Poisoning)

    • Mengirimkan paket ARP palsu untuk mengalihkan lalu lintas ke perangkat penyerang.
    • Contoh: Menyusup ke jaringan dengan mencuri sesi pengguna menggunakan ARP poisoning.
  2. Switch Port Stealing

    • Menyerang tabel CAM (Content Addressable Memory) pada switch dengan mengirim banyak MAC Address palsu.
    • Contoh: Flooding switch sehingga beroperasi dalam mode hub, memungkinkan serangan sniffing.

3️⃣ Network Layer (Lapisan Jaringan)

🔹 Fungsi: Menangani pengalamatan IP dan routing data antar jaringan.
🔹 Serangan Umum:
7. IP Spoofing

  • Menyamar sebagai IP lain untuk menyusup atau menyamarkan identitas.
  • Contoh: Digunakan dalam serangan DDoS dan Man-in-the-Middle (MitM).
  1. DDoS (Distributed Denial of Service) Attack

    • Membanjiri jaringan dengan trafik palsu sehingga layanan menjadi lambat atau lumpuh.
    • Contoh: Botnet digunakan untuk menyerang website dengan lalu lintas besar.
  2. ICMP Flood (Ping Flood)

    • Mengirimkan banyak permintaan ping ke suatu perangkat untuk membanjiri jaringan.
    • Contoh: Menggunakan perintah ping -t dalam jumlah besar ke server target.
  3. Route Poisoning

  • Memasukkan informasi routing palsu untuk mengalihkan lalu lintas ke jalur yang salah.
  • Contoh: Mengarahkan lalu lintas ke server jahat untuk mencuri data pengguna.

4️⃣ Transport Layer (Lapisan Transport)

🔹 Fungsi: Mengatur komunikasi antar host dengan protokol TCP dan UDP.
🔹 Serangan Umum:
11. TCP SYN Flood

  • Mengirim banyak permintaan koneksi (SYN) tetapi tidak menyelesaikan proses handshake, membuat server overload.
  • Contoh: Server web yang kehabisan sumber daya karena serangan SYN Flood.
  1. UDP Flood
  • Mengirimkan banyak paket UDP ke perangkat korban untuk membuatnya crash atau overload.
  • Contoh: Serangan ke game server yang menggunakan UDP untuk komunikasi real-time.
  1. Port Scanning Attack
  • Memindai port terbuka pada perangkat untuk mencari celah keamanan.
  • Contoh: Hacker menggunakan Nmap untuk menemukan port yang rentan.

5️⃣ Session Layer (Lapisan Sesi)

🔹 Fungsi: Mengelola sesi komunikasi antara aplikasi.
🔹 Serangan Umum:
14. Session Hijacking

  • Menyusup ke sesi pengguna yang aktif untuk mencuri atau menyalahgunakan akses.
  • Contoh: Menggunakan cookie yang dicuri untuk mengakses akun pengguna tanpa login.
  1. Man-in-the-Middle (MitM) Attack
  • Hacker menyusup ke komunikasi antara dua pihak untuk mencuri atau memodifikasi data.
  • Contoh: Serangan terhadap Wi-Fi publik untuk mencuri kredensial login.
  1. Replay Attack
  • Menangkap lalu lintas yang sah dan mengulanginya untuk mendapatkan akses tidak sah.
  • Contoh: Menangkap token autentikasi dan menggunakannya kembali untuk login tanpa izin.

6️⃣ Presentation Layer (Lapisan Presentasi)

🔹 Fungsi: Mengonversi dan mengenkripsi data agar bisa dipahami oleh aplikasi.
🔹 Serangan Umum:
17. SSL Stripping Attack

  • Mengubah koneksi HTTPS menjadi HTTP agar data tidak terenkripsi.
  • Contoh: Hacker mengalihkan pengguna dari situs aman ke versi HTTP yang tidak aman.
  1. Code Injection (SQL Injection, XSS, DLL Injection, dll.)
  • Menyisipkan kode berbahaya ke dalam aplikasi untuk mencuri atau merusak data.
  • Contoh: SQL Injection digunakan untuk mencuri database website.

7️⃣ Application Layer (Lapisan Aplikasi)

🔹 Fungsi: Berinteraksi langsung dengan pengguna dan aplikasi berbasis jaringan.
🔹 Serangan Umum:
19. Phishing Attack

  • Menipu pengguna agar memberikan informasi sensitif melalui email atau website palsu.
  • Contoh: Email palsu yang mengklaim berasal dari bank untuk mencuri data login.
  1. DNS Spoofing
  • Mengarahkan pengguna ke situs palsu dengan memanipulasi cache DNS.
  • Contoh: Pengguna yang seharusnya masuk ke gmail.com diarahkan ke situs palsu.
  1. Buffer Overflow Attack
  • Mengirimkan input data melebihi batas buffer untuk mengeksekusi kode berbahaya.
  • Contoh: Digunakan untuk mengeksploitasi kelemahan dalam aplikasi dan menjalankan kode berbahaya.

Kesimpulan

  • Setiap lapisan OSI memiliki potensi serangan yang berbeda.
  • Menggunakan kombinasi firewall, enkripsi, dan autentikasi yang kuat dapat membantu melindungi sistem.
  • Memahami cara kerja serangan ini sangat penting untuk meningkatkan keamanan jaringan.

iklan

iklan