လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP Defete function ကို အသုံးပြု. ဒေတာဘေ့စ်မှတ်တမ်းများကိုဖျက်ချိန်တွင် SQL ဆေးထိုးခြင်းကိုမည်သို့ထိရောက်စွာတားဆီးနိုင်သနည်း။ လုံခြုံရေးလမ်းညွှန်

PHP Defete function ကို အသုံးပြု. ဒေတာဘေ့စ်မှတ်တမ်းများကိုဖျက်ချိန်တွင် SQL ဆေးထိုးခြင်းကိုမည်သို့ထိရောက်စွာတားဆီးနိုင်သနည်း။ လုံခြုံရေးလမ်းညွှန်

gitbox 2025-06-15

SQL Inject ဆိုတာဘာလဲ။

SQL Injection သည်တိုက်ခိုက်မှုနည်းလမ်းဖြစ်သည်။ တိုက်ခိုက်သူတစ် ဦး သည် Database အား SQL Code သို့မသွားသော SQL Code ကိုထည့်သွင်းခြင်းအားဖြင့်ခွင့်ပြုချက်မရှိဘဲလုပ်ဆောင်မှုများပြုလုပ်ရန်တားဆီးထားသည်။ Delete ထုတ်ပြန်ချက်များအတွက်တိုက်ခိုက်သူများသည် SQL Injection မှတစ်ဆင့်မဖျက်သင့်ဘဲဒေတာဗားရှင်းတစ်ခုလုံးကိုဖျက်ပစ်ခြင်းကိုပင်ဖျက်ပစ်နိုင်သည်။

1 ။ ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုသုံးပါ

SQL Injection ကိုထိရောက်စွာကာကွယ်ရန်အတွက်အကြံပြုထားသောချဉ်းကပ်နည်းသည် ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များကို အသုံးပြုရန်ဖြစ်သည်။ MySQLI နှင့် PDO ၏ extensions များကို MySQL ဒေတာဘေ့စ်များနှင့်အပြန်အလှန်ဆက်သွယ်သည့်အခါအသုံးပြုသော MySQLI နှင့် PDO extension များကိုထောက်ပံ့ပေးသည်။ ဤနည်းအားဖြင့် SQL query နှင့် input အသုံးပြုသူအချက်အလက်များကိုခွဲထုတ်နိုင်သည်။ အားဖြင့် SQL ထုတ်ပြန်ချက်များသို့ထိုးသွင်းခြင်းမှအန္တရာယ်ရှိသော input ကိုတားဆီးနိုင်သည်။

MySQLI extension ကိုဖျက်ရန်
 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ဒေတာဘေ့စ်ဆက်သွယ်မှု</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database_name"</span></span><span>);

</span><span><span class="hljs-comment">// ဆက်သွယ်မှုကိုစစ်ဆေးပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Connection failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// ငါတို့ဖျက်ချင်တယ်ဆိုပါစို့IDအသုံးပြုသူတစ် ဦး မှပေးအပ်တန်ဖိုးများမှတ်တမ်းများ</span></span><span>
</span><span><span class="hljs-variable">$user_id</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>];  </span><span><span class="hljs-comment">// မှURLအသုံးပြုသူမှပေးသောအသုံးပြုသူကိုရယူပါID</span></span><span>

</span><span><span class="hljs-comment">// ကာကွယ်တားဆီးဖို့ပြင်ဆင်ထားထုတ်ပြန်ချက်များကိုသုံးပါSQLသွင်းခြင်း</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"DELETE FROM users WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$user_id</span></span><span>);  </span><span><span class="hljs-comment">// "i" အဆိုပါ parameter သည် integer type ဖြစ်ပါတယ်ကြောင်းဖော်ပြသည်</span></span><span>

</span><span><span class="hljs-comment">// Execution ကြေငြာချက်</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();

</span><span><span class="hljs-comment">// ပယ်ဖျက်ခြင်းသည်အောင်မြင်မှုရှိမရှိစစ်ဆေးပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;affected_rows &gt; </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"မှတ်တမ်းများကိုဖျက်ပစ်လိုက်ပြီ。"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"မှတ်တမ်းကိုရှာမတွေ့ပါသို့မဟုတ်ပယ်ဖျက်ခြင်းမအောင်မြင်ပါ。"</span></span><span>;
}

</span><span><span class="hljs-comment">// ဆက်သွယ်မှုကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

အထက်ဖော်ပြပါကုဒ်များတွင် ဒေါ်လာ stmt_param () ကို အသုံးပြုသူ၏ ID input ကို bindt လုပ်ရန်အသုံးပြုသည်။ ဆိုလိုသည်မှာ parameter သည်ကိန်းဂဏန်းအမျိုးအစားဖြစ်သည်။ ၎င်းသည် SQL Injection ကို ထိရောက်စွာကာကွယ်နိုင်သည်။

ဖျက်ရန် PDO extension ကိုသုံးပါ
 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// ဒေတာဘေ့စ်ဆက်သွယ်မှု</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=database_name'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setAttribute</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>);

    </span><span><span class="hljs-comment">// ငါတို့ဖျက်ချင်တယ်ဆိုပါစို့IDအသုံးပြုသူတစ် ဦး မှပေးအပ်တန်ဖိုးများမှတ်တမ်းများ</span></span><span>
    </span><span><span class="hljs-variable">$user_id</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>];  </span><span><span class="hljs-comment">// မှURLအသုံးပြုသူမှပေးသောအသုံးပြုသူကိုရယူပါID</span></span><span>

    </span><span><span class="hljs-comment">// ပြင်ဆင်ထားထုတ်ပြန်ချက်များကိုသုံးပါ</span></span><span>
    </span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"DELETE FROM users WHERE id = :id"</span></span><span>);
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':id'</span></span><span>, </span><span><span class="hljs-variable">$user_id</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">PARAM_INT</span></span><span>);

    </span><span><span class="hljs-comment">// Execution ကြေငြာချက်</span></span><span>
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();

    </span><span><span class="hljs-comment">// ပယ်ဖျက်ခြင်းသည်အောင်မြင်မှုရှိမရှိစစ်ဆေးပါ</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rowCount</span></span><span>() &gt; </span><span><span class="hljs-number">0</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"မှတ်တမ်းများကိုဖျက်ပစ်လိုက်ပြီ。"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"မှတ်တမ်းကိုရှာမတွေ့ပါသို့မဟုတ်ပယ်ဖျက်ခြင်းမအောင်မြင်ပါ。"</span></span><span>;
    }

} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အမှား: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

PDO တွင်အသုံးပြုသူ bindparam () တွင်အသုံးပြုသူမှထည့်သွင်းထားသော parameters တွေကို sql stred တစ်ခုထဲသို့ထည့်သွင်းထားပြီး PDO :: Param_int မှတဆင့်ကိန်းဂဏန်းတစ်ခုအဖြစ်သတ်မှတ်သည်။ ၎င်းသည် SQL ထိုးဆေးကိုကာကွယ်ပေးသည်။

2 ။ ပုံမှန်အသုံးအနှုန်းများသို့မဟုတ် filter များကို အသုံးပြု. အသုံးပြုသူထည့်သွင်းမှုကိုစစ်ဆေးပါ

ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုအသုံးပြုရန်အပြင်အခြားထိရောက်သောလုံခြုံရေးကာကွယ်မှုသည်အသုံးပြုသူထည့်သွင်းမှုများကိုအတည်ပြုရန်နှင့်စစ်ထုတ်ရန်ဖြစ်သည်။ အထူးသဖြင့်အိုင်ဒီအကွက်များအတွက်ဖျက်ခြင်းလုပ်ငန်းများအတွက်,

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$user_id</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>];

</span><span><span class="hljs-comment">// input ကိုတရားဝင်ကိန်းတစ်ခုဖြစ်ကြောင်းအတည်ပြုပါ</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>, FILTER_VALIDATE_INT)) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"မမှန်ကန်သောအသုံးပြုသူID"</span></span><span>);
}

</span><span><span class="hljs-comment">// ဒေတာဘေ့စပယ်ဖျက်ရေးစစ်ဆင်ရေးလုပ်ဆောင်ပါ</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

အသုံးပြုသူမှပေးသော ID သည်တရားဝင်ကိန်းဖြစ်သည်ကိုစစ်ဆေးရန် filter_var () function ကိုသုံးပါ။ မရရှိလျှင်, ကွပ်မျက်တိုက်ရိုက်ရပ်တန့်လိမ့်မည်။ ဒီအပိုဆောင်းစိစစ်အတည်ပြုလုံခြုံရေးကိုတိုးတက်စေနိုင်ပါတယ်။

3 ။ အနည်းဆုံးခွင့်ပြုချက်ကိုသုံးပါ

ဒေတာဘေ့စ်နှင့်အပြန်အလှန်ဆက်သွယ်သောအခါ အနည်းဆုံးခွင့်ပြုချက်များ၏နိယာမကို အမြဲတမ်းလိုက်နာပါ။ ဒေတာဘေ့စအကောင့်သည်လိုအပ်သောလုပ်ရပ်များပြုလုပ်ရန်ခွင့်ပြုချက်သာရှိသည်။ ဥပမာအားဖြင့်ပယ်ဖျက်ခြင်းသည်ဒေတာဘေ့စ်အကောင့်များသို့အပြည့်အ 0 ခွင့်ပြုမည့်အစားသီးခြားဒေတာဘေ့စ်အကောင့်များကိုသာပြုလုပ်သင့်သည်။ ဤနည်းအားဖြင့် SQL injection အားနည်းချက်ကိုဖြစ်ပေါ်နေလျှင်ပင်တိုက်ခိုက်သူတစ် ဦး လုပ်ဆောင်နိုင်သည့်လုပ်ဆောင်မှုများမှာအကန့်အသတ်ရှိသည်။

4 ။ SQL မှတ်တမ်းများနှင့်စောင့်ကြည့်လေ့လာခြင်းကိုသုံးပါ

အလားအလာရှိသော SQL injection တိုက်ခိုက်မှုများကိုအချိန်မီရှာဖွေတွေ့ရှိနိုင်ရန်အတွက်ဒေတာဘေ့စ်၏ SQL logging function ကို enable လုပ်ရန်နှင့်ဒေတာဘေ့စ်ကိုစောင့်ကြည့်ရန်အကြံပြုသည်။ ဤသည်တိုက်ခိုက်မှုတစ်ခုဖြစ်ပွားသည့်အခါပုံမှန်မဟုတ်သောလှုပ်ရှားမှုများကိုခြေရာခံသည်။

5 ။ ပုံမှန်မွမ်းမံမှုများနှင့်ပြင်ဆင်ဖာထေးမှုများ

နောက်ဆုံးအနေဖြင့် PHP, Databases နှင့်သက်ဆိုင်သောအစိတ်အပိုင်းများအားလုံးကိုဆက်လက်ထိန်းသိမ်းထားခြင်းသည်လုံခြုံရေးအားနည်းချက်များကိုကာကွယ်ရန်သော့ချက်ဖြစ်သည်။ စနစ်များအားလုံးသည်နောက်ဆုံးပေါ်လုံခြုံရေးပြင်ဆင်မှုများနှင့်အတူတင်ဆောင်ကြောင်းသေချာစေရန်လုံခြုံရေးသတိပေးချက်များကိုမကြာခဏစစ်ဆေးပါ။

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    SQL