Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang · Pelajaran

Suntikan Perintah dan Kod

Pelajari cara mengenal pasti dan mengurangkan kerentanan berkaitan suntikan perintah OS serta pelaksanaan kod arbitrari dalam sistem bahagian belakang.

Pelajaran 2 daripada 411 langkah

Suntikan Perintah dan Kod ialah pelajaran Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang merangkumi sejumlah 4 pelajaran.

Apakah Suntikan Arahan dan Kod?

Selamat datang! Dalam pelajaran ini, kita akan meneroka Suntikan Arahan dan Suntikan Kod, iaitu dua kerentanan bahagian belakang yang kritikal.

Serangan ini memperdaya aplikasi anda supaya melaksanakan arahan sistem atau kod pada peringkat aplikasi yang tidak dikehendaki, lalu menyebabkan pelanggaran keselamatan yang serius.

  • Suntikan Arahan: Melaksanakan arahan OS.
  • Suntikan Kod: Melaksanakan kod bahasa pengaturcaraan aplikasi.

Asas Suntikan Arahan OS

Suntikan Arahan OS berlaku apabila penyerang boleh menjalankan arahan sistem pengendalian sewenang-wenangnya pada pelayan yang mengehos aplikasi anda.

Hal ini berlaku apabila aplikasi menghantar input yang diberikan pengguna tanpa ditapis ke cangkerang sistem, lazimnya melalui fungsi yang melaksanakan atur cara luaran.

Penyerang kemudiannya boleh:

  • Membaca, menulis atau memadam fail.
  • Melaksanakan skrip berniat jahat.
  • Mendapatkan kawalan penuh terhadap pelayan.

Contoh Arahan OS yang Rentan

Mari kita lihat contoh Java yang rentan. Bayangkan userInput datang terus daripada borang web.

Penyerang boleh menggunakan pemisah arahan (seperti ; atau &) untuk menambah arahan baharu pada arahan asal.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CommandInjectionDemo {
  public static void main(String[] args) {
    // Imagine 'userInput' comes from a web request parameter
    String userInput = "my_file.txt; echo HELLO_INJECTED_COMMAND"; // Malicious input example
    // For Windows: "my_file.txt & echo HELLO_INJECTED_COMMAND"
    
    // VULNERABLE: Direct concatenation of user input into a system command
    String command = "ls -l " + userInput; // Linux example command
    // For Windows: String command = "dir " + userInput;
    
    System.out.println("Executing: " + command);
    
    try {
      Process p = Runtime.getRuntime().exec(command);
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line;
      while ((line = reader.readLine()) != null) {
        System.out.println(line);
      }
      p.waitFor(); // Wait for the command to finish
    } catch (Exception e) {
      System.err.println("Error executing command: " + e.getMessage());
    }
  }
}

Cara Suntikan Ini Berfungsi

Dalam contoh sebelumnya, rentetan ls -l my_file.txt; echo HELLO_INJECTED_COMMAND dihantar kepada cangkerang.

Titik koma (;) ialah pemisah arahan pada sistem seperti Linux/Unix. Simbol ini memberitahu cangkerang supaya melaksanakan arahan pertama, kemudian arahan kedua.

Walaupun my_file.txt tidak wujud, arahan echo masih akan dijalankan, sekali gus menunjukkan berlakunya suntikan.

Mitigasi: Pengesahan Kesahihan Input

Pertahanan utama terhadap OS Command Injection ialah pengesahan input yang ketat.

  • Senarai dibenarkan: Ini ialah pendekatan yang paling selamat. Tentukan dengan tepat aksara, format atau nilai yang dibenarkan untuk input pengguna. Tolak apa-apa yang tidak sepadan.
  • Elakkan senarai disekat: Percubaan untuk menyekat aksara berniat jahat yang diketahui (seperti ;, &) sering dapat dipintas kerana tafsiran shell yang berbeza atau helah pengekodan.

Mitigasi: Utamakan API Selamat

Daripada menggabungkan input pengguna secara langsung ke dalam rentetan arahan, gunakan API yang menghantar argumen sebagai elemen berasingan kepada arahan tersebut.

Dalam Java, ProcessBuilder lebih selamat daripada Runtime.getRuntime().exec() apabila digunakan dengan betul, kerana ia tidak memanggil shell secara lalai untuk mentafsir argumen.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class SafeCommandExec {
  public static void main(String[] args) {
    // Imagine 'userInput' comes from a web request parameter
    String userInput = "my_file.txt; echo HELLO_INJECTED_COMMAND"; // Malicious input attempt
    
    // SECURE: Pass arguments as separate strings to ProcessBuilder
    // The shell will NOT interpret '; echo HELLO_INJECTED_COMMAND' as a new command
    ProcessBuilder pb = new ProcessBuilder("ls", "-l", userInput);
    // For Windows: ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "dir", userInput);
    
    System.out.println("Executing: " + String.join(" ", pb.command()));
    
    try {
      Process p = pb.start(); // Start the process
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line;
      while ((line = reader.readLine()) != null) {
        System.out.println(line);
      }
      p.waitFor();
    } catch (Exception e) {
      System.err.println("Error executing command: " + e.getMessage());
    }
  }
}

Memahami Suntikan Kod

Suntikan Kod serupa dengan Command Injection, tetapi bukannya arahan OS, ia melaksanakan kod sewenang-wenangnya dalam bahasa pengaturcaraan aplikasi.

Hal ini boleh berlaku apabila aplikasi:

  • Menilai input yang dibekalkan pengguna sebagai kod boleh laku (contohnya, menggunakan eval() dalam bahasa penskripan atau Bahasa Ungkapan dalam Java).
  • Menyahsiri data yang tidak dipercayai sehingga objek berniat jahat boleh dibina.
  • Menggunakan enjin templat yang terdedah kepada kelemahan.

Senario Suntikan Kod

Tidak seperti OS Command Injection yang menyasarkan shell sistem pengendalian, Suntikan Kod menyasarkan persekitaran masa jalan aplikasi.

  • Penilaian Dinamik: Jika aplikasi anda mengambil input pengguna dan menggunakannya dalam fungsi seperti eval() (lazim dalam Python, PHP, JavaScript), penyerang boleh menyuntik kod mereka sendiri.
  • Penyahsirian Tidak Selamat: Apabila aplikasi menyahsiri data yang tidak dipercayai tanpa pengesahan yang betul, penyerang boleh mereka bentuk objek bersiri berniat jahat yang melaksanakan kod semasa dinyahsiarkan.

Aplikasi Java amat terdedah kepada penyahsirian yang tidak selamat.

Mencegah Suntikan Kod

Mitigasi Suntikan Kod memerlukan reka bentuk yang teliti dan pengendalian data yang ketat:

  • Elakkan Pelaksanaan Kod Dinamik: Jangan gunakan fungsi yang menilai input pengguna sebagai kod.
  • Sahkan Data yang Dinyahsiri: Nyahsiri data hanya daripada sumber yang dipercayai. Laksanakan pemeriksaan jenis dan pengesahan objek yang ketat untuk sebarang input yang dinyahsiri.
  • Gunakan Enjin Templat Selamat: Pastikan enjin templat anda melarikan data yang diberikan pengguna secara automatik untuk mencegah suntikan.
  • Keistimewaan Minimum: Jalankan aplikasi anda dengan keizinan minimum yang diperlukan.

Uji Pengetahuan Anda

Masanya untuk semakan ringkas! Pilih amalan yang paling berkesan untuk mencegah kerentanan suntikan.

Imbas Kembali: Pertahanan terhadap Suntikan

Syabas! Anda telah mempelajari tentang Command Injection dan Suntikan Kod.

  • Command Injection membolehkan penyerang menjalankan arahan OS.
  • Suntikan Kod membolehkan penyerang menjalankan kod pada peringkat aplikasi.
  • Pertahanan utama merangkumi pengesahan input yang ketat (senarai dibenarkan), penggunaan API selamat (seperti ProcessBuilder dengan argumen berasingan), dan mengelakkan pelaksanaan kod dinamik daripada sumber yang tidak dipercayai.

Sentiasa anggap input pengguna sebagai data yang tidak dipercayai!

Percuma untuk bermula

Pelajari Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Suntikan Perintah dan Kod” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang, termasuk “Suntikan Perintah dan Kod”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Suntikan Perintah dan Kod”?

Pelajari cara mengenal pasti dan mengurangkan kerentanan berkaitan suntikan perintah OS serta pelaksanaan kod arbitrari dalam sistem bahagian belakang. Anda berlatih Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Suntikan Perintah dan Kod” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang ini?

Ya. Setiap pelajaran Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pencegahan Suntikan SQL
  2. Suntikan Perintah dan Kod
  3. Skrip Rentas Tapak (XSS) dalam Bahagian Belakang
  4. Mencegah Suntikan XML dan LDAP
← Kembali ke Pengekodan Selamat dan OWASP Top 10 untuk Bahagian Belakang