PHP တွင်ကြိုးများကိုပြုပြင်သည့်အခါတိကျသော tag အကြောင်းအရာများကို HTML code တွင်အစားထိုးရန်လိုအပ်သည်။ အထူးသဖြင့် XSS တိုက်ခိုက်မှုများကိုရှောင်ရှားရန် <script> tags များရှိအကြောင်းအရာများကိုသန့်ရှင်းရေးသို့မဟုတ်ပြုပြင်ခြင်းကဲ့သို့သောလုံခြုံရေးနှင့်သက်ဆိုင်သောအကြောင်းအရာများနှင့်ဆက်ဆံရာတွင်ကိုင်တွယ်သည့်အခါ။ ဤဆောင်းပါးသည် HTML tags များ၌တိကျသောအကြောင်းအရာများကိုအစားထိုးရန် MB_EREGI_RESTATETATE function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။
Mb_eregi_replace သည် PHP တွင် Multi-byte string function ၏အစိတ်အပိုင်းတစ်ခုဖြစ်ပြီးပုံမှန်အသုံးအနှုန်းများကိုအသေးအဖွဲအာရုံမခံစားနိုင်သောအစားထိုးမှုကိုထောက်ပံ့သည်။ ရိုးရာ eregi_replace နှင့်နှိုင်းယှဉ်လျှင် UTF-8 ကဲ့သို့သော Multi-byte encoding ကိုပိုမိုကောင်းမွန်စွာကိုင်တွယ်နိုင်ပြီးတရုတ်နှင့်အခြား multi-byte character set များကိုကိုင်တွယ်ရန်သင့်တော်သည်။
function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$ ပုံစံ - ပုံမှန်အသုံးအနှုန်းပုံစံ (ကိစ္စတွင်မခံစားနိုင်သော)
$ အစားထိုး : အကြောင်းအရာကိုအစားထိုးပါ
$ string : string ကိုရိုက်ထည့်ပါ
$ option : optional parameter, default "MSR" , multi-line mode, single-line mode, utf-8 support etc ။
ရည်မှန်းချက်မှာ communents အားလုံးကို <script> tags များနှင့်ကိုက်ညီရန်ဖြစ်သည်။ နမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
<?php
// မူရင်းဖြစ်သောHTMLကြိုး,ပါဝင်<script>ကပ်တံဆိပ်
$html = '<div>ဥပမာအကြောင်းအရာ<script>alert("အန္တရာယ်ရှိသော scripts");</script>ပိုပြီးအကြောင်းအရာ</div>';
// အသုံးပြု mb_eregi_replace ပြန်လည်နေရာချ <script> ကပ်တံဆိပ်中的内容
// ပုံမှန်စကားရပ်ဖော်ပြချက်:
// <script[^>]*> ကိုက်ညီ<script>ကပ်တံဆိပ်的开始,attribute တွေကိုခွင့်ပြုပါ
// .*? 非贪婪ကိုက်ညီ<script>နှင့်</script>အကြားအရာအားလုံး
// </script> ကိုက်ညီ结束ကပ်တံဆိပ်
$pattern = '<script[^>]*>.*?</script>';
// ပြန်လည်နေရာချ为安全提示或空内容
$replacement = '<script>/* 脚本内容已被ပြန်လည်နေရာချ */</script>';
// 执行ပြန်လည်နေရာချ
$safe_html = mb_eregi_replace($pattern, $replacement, $html);
echo $safe_html;
?>
ရလဒ်ရလဒ် -
<div>ဥပမာအကြောင်းအရာ<script>/* 脚本内容已被ပြန်လည်နေရာချ */</script>ပိုပြီးအကြောင်းအရာ</div>
MB_ereGi_replace သည်ပုံမှန်အားဖြင့်ဖြစ်ရပ်မှန်နှင့်စပ်လျဉ်း။ မခံစားနိုင်သောကြောင့်၎င်းသည် <script> နှင့် <script> နှစ်ခုလုံးနှင့်ကိုက်ညီနိုင်သည်။
အဆိုပါ ။ *? ပုံမှန်နှင့်လောဘမရသည့်ပုံစံသည်ပုံမှန် </ script> tag ကိုအဆုံးသတ်ရန်နှင့်မလိုအပ်သောအကြောင်းအရာနှင့်မကိုက်ညီပါနှင့်။
သင် multi-script ဇာတ်ညွှန်း၏ပါဝင်မှုနှင့်ကိုက်ညီရန်လိုအပ်ပါကပုံမှန်ရွေးချယ်မှုသည်တစ်ခုတည်းသောပုံစံကိုထောက်ပံ့ရန် ( ။ ကိုက်ညီသောအသစ်များ) ကိုထောက်ပံ့ရန်သေချာပါစေနှင့် default သည် MSR ဖြစ်သည်။
အကယ်. <script> tag ထဲ၌ URL ကိုအစားထိုးလိုပါက domain name ကို M66.net နှင့်အတူ domain name ကိုအစားထိုးပါ။ callback function ကိုပေါင်းစပ်။ သင်ကိုင်တွယ်နိုင်သည်။
<?php
$html = '<script src="http://example.com/js/app.js"></script>';
// 先ကိုက်ညီ<script>ကပ်တံဆိပ်
$pattern = '<script[^>]*>.*?</script>';
$safe_html = mb_eregi_replace($pattern, function($matches) {
$script_tag = $matches[0];
// ပြန်လည်နေရာချ URL ဒိုမိန်းအမည်ဖြစ်သည် m66.net,အသုံးပြု简单的正则ပြန်လည်နေရာချ
$script_tag = preg_replace('#(https?://)([^/]+)#i', '$1m66.net', $script_tag);
return $script_tag;
}, $html);
echo $safe_html;
?>
ထုတ်လုပ်မှု -
သက်ဆိုင်သောတက်(ဂ်)များ:
HTML