လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> SQL Injection ကိုကာကွယ်ရန် stmtt_init ၏အခန်းကဏ် and နှင့်တန်ဖိုး

SQL Injection ကိုကာကွယ်ရန် stmtt_init ၏အခန်းကဏ် and နှင့်တန်ဖိုး

M66 2025-06-02

MySQLI :: stmt_init သည် ပြင်ဆင်ထားသောကြေညာချက်ကို အစပြု. အသုံးပြုသော PHP MySQLI extension တွင်နည်းလမ်းဖြစ်သည်။ ပြင်ဆင်ထားသည့်ဖော်ပြချက်များသည် SQL Query များကို အသုံးပြု. SQL Query များကို အသုံးပြု. SQL Query များမှ SQL quertes များကို အသုံးပြု. SQL Injection Attack ကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။ ဤနည်းလမ်းမှတစ်ဆင့် developer သည်အချည်းနှီးသောဖော်ပြချက်အရာဝတ်ထုတစ်ခုကို ဦး စွာဖန်တီးနိုင်ပြီး parameters တွေကို binded bind နှင့်နောက်ဆက်တွဲစစ်ဆင်ရေးများတွင်သူတို့ကို execute လုပ်နိုင်သည်။

SQL ဆေးထိုးတိုက်ခိုက်မှုများကိုကာကွယ်ရန်အခြေခံမူများ

SQL Injection Attack ၏နိယာမကတိုက်ခိုက်သူသည်အသုံးပြုသူမှ username, password စသည်ဖြင့်ထည့်သွင်းထားသောနယ်ပယ်များသို့ 0 င်ရောက်ခြင်းကိုထည့်သွင်းခြင်းနှင့် login query ကဲ့သို့သော SQL query သို့တိုက်ရိုက်ဖြည့်ဆည်းပေးသည်။ ဤနည်းအားဖြင့်တိုက်ခိုက်သူသည်အန္တရာယ်ရှိသောလုပ်ဆောင်မှုများပြုလုပ်ရန်မူရင်း SQL ကြေငြာချက်ကိုပြုပြင်နိုင်သည်။ ဤအရာကိုရှောင်ရှားရန် MySQLI သည်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့်စည်းမျဉ်းစည်းကမ်းများကိုထောက်ပံ့ပေးသည်။

MySQLI :: stmt_init ၏အကူအညီဖြင့် developer များသည်အောက်ပါအဆင့်များမှတဆင့် SQL Injection ကိုရှောင်ရှားနိုင်သည်။

  1. သီးခြားစုံစမ်းမှုပုံစံနှင့်အချက်အလက်များ - MySQLI :: Stmt_init သည် SQL query template ကိုစတင်ရန်အသုံးပြုသည်။ ဆိုလိုသည်မှာအသုံးပြုသူမှထည့်သွင်းထားသောအချက်အလက်များသည် SQL ကြေငြာချက်နှင့်တိုက်ရိုက်မကွဲသေးသော်လည်းဒေတာဘေ့စ်သို့ parameter သည် passabase သို့ကူးသွားသည်။

  2. binding parameters များ - bind_param method မှတဆင့် developer များကသုံးစွဲသူများကို SQL query ၏ parameters များကိုအားဖြည့်နိုင်သည်။ ဤထည့်သွင်းမှုအချက်အလက်များကို MySQL ဆာဗာမှ၎င်းတို့အား SQL Code အဖြစ်မကွပ်မျက်ရန်သေချာစေရန် MySQL ဆာဗာမှပြုလုပ်သည်။ ဥပမာအားဖြင့်, ကြိုးများကိုအလိုအလျောက်ကိုးကားပြီးနံပါတ်များကိုသင့်လျော်စွာလုပ်ဆောင်လိမ့်မည်။ ဤနည်းအားဖြင့်အသုံးပြုသူသည်အန္တရာယ်ရှိသော SQL Code ထဲသို့ 0 င်ရောက်သော်လည်းပင်လျှင်စုံစမ်းမှု၏ကွပ်မျက်မှုကိုမထိခိုက်နိုင်ပါ။

  3. Execute query: စုံစမ်းမှုအားလုံးကို parameters တွေကိုအားလုံးချည်နှောင်ပြီးမှသာကွပ်မျက်ခံရလိမ့်မည်။ ဤနည်းအားဖြင့်အသုံးပြုသူသည် SQL Injection Code ပါ 0 င်သော string တစ်ခုထဲသို့ 0 င်ရောက်သော်လည်း,

MySQLI :: stmt_init မှတဆင့်စုံစမ်းမှုလုံခြုံရေးကိုတိုးတက်အောင်ဘယ်လိုလုပ်ရမလဲ။

MySQLI :: stmt_init နှင့် preprocessing ထုတ်ပြန်ချက်များနှင့်အတူ SQL Injection Attack ၏အန္တရာယ်ကိုအခြေခံအားဖြင့်လျှော့ချနိုင်သည်။ ဤတွင်အောင်မြင်ရန်အဆင့်များမှာဤတွင်ဖြစ်သည်။

  1. MySQLI :: STMT_INIT ကို အသုံးပြု. MYSQLI :: stmt_init ကို သုံးပါ။

     $conn = new mysqli('localhost', 'username', 'password', 'database');
    $stmt = $conn->stmt_init();
    
  2. ပြင်ဆင်ရန် SQL query ကိုပြင်ဆင်ပါ။ ပြင်ဆင်ထားသော SQL ကြေငြာချက်ပုံစံတစ်ခုကိုဖန်တီးရန် ပြင်ဆင်သည့် နည်းလမ်းကိုသုံးပါ။ SQL query တွင်အသုံးပြုသူထည့်သွင်းမှုအပိုင်းသည် placeholders များကိုအသုံးပြုသည်ကိုသတိပြုပါ

     $sql = "SELECT * FROM users WHERE username = ? AND password = ?";
    if ($stmt->prepare($sql)) {
        // နောက်ထပ်စစ်ဆင်ရေး
    }
    
  3. binding parametersters: SQL query template ရှိ placeholder ဖြင့်အသုံးပြုသူ input valfe ကိုချည်နှောင်ရန် bind_param နည်းလမ်းကိုအသုံးပြုပါ။ ဤနည်းလမ်း၏ဒုတိယ pareter သည် string ကို ကိုယ်စားပြု သည့် parameter အမျိုးအစားကိုကိုယ်စားပြုသည်

     $stmt->bind_param('ss', $username, $password);
    
  4. Execute query: နောက်ဆုံးအနေနဲ့ SQL query ကို execute နည်းလမ်းမှတဆင့်ကွပ်မျက်ခံရဖို့ parameters တွေကိုနှင့်အတူ။

     $stmt->execute();
    

ဤနည်းအားဖြင့် SQL Queries တွင်အသုံးပြုသူထည့်သွင်းမှုသည် SQL Code ထက်အချက်အလက်များအဖြစ်အမြဲတမ်းကုသပေးလိမ့်မည်။

နမူနာကုဒ်: login verification

MySQLI :: stmt_init ကို အသုံးပြု. SQL ထိုးဆေးကိုမည်သို့ကာကွယ်ရမည်ကိုပြသသည့်လက်တွေ့ကျသောဥပမာတစ်ခုရှိသည်။

 <?php
$conn = new mysqli('localhost', 'username', 'password', 'database');

// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// အသုံးပြုသူ input ကိုရယူပါ
$username = $_POST['username'];
$password = $_POST['password'];

// Preprocessing ထုတ်ပြန်ချက်များကိုအစပြု
$stmt = $conn->stmt_init();

if ($stmt->prepare("SELECT * FROM users WHERE username = ? AND password = ?")) {
    // parameters တွေကိုချည်ထား
    $stmt->bind_param('ss', $username, $password);

    // တစ် ဦး စုံစမ်းမှု execute
    $stmt->execute();

    // ရလဒ်များကိုရယူပါ
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        echo "အောင်မြင်စွာဝင်ပါ!";
    } else {
        echo "မမှန်ကန်သောအသုံးပြုသူအမည်သို့မဟုတ်စကားဝှက်。";
    }

    // ကြေငြာချက်
    $stmt->close();
}

// ဆက်သွယ်မှုကိုပိတ်ပါ
$conn->close();
?>

ဤဥပမာတွင်အသုံးပြုသူ input တွင်အန္တရာယ်ရှိသည့်ကုဒ် (ဥပမာ admin 'သို့မဟုတ်' 1 '=' 1 '1 ) ပါ 0 င်သည်။