Beans html මොඩියුල php නම. Jdoc:include - පිටුවේ අන්තර්ගතය පෙන්වීමේ ක්රමය. සරල ස්ලැෂ් එකතු කිරීම
අපි සැකිල්ලක අන්තර්ගත ප්රදර්ශනය කිරීමේ ක්රම යන මාතෘකාව කෙටියෙන් ස්පර්ශ කර ඇත. එය කුමක්ද සහ එය අනුභව කරන්නේ කුමක්ද යන්න අපි දැන් සමීපව බලමු. ඉතින්, ක්රම ප්රකාශන jdoc සෑම ජූම්ලා අච්චුවකම ඇත සහ සැකිල්ලේ ශරීරය තුළ මෙම හෝ එම තොරතුරු ප්රදර්ශනය කරන්න (එනම්, අඩවි පිටුවෙහි). පොදුවේ ගත් කල, ක්රම ප්රකාශය මේ ආකාරයෙන් පෙනේ:
මෙම රේඛාව අඩවියේ ඇති සංරචක වලින් තොරතුරු පෙන්වයි, උදාහරණයක් ලෙස com_content වෙතින් ලිපි. නිමැවුම් මූලද්රව්ය වර්ගය ගුණාංගයේ දක්වා ඇත.
1. වර්ගය - ප්රතිදාන මූලද්රව්ය වර්ග.
- සංරචකය- මා ඉහත ලියා ඇති පරිදි, පිටුවේ ප්රධාන අන්තර්ගතය පෙන්වයි. එක් සැකිල්ලකට එක් වරක් පමණක් ඇමතිය හැක.
- හිස- විවෘත කිරීමේ ටැගයට පසුව වරක් නිවේදනය කරනු ලැබේ . මෝස්තර, ස්ක්රිප්ට්, සංදර්ශන කිරීමට සේවය කරයි
සහ වත්මන් පිටුවේ පාරදත්ත. - පණිවුඩය- පද්ධති පණිවිඩ පෙන්වයි. ලේඛනයේ සිරුරේ එක් වරක් ප්රකාශ කර ඇත.
- ස්ථාපන- කිසිවක් ප්රදර්ශනය නොකරන අතර ස්ථාපනය සඳහා "උපදෙස්" වේ.
- මොඩියුලය -පිටුවේ තනි මොඩියුලයක් පෙන්වයි. වෙළඳ දැන්වීම් ගණන අසීමිතයි.
- මොඩියුල- පෙර වර්ගය මෙන් නොව, එහි ස්ථානයේ තනි මොඩියුල ගණනකට වඩා පෙන්වීමට එය ඔබට ඉඩ සලසයි.
ලැයිස්තුගත කර ඇති පළමු වර්ග හතර සඳහා, ඔබ ඒවා පිටුවේ සඳහන් කළ යුතුය. මොඩියුල වර්ගය සම්බන්ධයෙන්, කාර්යය ටිකක් සංකීර්ණ වේ. පිටුවේ මොඩියුලයක් දර්ශනය කිරීම සඳහා, අපි මුලින්ම ඒ සඳහා මොඩියුලයක් සෑදිය යුතුය මොඩියුලර් පිහිටීමඅද්විතීය හඳුනාගැනීමක් සමඟ (මොඩියුලයේ පිහිටුම් නම). මෙය සිදු කරනු ලබන්නේ නම = "ස්ථානයේ නම" ගුණාංගය සහ පේළියේ අනිවාර්ය එකතු කිරීම භාවිතා කරමිනි:
2. style - නිමැවුම් විලාසයේ විස්තරය (mod chrome).
නිශ්චිත ශෛලිය මත රඳා පවතී පෙනුමසහ මොඩියුල කවච ව්යුහය. වගේ
:
- xhtml -මාතෘකා ශ්රිතය modChrome_xhtml ($මොඩියුලය, &$පරම, &$attribs) සහිත බ්ලොක් එකක මොඩියුලය පෙන්වයි
{
නම් (! හිස් ($මොඩියුල->අන්තර්ගතය)) : ?>
">
සංදර්ශන මාතෘකාව != 0) : ?>
ශීර්ෂය; ?>
අන්තර්ගතය; ?>
} - වගුව -වගු ව්යුහයේ සැකැස්මක මොඩියුලය පෙන්වයි
ශ්රිතය modChrome_table($මොඩියුලය, &$පරම, &$attribs)
{ ?>
">
සංදර්ශන මාතෘකාව != 0) : ?>
ශීර්ෂය; ?>
අන්තර්ගතය; ?>
} - හෝස් -මොඩියුලයක අන්තර්ගතය වගු කොටුවක සංදර්ශන කරයි, තිරස් අතට ක්රියා කරයි modChrome_horz($module, &$params, &$attribs)
{ ?>
} - වටකුරු- ග්රැෆික් මායිම් (උදා: වටකුරු කොන) ශ්රිතය modChrome_rounded($module, &$params, &$attribs) ආකාරයෙන් සංකීර්ණ හැඩගැන්වීම් සඳහා මොඩියුලය කැදලි කුට්ටි කිහිපයකින් පෙන්වයි.
{ ?>
">
සංදර්ශන මාතෘකාව != 0) : ?>
ශීර්ෂය; ?>
අන්තර්ගතය; ?>
} - දළ සටහන- මොඩියුල බ්ලොක් ශ්රිතයට පෙර සැකසූ css මෝස්තර එක් කරයි modChrome_outline ($මොඩියුලය, &$පරම, &$attribs)
{
ස්ථිතික $css=අසත්ය;
නම් (!$css)
{
$css=ඇත්ත;
jimport("joomla.environment.browser");
$doc = JFactory::getDocument();
$browser = JBrowser::getInstance();
$doc->addStyleDeclaration(".mod-preview-info (padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;)");
$doc->addStyleDeclaration(".mod-preview-wrapper (background-color:#eee; border: 1px dotted black; color:#700;)");
නම් ($browser->getBrowser()=="msie")
{
නම් ($browser->getMajor()<= 7) {
$doc->addStyleDeclaration(".mod-preview-info (filter: alpha(opacity=80);)");
$doc->addStyleDeclaration(".mod-preview-wrapper (filter: alpha(opacity=50);)");
}
වෙනත් (
$doc->addStyleDeclaration(".mod-preview-info (-ms-filter: alpha(opacity=80);)");
$doc->addStyleDeclaration(".mod-preview-wrapper (-ms-filter: alpha(opacity=50);)");
}
}
වෙනත්
{
$doc->addStyleDeclaration(".mod-preview-info (පාරපාරත්වය: 0.8;)");
$doc->addStyleDeclaration(".mod-preview-wrapper (පාරපාරභාවය: 0.5;)");
}
}
?>
ස්ථානය."[".$මොඩියුල->විලාසය."]"; ?>
අන්තර්ගතය; ?>
} - කිසිවක් නැත- කිසිසේත් නිශ්චිතව දක්වා නොමැති ශෛලියට සමානයි. සැලසුම් සහ මාතෘකා ශ්රිතයකින් තොරව මොඩියුලයක් පෙන්වයි modChrome_none($මොඩියුලය, &$පරම, &$attribs)
{
echo $module->අන්තර්ගතය;
}
සියලුම පෙර සැකසූ විලාසයන් සැකිලි/පද්ධති/html/modules.php ගොනුවේ පිහිටා ඇත. නමුත් අපි ලබා දී ඇති විකල්පයන් පමණක් භාවිතා කිරීමට පමණක් සීමා වී නැත, නමුත් අපගේම නිර්මාණය කිරීමට තරමක් හැකියාව ඇත.
3. අභිරුචි ක්රෝම් මාදිලියක් සාදන්න.
එබැවින්, ලබා දී ඇති පෙරනිමි මොඩියුල නිරූපණ වර්ග වත්මන් අවශ්යතා සපුරාලන්නේ නැත. ඔබ ඔබේම නිර්මාණ විලාසය එකතු කළ යුතුය. උදාහරණයක් ලෙස, අපි නිතර නිතර පුනරාවර්තන තත්වයක් තෝරා ගනිමු. පැවරුම අනුව එය වෙනුවට අවශ්ය වේ
මොඩියුලයේ මාතෘකාව ටැගයට දමන්න , අර්ථයෙන් මධ්යස්ථ වන. ඔබ මොඩියුලයේ අන්තර්ගත බ්ලොක් එක වෙනමම තැබිය යුතුය . ඔබගේම මොඩියුල නිමැවුම් විලාසයක් නිර්මාණය කිරීම සඳහා, අපි සම්මත මෙවලම් භාවිතා කරන්නෙමු. බොහෝ ජූම්ලා සැකිලි වල html/ ෆෝල්ඩරයක් ඇත (සැකිලි/සැකිල්ල නම/html/), එය ඊනියා සැකිලි සඳහා භාවිතා වේ. එනම්, ඔබ මෙම ෆෝල්ඩරයට මොඩියුල අච්චුවක් පිටපත් කරන්නේ නම්, මොඩියුල/my_module/tmpl/default බහලුමේ ඇති අච්චුව වෙනුවට, templates/template name/html/my_modules/default වෙතින් ගොනුව ප්රතිදානය වනු ඇත. සංරචක එකම ආකාරයකින් සැකසී ඇත. පහසු සහ ප්රායෝගික. ඔබේ අච්චුවේ html/ ෆෝල්ඩරය තුළ modules.php ගොනුවක් සාදන්න. අච්චුවේ එවැනි ෆෝල්ඩරයක් නොමැති නම්, අපි එය සාදන්නෙමු. අපි එය ගොනුවකට ලියමු ශ්රිතය modChrome_modbox($මොඩියුලය, &$පරම, &$attribs) // ශ්රිතය අමතන්න
{
if (!empty ($module->content)) : /* පිහිටුමේ සක්රීය මොඩියුලයක් තිබේදැයි පරීක්ෂා කරන්න */?>
"> පෙන්වන්න
showtitle != 0) : /* මොඩියුලයේ මාතෘකාව ඇතුළත් දැයි පරීක්ෂා කරන්න */ ?>
ශීර්ෂය; /* මාතෘකාව මුද්රණය කරන්න */ ?>
අන්තර්ගතය; /* මොඩියුලයේ අන්තර්ගතය ප්රතිදානය කරන්න */ ?>
}
?> නිමයි. දැන් ඔබට එය නිමැවුම් විලාසය ලෙස සඳහන් කළ යුතුය. අපි අපගේ ස්ථානයට මොඩියුලයක් පවරන අතර ප්රතිඵලය දෙස බලන්න.
PHP හි ඇති විශිෂ්ටතම දෙය නම් එය HTML ආකෘති සමඟ ක්රියා කරන ආකාරයයි. මෙහි ඇති ප්රධානතම දෙය නම් එක් එක් පෝරමයේ මූලද්රව්ය ස්වයංක්රීයව ඔබගේ PHP වැඩසටහන් වෙත ලබා ගත හැකි වීමයි. PHP හි ආකෘති භාවිතා කිරීම පිළිබඳ සවිස්තරාත්මක තොරතුරු සඳහා, කොටස කියවන්න. මෙන්න උදාහරණයක් HTML පෝරමය:
උදාහරණ #1 සරලම HTML පෝරමය
මෙම පෝරමයේ විශේෂ කිසිවක් නොමැත. මෙය විශේෂ ටැග් නොමැති සාමාන්ය HTML පෝරමයකි. පරිශීලකයා පෝරමය පුරවා submit බොත්තම ක්ලික් කළ විට, action.php පිටුව කැඳවනු ලැබේ. මෙම ගොනුවට මෙවැනි දෙයක් තිබිය හැක:
උදාහරණ #2 පෝරම දත්ත පෙන්වමින්
ආයුබෝවන්,
.
ඔයාටඅවුරුදු.
මෙම වැඩසටහනේ නිදසුන ප්රතිදානය:
හෙලෝ, සර්ජි. ඔබට වයස අවුරුදු 30 කි.
ඔබ සමඟ ඇති කේත කොටස් සැලකිල්ලට නොගන්නේ නම් htmlspecialchars()සහ (int), මෙම කේතයේ මෙහෙයුම් මූලධර්මය සරල සහ තේරුම් ගත හැකි විය යුතුය. htmlspecialchars()අනිෂ්ට HTML හෝ Javascript ඔබේ පිටුවට ඇතුළු නොකිරීමට "විශේෂ" HTML අක්ෂර නිසි ලෙස කේතනය කර ඇති බව සහතික කරයි. අංකයක් විය යුතු බව අප දන්නා වයස් ක්ෂේත්රය, අපට සරලව පරිවර්තනය කළ හැකිය පූර්ණ සංඛ්යාව, එය ස්වයංක්රීයව අනවශ්ය අක්ෂර ඉවත් කරනු ඇත. පෙරහන් දිගුව භාවිතයෙන් PHP හට මෙය ස්වයංක්රීයව කළ හැක. $_POST["name"] සහ $_POST["වයස"] විචල්යයන් ඔබ වෙනුවෙන් PHP මගින් ස්වයංක්රීයව සකසා ඇත. මීට පෙර අපි $_SERVER superglobal විචල්යය භාවිතා කළෙමු, නමුත් මෙහිදී අපි සියලු POST දත්ත අඩංගු $_POST superglobal විචල්යය ද භාවිතා කරමු. දැනුම් දෙන්න, ඒක යැවීමේ ක්රමයඅපගේ පෝරමයේ (ක්රමය) POST වේ. අපි ක්රමය භාවිතා කළා නම් ලබා ගන්න, එවිට අපගේ පෝරම තොරතුරු $_GET සුපිරි ගෝලීය විචල්යයේ ඇත. විකල්පයක් ලෙස, දත්ත මූලාශ්රය වැදගත් නොවේ නම් ඔබට $_REQUEST විචල්යය භාවිතා කළ හැක. මෙම විචල්යයේ GET, POST, COOKIE දත්ත මිශ්රණයක් අඩංගු වේ.
අවුරුදු 15කට කලින්
HTTP පිරිවිතරයට අනුව, ඔබ සේවාදායක අන්තයේ ඇති යම් දෙයක තත්ත්වය වෙනස් කිරීමට පෝරමය භාවිතා කරන විට ඔබ POST ක්රමය භාවිතා කළ යුතුය. උදාහරණයක් ලෙස, පිටුවක පරිශීලකයින්ට ඔවුන්ගේම අදහස් එක් කිරීමට ඉඩ දීමට පෝරමයක් තිබේ නම්, මේ වගේ මෙහි ඇති පිටුව, ඔබ POST හරහා ළඟා වූ පිටුවක "Reload" හෝ "Refresh" ක්ලික් කළහොත්, එය සෑම විටම පාහේ දෝෂයකි -- ඔබ එකම අදහස දෙවරක් පළ නොකළ යුතුය. මෙම පිටු පිටු සලකුණු කර හෝ හැඹිලිගත නොවන්නේ එබැවිනි.
ඔබගේ පෝරමය සේවාදායකයෙන් යමක් ලබා ගන්නා විට සහ ඇත්ත වශයෙන්ම කිසිවක් වෙනස් නොකරන විට ඔබ GET ක්රමය භාවිතා කළ යුතුය. උදාහරණයක් ලෙස, සෙවුම් යන්ත්රයක් සඳහා වන පෝරමය GET භාවිතා කළ යුතුය, මන්ද වෙබ් අඩවියක් සෙවීම සේවාදායකයා සැලකිලිමත් විය හැකි කිසිවක් වෙනස් නොකළ යුතු අතර, සෙවුම් යන්ත්ර විමසුමක ප්රතිඵල පිටු සලකුණු කිරීම හෝ හැඹිලිගත කිරීම පිටු සලකුණු කිරීම හෝ හැඹිලිගත කිරීම මෙන්ම ප්රයෝජනවත් වේ. ස්ථිතික HTML පිටුවක්.
අවුරුදු 2 කට පෙර
පැහැදිලි කිරීම වටී:
POST GET වලට වඩා ආරක්ෂිත නොවේ.
GET එදිරිව POST තෝරා ගැනීමට හේතු ලෙස ඉල්ලීමේ අභිප්රාය (ඔබ තොරතුරු "ඉදිරිපත් කරන්නේ"ද?), ඉල්ලීමේ ප්රමාණය (URL එකක් කොපමණ දිග විය හැකිද යන්නට සීමාවන් තිබේ, සහ GET පරාමිති එවනු ලැබේ වැනි විවිධ සාධක ඇතුළත් වේ. URL එක), සහ ඔබට ක්රියාව කෙතරම් පහසුවෙන් බෙදාගත හැකි වීමට අවශ්යද -- උදාහරණයක් ලෙස, Google Searches GET වන්නේ එය URL බෙදාගැනීමෙන් වෙනත් අයෙකු සමඟ සෙවුම් විමසුම පිටපත් කිරීම සහ බෙදාගැනීම පහසු කරන බැවිනි.
POST එකකට වඩා GET එකක් බෙදාගැනීම පහසු නිසා ආරක්ෂාව ගැන පමණක් මෙහිදී සලකා බලනු ලැබේ. උදාහරණය: ඔබට GET මගින් මුරපදයක් යැවීමට අවශ්ය නැත, මන්ද පරිශීලකයා ප්රතිඵලය වන URL එක බෙදාගෙන නොදැනුවත්වම තම මුරපදය හෙළිදරව් කළ හැකි බැවිනි.
කෙසේ වෙතත්, ඔබ ජාල සම්බන්ධතාවය ආරක්ෂා කිරීම සඳහා TLS/SSL යොදවා නොගන්නේ නම්, GET සහ POST හොඳින් ස්ථානගත කර ඇති ද්වේෂසහගත පුද්ගලයෙකුට බාධා කිරීම සමානව පහසු වේ.
HTTP (සාමාන්යයෙන් වරාය 80) හරහා යවන සියලුම පෝරම අනාරක්ෂිත වන අතර අද (2017), පොදු වෙබ් අඩවියක් HTTPS භාවිතා නොකිරීමට බොහෝ හොඳ හේතු නොමැත (එය මූලික වශයෙන් HTTP + ප්රවාහන ස්ථර ආරක්ෂාවයි).
ප්රසාද දීමනාවක් ලෙස, ඔබ TLS භාවිතා කරන්නේ නම්, ඔබ විසින් එහි නොදැමූ ඔබේ ගමනාගමනයට ඔබේ පරිශීලකයින්ට කේත (ADs) එන්නත් කිරීමේ අවදානම අවම කරයි.
මෙය PHP ඇතුළු පන්තියේ පොදු අවදානමකි. නමුත් මම විගණනය කරපු කෙනා මට කිව්වා මේ දුර්වලතාවය ගසාකන්න බැහැ, ඒ නිසා ඒක ගණන් ගන්නේ නැහැ. මට ඔහු සමඟ තර්ක කිරීමට සිදු විය
PHP යනු කුමක්ද - ඇතුලත් කරන්න
මේ අවදානම ගැන පොඩි අධ්යාපනික වැඩසටහනක් කරමු. PHP-include යනු ඔබට අත්තනෝමතික ගොනුවක් "ඇතුළත්" කිරීමට ඉඩ සලසන අවදානමකි, උදාහරණයක් ලෙස මෙම කේතය:
$module=$_REQUEST["මොඩියුලය"]; ඇතුළත් ("මොඩියුල/".$ මොඩියුල);
සාමාන්යයෙන් “/etc/passwd” ගොනුවේ PHP ටැග් නොමැති නිසා (), එවිට එය සාමාන්ය php ස්ක්රිප්ට් එකක php ටැග් පිටුපස html කේතය දර්ශනය වන ආකාරයටම එය බ්රවුසරයේ පෙන්වනු ඇත. ඇත්ත වශයෙන්ම, ගොනු කියවීම මෙම ප්රහාරය ක්රියාත්මක කළ හැකි එක් ක්රියාවක් පමණි. ප්රධාන දෙය වන්නේ අවශ්ය PHP කේතය සමඟ අවශ්ය ගොනු ඇතුළත් කිරීමයි.
අපි නැවතත් උදාහරණයට යමු. අපි එය සංකීර්ණ කරමු:
$module=$_REQUEST["මොඩියුලය"]; ඇතුළත් ("මොඩියුල/".$මොඩියුලය."/module.class.php");
$මොඩියුලය = $_REQUEST [ "මොඩියුලය" ] ;
ඇතුළත් ("මොඩියුල/" . $මොඩියුලය . "/module.class.php" ) ;
ඔබට පෙනෙන පරිදි, දැන් අපගේ විචල්යයට අවසානයේ රේඛාවක් එක් කර ඇති අතර එමඟින් කිසිදු ගොනුවක් ඇතුළත් කිරීම වළක්වයි. එබැවින්, බොහෝ PHP ශ්රිතයන් ද්විමය ආරක්ෂිත නොවේ, එනම්, එවැනි ශ්රිතයන් NULL byte එකක් තන්තුවක අවසානය ලෙස සලකයි. අපි ස්ක්රිප්ට් එකට ප්රවේශ වෙන්නේ මෙහෙමයි.
script.php?module=../../../../../../../../../../../etc/passwd%00
සහ magic_quotes විධානය අක්රිය කර ඇත්නම්, අපි නැවත /etc/passwd හි අන්තර්ගතය දකිමු.
අවදානමක් තිබේද?
අපි අපගේ කේතය වෙත ආපසු යමු:
$module=addslashes($_REQUEST["මොඩියුලය"]); ඇතුළත් ("මොඩියුල/".$මොඩියුලය."/module.class.php");
$module = addslashes ($_REQUEST [ "මොඩියුලය" ] );
ඇතුළත් ("මොඩියුල/" . $මොඩියුලය . "/module.class.php" ) ;
ඔබට පෙනෙන පරිදි, අපගේ විචල්යයට “addslashes” හරහා යාමට බල කෙරෙන අතර අපි NULL බයිටයක් භාවිතා කිරීමට උත්සාහ කළහොත් එය “\0” බවට පරිවර්තනය වන අතර ඇතුළත් කිරීම ක්රියා නොකරනු ඇත.
නමුත් ප්රගතිය නිශ්චල නොවේ! USH හි සමහර පිරිමි ළමයින් PHP හි සිත්ගන්නා අංගයක් සොයා ගත් බව පෙනේ: PHP ගොනු පද්ධති ප්රහාරක දෛශික. ලිපියේ සාරාංශය කෙටියෙන් සාරාංශ කිරීමට, php විශේෂාංග කිහිපයක් භාවිතා කරමින් මාර්ග සකසයි:
- මාර්ගය කප්පාදු කිරීම- php මාර්ග තන්තුව නිශ්චිත දිග MAXPATHLEN දක්වා කපා දමයි (වින්ඩෝස් වල අක්ෂර 270 දක්වා, NIX මත - සාමාන්යයෙන් 4096, BSD මත - සාමාන්යයෙන් 1024)
- මාර්ග සාමාන්යකරණය- php විශේෂ ආකාරයකින් මාර්ගය සකසයි, අමතර අක්ෂර "/" සහ "/" ඉවත් කරයි. සහ ඔවුන්ගේ විවිධ සංයෝජන
- කැනොනිකල් ආකෘතියට අඩු කිරීම— අනවශ්ය සංක්රාන්ති ඉවත් කරනු ලැබේ, නිදසුනක් ලෙස, “dir1/dir2/../dir3” “dir1/dir3/” බවට පරිවර්තනය කරන අතර “dir2” නාමාවලියෙහි පැවැත්ම පරීක්ෂා කර නොමැති අතර වෙනත් සමාන පරිවර්තනයන් (එනම් සාමාන්යකරණය දිගටම කරගෙන යාම) )
දැන්, පිළිවෙලට, සම්මත වූ මාර්ගයට සිදු වන්නේ කුමක්ද:
- මාර්ගය සාපේක්ෂ නම්, ඇතුළත්_මාර්ග විධානයේ අගයන් පළමුව ආදේශ කරනු ලැබේ.
- එවිට වේදිකාව මත පදනම්ව මාර්ගය නිශ්චිත දිගකට කපා ඇත
- මාර්ගය සාමාන්යකරණය වෙමින් පවතී
- මාර්ගය කැනොනිකල් ආකෘතියට අඩු වේ
දැන් අපි මෙය භාවිතා කිරීමට උත්සාහ කරමු. "මොඩියුල /" නාමාවලියෙහි ඇති "test.php" ගොනුවක් ඇතුළත් කිරීමට උත්සාහ කරමු. මෙය සිදු කිරීම සඳහා, "/" සංකේතය අවසානයට එක් කරන්න. එම නිසා සම්පූර්ණ දිග, ගොනු නාමය සහ ඇතුලත්_පථයේ අගය සමඟ, පැහැදිලිවම අක්ෂර 4096ට වඩා වැඩි වේ.
script.php?module=test.php/././.[...]/././.
මෙම අවස්ථාවේදී, ඔබ අනුමාන කළ යුතු අතර එමඟින් සම්පූර්ණ මාර්ග තන්තුව (දැනටමත් කපා ඇත) තිතකින් අවසන් වේ (වැදගත්!), සහ කප්පාදුවකින් නොවේ. මෙය සිදු කිරීම සඳහා, ඔබට මෙවැනි එක් slash එකක් එකතු කළ හැකිය:
තවද මෙම විකල්පයන්ගෙන් එකක් අනිවාර්යයෙන්ම වැඩ කරනු ඇත.
විශ්ලේෂණය කිරීම
මාර්ගයට සිදුවන පරිවර්තනයන් මොනවාදැයි අපි පිළිවෙලට බලමු
modules/test.php//././.[...]/./././module.class.php
අක්ෂර 4200
රේඛාවට සිදු වන පළමු දෙය නම් ඇතුළත්_පාත් වෙතින් අගය එයට එකතු වීමයි:
/home/site/public_html/modules/test.php//././.[...]/./././module.class.php
අක්ෂර 4223
තන්තුව පසුව MAXPATHLEN වෙත කපා ඇත (අපි 4096 කියමු):
/home/site/public_html/modules/test.php//././.[...]/./.
අක්ෂර 4096
තවත් slash එකක් එකතු කිරීමට අවශ්ය වූයේ මන්දැයි මෙහිදී ඔබට දැක ගත හැකිය (එසේ නොවුවහොත් රේඛාව slash වෙත කපා හැරෙනු ඇත). දැන් මෙම රේඛාව සාමාන්යකරණය කර ඇත, පළමුව අමතර ස්ලැෂ් ඉවත් කරන්න:
/home/site/public_html/modules/test.php/././.[...]/./.
අක්ෂර 4095
එහි ප්රතිඵලයක් වශයෙන්, අපට අවශ්ය ගොනුව වෙත නිවැරදි මාර්ගය ලබා ගන්නා අතර, මෙම මාර්ගය දැනටමත් ඇතුළත් කිරීම වෙත මාරු කරනු ලබන අතර, අපට අවශ්ය ගොනුව ඇතුළත් වේ.
එනම්, අපි අපගේ "test.php" ගොනුව සාර්ථකව ඇතුළත් කරන්නේ කෙසේද යන්නයි.
script.php?module=test.php//././.[...]/././.
මෙයින් අදහස් කරන්නේ අවදානම න්යායාත්මක නොවන බවයි. එහි ප්රතිඵලයක් වශයෙන්, මගේ සේවාදායකයාට ඔට්ටුව අහිමි වූ අතර, මම ඔට්ටු ඇල්ලීම සහ අපි ඔට්ටු ඇල්ලූ රූබල් 10 දිනා ගත්තා. ඇත්ත වශයෙන්ම, රූබල් 10 ට අමතරව, මම සේවාදායකයාගේ ඇස් හමුවේ විශ්වාසය හා ගෞරවය දිනා ගත්තෙමි, එය ද වැදගත් ය.
සටහන්
මෙන්න මම මෙම අවදානම සූරාකෑමේ රසවත් ලක්ෂණ කිහිපයක් දෙස බලමි.
නාමාවලියෙන් පිටවන්න
මෙම කේතය සලකා බලන්න:
)
;
ඔබට RFI භාවිතා කළ හැකි සහ දුරස්ථ සේවාදායකයකින් ගොනුවක් ඇතුළත් කළ හැකි කරුණ මඟ හරින්න. සේවාදායකයේ “allow_url_include=OFF” යැයි කියමු.
අපට පහත නාමාවලියෙන් ගොනුවක් ඇතුළත් කිරීමට අවශ්ය වූ විට තත්වයක් සලකා බලමු:
script.php?module=../test.php/././.[...]/././.
එවැනි ඉල්ලීමක් ගොනුව සොයාගත නොහැකි වීම වැනි දෝෂයක් ජනනය කරයි. තවද මෙය මග හැරීම සඳහා, අපි එය මෙසේ හැඳින්විය යුතුය:
script.php?module=blabla/../../test.php/././.[...]/././.
මම මාර්ග කැනනය කිරීම විස්තර කළේ නිෂ්ඵල නොවේ. එයට ස්තූතියි, "blabla" නාමාවලිය පැවතිය යුතු නොවේ.
සරල ස්ලැෂ් එකතු කිරීම
සාමාන්යකරණය පිළිබඳ විස්තරයේ “/” සහ ස්ලෑෂ් සහිත තිත් ඉවත් කරන බව මම ලියා ඇති බව අවධානයෙන් සිටින පාඨකයෙකු දැක ඇති අතර, අවසානයේ තිත සමඟ අනවශ්ය කරදර වළක්වා ගැනීම සඳහා ස්ලෑෂ් භාවිතා නොකරන්න.
ඒ සියල්ල ඇල්ගොරිතම ගැන ය, එනම් “/” තිතක් සහිත ස්ලෑෂ් එකක්. සම්පූර්ණයෙන්ම ඉවත් කර ඇත. නමුත් සාමාන්යකරණයේදී තත්වය තරමක් සංකීර්ණ වේ, එක් (!) කප්පාදුවක් පමණක් ඉතිරි වන තෙක් සෑම කප්පාදු දෙකක්ම එකකින් ප්රතිස්ථාපනය වේ.
/home/site/public_html/modules/test.php///////////////////
අක්ෂර 57 යි
↓
/home/site/public_html/modules/test.php/////////
අක්ෂර 48 යි
↓
/home/site/public_html/modules/test.php/////
අක්ෂර 44 යි
↓
/home/site/public_html/modules/test.php///
අක්ෂර 42 යි
↓
/home/site/public_html/modules/test.php//
අක්ෂර 41 යි
↓
/home/site/public_html/modules/test.php/
අක්ෂර 40 යි
කුඩා අපගමනය:
එපමණක් නොව, ඔබ බොහෝ ජනප්රිය හැකර් සම්පත් කෙරෙහි අවධානය යොමු කරන්නේ නම්, ඔබට මෙම දෝෂය පෙනෙනු ඇත. මට වැටහෙන පරිදි, මෙම දෝෂය ආරම්භ වූයේ එක්තරා Raz0r ගේ ලිපියකින් ඔහු දෛශිකයක් යෝජනා කළ ලිපියකිනි.
index.php?act=../../../../../etc/passwd/////[…]/////
සඟරාව කෙරෙහි පවා අවධානය යොමු කරන්න [aker ඔහුගේ ලිපියේ මෙම වැරැද්ද නැවත නැවතත් කළේය. එපමණක් නොව, USH මුල් ලිපියේ පවා පැහැදිලිවම ලියා ඇත්තේ කප්පාදුව පමණක් භාවිතා කිරීම සුදුසු නොවන බවත්, සාමාන්යකරණයට පෙර අවසානයේ තිත් අක්ෂරයක් තැබීම අවශ්ය බවත්ය. නමුත් සරල slashes (අවසානයේ තිතක් නොමැතිව පවා) PHP හි වැඩ කරන්නේ Suhosin සමඟ පමණි.
එනම්, "/" තිතක් සහිත ස්ලෑෂ් භාවිතා කරන්න. - වඩාත් විශ්වීය ක්රමයක්, මන්දයත්, slashes "/" මෙන් නොව, එය php හි සියලුම අනුවාද සඳහා ක්රියා කරයි.
නිගමනය
ඔබේ ස්ක්රිප්ට් වල කුඩාම දුර්වලතා පවා ඉතිරි නොකළ යුතු බව තේරුම් ගැනීමට මෙම ලිපිය ඔබට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි, මන්ද ඉක්මනින් හෝ පසුව ඔබට ඒවා සඳහා ඔබේම ප්රහාරක දෛශිකයක් වර්ධනය කළ හැකි අතර එය බරපතල ප්රතිවිපාකවලට තුඩු දිය හැකිය.
em මූලද්රව්යය අවධාරණයෙන් පෙළෙහි ඡේදයක් නියෝජනය කරයි. වාක්යයක හෝ ඡේදයක තේරුම පාඨකයාගේ අවධානය යොමු කිරීමට ඔබට එය භාවිතා කළ හැක. එම් මූලද්රව්යය විස්තර කරන ට පසුව මෙයින් අදහස් කරන්නේ කුමක්දැයි මම ඔබට කියමි.
වගුව 8-6: em මූලද්රව්යය
රූපය 8-3: em මූලද්රව්යය භාවිතා කිරීම
මෙම උදාහරණයේ දී, මම වාක්යයේ ආරම්භයේ දී I (I) අවධාරණය කරමි. අපි em කියන මූලද්රව්යය ගැන සිතන්නේ නම්, අපි වාක්යයක් ශබ්ද නඟා පවසන විට, එම වාක්යය ප්රශ්නයකට පිළිතුරක් බව අපි සලකා බලමු. උදාහරණයක් ලෙස, “ඇපල් සහ දොඩම් වලට කැමති කවුද?” කියා මා ඇසුවා යැයි සිතන්න. ඔබේ පිළිතුර වනුයේ: "මම ඇපල් සහ දොඩම් වලට කැමතියි." (එය හයියෙන් කියමින් I යන්න අවධාරණය කරන විට, ඔබ මෙම පලතුරු වලට කැමති පුද්ගලයෙකු බව ඔබට පැහැදිලි වේ).
නමුත් මම ඇහුවොත්, "ඔයා ඇපල් වලට කැමතිද සහ වෙන මොනවද?" ඔබට පිළිතුරු දිය හැකිය: "මම ඇපල් සහ දොඩම් වලට කැමතියි." මෙම අවස්ථාවේ දී, දොඩම් ඔබ කැමති තවත් පලතුරක් බව අවධාරණය කරමින් අවසාන වචනය මත අවධාරණය කරනු ඇත. HTML හි මෙම විකල්පය මේ ආකාරයෙන් පෙනෙනු ඇත:
මම ඇපල් වලට කැමතියි සහ
දොඩම්
.
විදේශීය වචන සහ තාක්ෂණික නියමයන් අර්ථ දැක්වීම
i මූලද්රව්යය අවට අන්තර්ගතයට වඩා වෙනස් ස්වභාවයක් ඇති පෙළ කැබැල්ලක් දක්වයි. මෙය තරමක් නොපැහැදිලි නිර්වචනයකි, නමුත් පොදු උදාහරණවලට වෙනත් භාෂාවලින් වචන, තාක්ෂණික හෝ විද්යාත්මක නියමයන් සහ මිනිස් සිතුවිලි (කථනයට ප්රතිවිරුද්ධව) ඇතුළත් වේ. i මූලද්රව්යය විස්තර කර ඇත.
වගුව 8-7:මූලද්රව්යය i
රූපය 8-5: s මූලද්රව්යය භාවිතා කිරීම
![](https://i2.wp.com/storage.smarly.net/html5/8.5.png)
වැදගත් පෙළ හඳුනා ගැනීම
ප්රබල මූලද්රව්යය වැදගත් වන පෙළ ඡේදයක් දක්වයි. මෙම මූලද්රව්යය විස්තර කර ඇත.
වගුව 8-9:මූලද්රව්යය ශක්තිමත්
රූපය 8-7: u මූලද්රව්යය භාවිතා කිරීම
![](https://i1.wp.com/storage.smarly.net/html5/8.7.png)
කුඩා අකුරු එකතු කිරීම
කුඩා මූලද්රව්ය කුඩා අකුරු දක්වන අතර බොහෝ විට සුදුසුකම් සහ පැහැදිලි කිරීම් සඳහා භාවිතා වේ. B කුඩා මූලද්රව්යය නියෝජනය කරයි.
වගුව 8-11:මූලද්රව්යය කුඩා
රූපය 8-8:කුඩා මූලද්රව්යය භාවිතා කිරීම
![](https://i1.wp.com/storage.smarly.net/html5/8.8.png)
උපසිරැසි සහ උපසිරැසි එකතු කිරීම
ඔබට පිළිවෙලින් උපසිරසි සහ උපසිරසි දැක්වීමට උප සහ උප මූලද්රව්ය භාවිතා කළ හැක. සමහර භාෂා වල වචන ලිවීමට සුපර්ස්ක්රිප්ට් භාවිතා කරන අතර සරල ගණිතමය ප්රකාශනවල උපරි අකුරු සහ උපස්ක්රිප්ට් යන දෙකම භාවිතා වේ. මෙම මූලද්රව්ය ඉදිරිපත් කර ඇත.
වගුව 8-12:උප සහ උප මූලද්රව්ය
රූපය 8-9:උප සහ උප මූලද්රව්ය භාවිතා කිරීම
ශ්රිතය modChrome_modbox($මොඩියුලය, &$පරම, &$attribs) // ශ්රිතය අමතන්න
{
if (!empty ($module->content)) : /* පිහිටුමේ සක්රීය මොඩියුලයක් තිබේදැයි පරීක්ෂා කරන්න */?>
showtitle != 0) : /* මොඩියුලයේ මාතෘකාව ඇතුළත් දැයි පරීක්ෂා කරන්න */ ?>
ශීර්ෂය; /* මාතෘකාව මුද්රණය කරන්න */ ?>
අන්තර්ගතය; /* මොඩියුලයේ අන්තර්ගතය ප්රතිදානය කරන්න */ ?>
}
?> නිමයි. දැන් ඔබට එය නිමැවුම් විලාසය ලෙස සඳහන් කළ යුතුය.
PHP හි ඇති විශිෂ්ටතම දෙය නම් එය HTML ආකෘති සමඟ ක්රියා කරන ආකාරයයි. මෙහි ඇති ප්රධානතම දෙය නම් එක් එක් පෝරමයේ මූලද්රව්ය ස්වයංක්රීයව ඔබගේ PHP වැඩසටහන් වෙත ලබා ගත හැකි වීමයි. PHP හි ආකෘති භාවිතා කිරීම පිළිබඳ සවිස්තරාත්මක තොරතුරු සඳහා, කොටස කියවන්න. මෙන්න උදාහරණයක් HTML පෝරමය:
උදාහරණ #1 සරලම HTML පෝරමය
මෙම පෝරමයේ විශේෂ කිසිවක් නොමැත. මෙය විශේෂ ටැග් නොමැති සාමාන්ය HTML පෝරමයකි. පරිශීලකයා පෝරමය පුරවා submit බොත්තම ක්ලික් කළ විට, action.php පිටුව කැඳවනු ලැබේ. මෙම ගොනුවට මෙවැනි දෙයක් තිබිය හැක:
උදාහරණ #2 පෝරම දත්ත පෙන්වමින්
ආයුබෝවන්,
.
ඔයාටඅවුරුදු.
මෙම වැඩසටහනේ නිදසුන ප්රතිදානය:
හෙලෝ, සර්ජි. ඔබට වයස අවුරුදු 30 කි.
ඔබ සමඟ ඇති කේත කොටස් සැලකිල්ලට නොගන්නේ නම් htmlspecialchars()සහ (int), මෙම කේතයේ මෙහෙයුම් මූලධර්මය සරල සහ තේරුම් ගත හැකි විය යුතුය. htmlspecialchars()අනිෂ්ට HTML හෝ Javascript ඔබේ පිටුවට ඇතුළු නොකිරීමට "විශේෂ" HTML අක්ෂර නිසි ලෙස කේතනය කර ඇති බව සහතික කරයි. අංකයක් විය යුතු බව අප දන්නා වයස් ක්ෂේත්රය, අපට සරලව පරිවර්තනය කළ හැකිය පූර්ණ සංඛ්යාව, එය ස්වයංක්රීයව අනවශ්ය අක්ෂර ඉවත් කරනු ඇත. පෙරහන් දිගුව භාවිතයෙන් PHP හට මෙය ස්වයංක්රීයව කළ හැක. $_POST["name"] සහ $_POST["වයස"] විචල්යයන් ඔබ වෙනුවෙන් PHP මගින් ස්වයංක්රීයව සකසා ඇත. මීට පෙර අපි $_SERVER superglobal විචල්යය භාවිතා කළෙමු, නමුත් මෙහිදී අපි සියලු POST දත්ත අඩංගු $_POST superglobal විචල්යය ද භාවිතා කරමු. දැනුම් දෙන්න, ඒක යැවීමේ ක්රමයඅපගේ පෝරමයේ (ක්රමය) POST වේ. අපි ක්රමය භාවිතා කළා නම් ලබා ගන්න, එවිට අපගේ පෝරම තොරතුරු $_GET සුපිරි ගෝලීය විචල්යයේ ඇත. විකල්පයක් ලෙස, දත්ත මූලාශ්රය වැදගත් නොවේ නම් ඔබට $_REQUEST විචල්යය භාවිතා කළ හැක. මෙම විචල්යයේ GET, POST, COOKIE දත්ත මිශ්රණයක් අඩංගු වේ.
අවුරුදු 15කට කලින්
HTTP පිරිවිතරයට අනුව, ඔබ සේවාදායක අන්තයේ ඇති යම් දෙයක තත්ත්වය වෙනස් කිරීමට පෝරමය භාවිතා කරන විට ඔබ POST ක්රමය භාවිතා කළ යුතුය. උදාහරණයක් ලෙස, පිටුවක පරිශීලකයින්ට ඔවුන්ගේම අදහස් එක් කිරීමට ඉඩ දීමට පෝරමයක් තිබේ නම්, මේ වගේ මෙහි ඇති පිටුව, ඔබ POST හරහා ළඟා වූ පිටුවක "Reload" හෝ "Refresh" ක්ලික් කළහොත්, එය සෑම විටම පාහේ දෝෂයකි -- ඔබ එකම අදහස දෙවරක් පළ නොකළ යුතුය. මෙම පිටු පිටු සලකුණු කර හෝ හැඹිලිගත නොවන්නේ එබැවිනි.
ඔබගේ පෝරමය සේවාදායකයෙන් යමක් ලබා ගන්නා විට සහ ඇත්ත වශයෙන්ම කිසිවක් වෙනස් නොකරන විට ඔබ GET ක්රමය භාවිතා කළ යුතුය. උදාහරණයක් ලෙස, සෙවුම් යන්ත්රයක් සඳහා වන පෝරමය GET භාවිතා කළ යුතුය, මන්ද වෙබ් අඩවියක් සෙවීම සේවාදායකයා සැලකිලිමත් විය හැකි කිසිවක් වෙනස් නොකළ යුතු අතර, සෙවුම් යන්ත්ර විමසුමක ප්රතිඵල පිටු සලකුණු කිරීම හෝ හැඹිලිගත කිරීම පිටු සලකුණු කිරීම හෝ හැඹිලිගත කිරීම මෙන්ම ප්රයෝජනවත් වේ. ස්ථිතික HTML පිටුවක්.
අවුරුදු 2 කට පෙර
පැහැදිලි කිරීම වටී:
POST GET වලට වඩා ආරක්ෂිත නොවේ.
GET එදිරිව POST තෝරා ගැනීමට හේතු ලෙස ඉල්ලීමේ අභිප්රාය (ඔබ තොරතුරු "ඉදිරිපත් කරන්නේ"ද?), ඉල්ලීමේ ප්රමාණය (URL එකක් කොපමණ දිග විය හැකිද යන්නට සීමාවන් තිබේ, සහ GET පරාමිති එවනු ලැබේ වැනි විවිධ සාධක ඇතුළත් වේ. URL එක), සහ ඔබට ක්රියාව කෙතරම් පහසුවෙන් බෙදාගත හැකි වීමට අවශ්යද -- උදාහරණයක් ලෙස, Google Searches GET වන්නේ එය URL බෙදාගැනීමෙන් වෙනත් අයෙකු සමඟ සෙවුම් විමසුම පිටපත් කිරීම සහ බෙදාගැනීම පහසු කරන බැවිනි.
POST එකකට වඩා GET එකක් බෙදාගැනීම පහසු නිසා ආරක්ෂාව ගැන පමණක් මෙහිදී සලකා බලනු ලැබේ. උදාහරණය: ඔබට GET මගින් මුරපදයක් යැවීමට අවශ්ය නැත, මන්ද පරිශීලකයා ප්රතිඵලය වන URL එක බෙදාගෙන නොදැනුවත්වම තම මුරපදය හෙළිදරව් කළ හැකි බැවිනි.
කෙසේ වෙතත්, ඔබ ජාල සම්බන්ධතාවය ආරක්ෂා කිරීම සඳහා TLS/SSL යොදවා නොගන්නේ නම්, GET සහ POST හොඳින් ස්ථානගත කර ඇති ද්වේෂසහගත පුද්ගලයෙකුට බාධා කිරීම සමානව පහසු වේ.
HTTP (සාමාන්යයෙන් වරාය 80) හරහා යවන සියලුම පෝරම අනාරක්ෂිත වන අතර අද (2017), පොදු වෙබ් අඩවියක් HTTPS භාවිතා නොකිරීමට බොහෝ හොඳ හේතු නොමැත (එය මූලික වශයෙන් HTTP + ප්රවාහන ස්ථර ආරක්ෂාවයි).
ප්රසාද දීමනාවක් ලෙස, ඔබ TLS භාවිතා කරන්නේ නම්, ඔබ විසින් එහි නොදැමූ ඔබේ ගමනාගමනයට ඔබේ පරිශීලකයින්ට කේත (ADs) එන්නත් කිරීමේ අවදානම අවම කරයි.
මෙය PHP ඇතුළු පන්තියේ පොදු අවදානමකි. නමුත් මම විගණනය කරපු කෙනා මට කිව්වා මේ දුර්වලතාවය ගසාකන්න බැහැ, ඒ නිසා ඒක ගණන් ගන්නේ නැහැ. මට ඔහු සමඟ තර්ක කිරීමට සිදු විය
PHP යනු කුමක්ද - ඇතුලත් කරන්න
මේ අවදානම ගැන පොඩි අධ්යාපනික වැඩසටහනක් කරමු. PHP-include යනු ඔබට අත්තනෝමතික ගොනුවක් "ඇතුළත්" කිරීමට ඉඩ සලසන අවදානමකි, උදාහරණයක් ලෙස මෙම කේතය:
$module=$_REQUEST["මොඩියුලය"]; ඇතුළත් ("මොඩියුල/".$ මොඩියුල);
සාමාන්යයෙන් “/etc/passwd” ගොනුවේ PHP ටැග් නොමැති නිසා (), එවිට එය සාමාන්ය php ස්ක්රිප්ට් එකක php ටැග් පිටුපස html කේතය දර්ශනය වන ආකාරයටම එය බ්රවුසරයේ පෙන්වනු ඇත. ඇත්ත වශයෙන්ම, ගොනු කියවීම මෙම ප්රහාරය ක්රියාත්මක කළ හැකි එක් ක්රියාවක් පමණි. ප්රධාන දෙය වන්නේ අවශ්ය PHP කේතය සමඟ අවශ්ය ගොනු ඇතුළත් කිරීමයි.
අපි නැවතත් උදාහරණයට යමු. අපි එය සංකීර්ණ කරමු:
$module=$_REQUEST["මොඩියුලය"]; ඇතුළත් ("මොඩියුල/".$මොඩියුලය."/module.class.php");
$මොඩියුලය = $_REQUEST [ "මොඩියුලය" ] ; ඇතුළත් ("මොඩියුල/" . $මොඩියුලය . "/module.class.php" ) ; |
ඔබට පෙනෙන පරිදි, දැන් අපගේ විචල්යයට අවසානයේ රේඛාවක් එක් කර ඇති අතර එමඟින් කිසිදු ගොනුවක් ඇතුළත් කිරීම වළක්වයි. එබැවින්, බොහෝ PHP ශ්රිතයන් ද්විමය ආරක්ෂිත නොවේ, එනම්, එවැනි ශ්රිතයන් NULL byte එකක් තන්තුවක අවසානය ලෙස සලකයි. අපි ස්ක්රිප්ට් එකට ප්රවේශ වෙන්නේ මෙහෙමයි.
script.php?module=../../../../../../../../../../../etc/passwd%00
සහ magic_quotes විධානය අක්රිය කර ඇත්නම්, අපි නැවත /etc/passwd හි අන්තර්ගතය දකිමු.
අවදානමක් තිබේද?
අපි අපගේ කේතය වෙත ආපසු යමු:
$module=addslashes($_REQUEST["මොඩියුලය"]); ඇතුළත් ("මොඩියුල/".$මොඩියුලය."/module.class.php");
$module = addslashes ($_REQUEST [ "මොඩියුලය" ] ); ඇතුළත් ("මොඩියුල/" . $මොඩියුලය . "/module.class.php" ) ; |
ඔබට පෙනෙන පරිදි, අපගේ විචල්යයට “addslashes” හරහා යාමට බල කෙරෙන අතර අපි NULL බයිටයක් භාවිතා කිරීමට උත්සාහ කළහොත් එය “\0” බවට පරිවර්තනය වන අතර ඇතුළත් කිරීම ක්රියා නොකරනු ඇත.
නමුත් ප්රගතිය නිශ්චල නොවේ! USH හි සමහර පිරිමි ළමයින් PHP හි සිත්ගන්නා අංගයක් සොයා ගත් බව පෙනේ: PHP ගොනු පද්ධති ප්රහාරක දෛශික. ලිපියේ සාරාංශය කෙටියෙන් සාරාංශ කිරීමට, php විශේෂාංග කිහිපයක් භාවිතා කරමින් මාර්ග සකසයි:
- මාර්ගය කප්පාදු කිරීම- php මාර්ග තන්තුව නිශ්චිත දිග MAXPATHLEN දක්වා කපා දමයි (වින්ඩෝස් වල අක්ෂර 270 දක්වා, NIX මත - සාමාන්යයෙන් 4096, BSD මත - සාමාන්යයෙන් 1024)
- මාර්ග සාමාන්යකරණය- php විශේෂ ආකාරයකින් මාර්ගය සකසයි, අමතර අක්ෂර "/" සහ "/" ඉවත් කරයි. සහ ඔවුන්ගේ විවිධ සංයෝජන
- කැනොනිකල් ආකෘතියට අඩු කිරීම— අනවශ්ය සංක්රාන්ති ඉවත් කරනු ලැබේ, නිදසුනක් ලෙස, “dir1/dir2/../dir3” “dir1/dir3/” බවට පරිවර්තනය කරන අතර “dir2” නාමාවලියෙහි පැවැත්ම පරීක්ෂා කර නොමැති අතර වෙනත් සමාන පරිවර්තනයන් (එනම් සාමාන්යකරණය දිගටම කරගෙන යාම) )
දැන්, පිළිවෙලට, සම්මත වූ මාර්ගයට සිදු වන්නේ කුමක්ද:
- මාර්ගය සාපේක්ෂ නම්, ඇතුළත්_මාර්ග විධානයේ අගයන් පළමුව ආදේශ කරනු ලැබේ.
- එවිට වේදිකාව මත පදනම්ව මාර්ගය නිශ්චිත දිගකට කපා ඇත
- මාර්ගය සාමාන්යකරණය වෙමින් පවතී
- මාර්ගය කැනොනිකල් ආකෘතියට අඩු වේ
දැන් අපි මෙය භාවිතා කිරීමට උත්සාහ කරමු. "මොඩියුල /" නාමාවලියෙහි ඇති "test.php" ගොනුවක් ඇතුළත් කිරීමට උත්සාහ කරමු. මෙය සිදු කිරීම සඳහා, "/" සංකේතය අවසානයට එක් කරන්න. එම නිසා සම්පූර්ණ දිග, ගොනු නාමය සහ ඇතුලත්_පථයේ අගය සමඟ, පැහැදිලිවම අක්ෂර 4096ට වඩා වැඩි වේ.
script.php?module=test.php/././.[...]/././.
මෙම අවස්ථාවේදී, ඔබ අනුමාන කළ යුතු අතර එමඟින් සම්පූර්ණ මාර්ග තන්තුව (දැනටමත් කපා ඇත) තිතකින් අවසන් වේ (වැදගත්!), සහ කප්පාදුවකින් නොවේ. මෙය සිදු කිරීම සඳහා, ඔබට මෙවැනි එක් slash එකක් එකතු කළ හැකිය:
තවද මෙම විකල්පයන්ගෙන් එකක් අනිවාර්යයෙන්ම වැඩ කරනු ඇත.
විශ්ලේෂණය කිරීම
මාර්ගයට සිදුවන පරිවර්තනයන් මොනවාදැයි අපි පිළිවෙලට බලමු
modules/test.php//././.[...]/./././module.class.php
අක්ෂර 4200
රේඛාවට සිදු වන පළමු දෙය නම් ඇතුළත්_පාත් වෙතින් අගය එයට එකතු වීමයි:
/home/site/public_html/modules/test.php//././.[...]/./././module.class.php
අක්ෂර 4223
තන්තුව පසුව MAXPATHLEN වෙත කපා ඇත (අපි 4096 කියමු):
/home/site/public_html/modules/test.php//././.[...]/./.
අක්ෂර 4096
තවත් slash එකක් එකතු කිරීමට අවශ්ය වූයේ මන්දැයි මෙහිදී ඔබට දැක ගත හැකිය (එසේ නොවුවහොත් රේඛාව slash වෙත කපා හැරෙනු ඇත). දැන් මෙම රේඛාව සාමාන්යකරණය කර ඇත, පළමුව අමතර ස්ලැෂ් ඉවත් කරන්න:
/home/site/public_html/modules/test.php/././.[...]/./.
අක්ෂර 4095
එහි ප්රතිඵලයක් වශයෙන්, අපට අවශ්ය ගොනුව වෙත නිවැරදි මාර්ගය ලබා ගන්නා අතර, මෙම මාර්ගය දැනටමත් ඇතුළත් කිරීම වෙත මාරු කරනු ලබන අතර, අපට අවශ්ය ගොනුව ඇතුළත් වේ.
එනම්, අපි අපගේ "test.php" ගොනුව සාර්ථකව ඇතුළත් කරන්නේ කෙසේද යන්නයි.
script.php?module=test.php//././.[...]/././.
මෙයින් අදහස් කරන්නේ අවදානම න්යායාත්මක නොවන බවයි. එහි ප්රතිඵලයක් වශයෙන්, මගේ සේවාදායකයාට ඔට්ටුව අහිමි වූ අතර, මම ඔට්ටු ඇල්ලීම සහ අපි ඔට්ටු ඇල්ලූ රූබල් 10 දිනා ගත්තා. ඇත්ත වශයෙන්ම, රූබල් 10 ට අමතරව, මම සේවාදායකයාගේ ඇස් හමුවේ විශ්වාසය හා ගෞරවය දිනා ගත්තෙමි, එය ද වැදගත් ය.
සටහන්
මෙන්න මම මෙම අවදානම සූරාකෑමේ රසවත් ලක්ෂණ කිහිපයක් දෙස බලමි.
නාමාවලියෙන් පිටවන්න
මෙම කේතය සලකා බලන්න:
) ;
ඔබට RFI භාවිතා කළ හැකි සහ දුරස්ථ සේවාදායකයකින් ගොනුවක් ඇතුළත් කළ හැකි කරුණ මඟ හරින්න. සේවාදායකයේ “allow_url_include=OFF” යැයි කියමු.
අපට පහත නාමාවලියෙන් ගොනුවක් ඇතුළත් කිරීමට අවශ්ය වූ විට තත්වයක් සලකා බලමු:
script.php?module=../test.php/././.[...]/././.
එවැනි ඉල්ලීමක් ගොනුව සොයාගත නොහැකි වීම වැනි දෝෂයක් ජනනය කරයි. තවද මෙය මග හැරීම සඳහා, අපි එය මෙසේ හැඳින්විය යුතුය:
script.php?module=blabla/../../test.php/././.[...]/././.
මම මාර්ග කැනනය කිරීම විස්තර කළේ නිෂ්ඵල නොවේ. එයට ස්තූතියි, "blabla" නාමාවලිය පැවතිය යුතු නොවේ.
සරල ස්ලැෂ් එකතු කිරීම
සාමාන්යකරණය පිළිබඳ විස්තරයේ “/” සහ ස්ලෑෂ් සහිත තිත් ඉවත් කරන බව මම ලියා ඇති බව අවධානයෙන් සිටින පාඨකයෙකු දැක ඇති අතර, අවසානයේ තිත සමඟ අනවශ්ය කරදර වළක්වා ගැනීම සඳහා ස්ලෑෂ් භාවිතා නොකරන්න.
ඒ සියල්ල ඇල්ගොරිතම ගැන ය, එනම් “/” තිතක් සහිත ස්ලෑෂ් එකක්. සම්පූර්ණයෙන්ම ඉවත් කර ඇත. නමුත් සාමාන්යකරණයේදී තත්වය තරමක් සංකීර්ණ වේ, එක් (!) කප්පාදුවක් පමණක් ඉතිරි වන තෙක් සෑම කප්පාදු දෙකක්ම එකකින් ප්රතිස්ථාපනය වේ.
/home/site/public_html/modules/test.php///////////////////
අක්ෂර 57 යි
↓
/home/site/public_html/modules/test.php/////////
අක්ෂර 48 යි
↓
/home/site/public_html/modules/test.php/////
අක්ෂර 44 යි
↓
/home/site/public_html/modules/test.php///
අක්ෂර 42 යි
↓
/home/site/public_html/modules/test.php//
අක්ෂර 41 යි
↓
/home/site/public_html/modules/test.php/
අක්ෂර 40 යි
කුඩා අපගමනය:
එපමණක් නොව, ඔබ බොහෝ ජනප්රිය හැකර් සම්පත් කෙරෙහි අවධානය යොමු කරන්නේ නම්, ඔබට මෙම දෝෂය පෙනෙනු ඇත. මට වැටහෙන පරිදි, මෙම දෝෂය ආරම්භ වූයේ එක්තරා Raz0r ගේ ලිපියකින් ඔහු දෛශිකයක් යෝජනා කළ ලිපියකිනි.
index.php?act=../../../../../etc/passwd/////[…]/////
සඟරාව කෙරෙහි පවා අවධානය යොමු කරන්න [aker ඔහුගේ ලිපියේ මෙම වැරැද්ද නැවත නැවතත් කළේය. එපමණක් නොව, USH මුල් ලිපියේ පවා පැහැදිලිවම ලියා ඇත්තේ කප්පාදුව පමණක් භාවිතා කිරීම සුදුසු නොවන බවත්, සාමාන්යකරණයට පෙර අවසානයේ තිත් අක්ෂරයක් තැබීම අවශ්ය බවත්ය. නමුත් සරල slashes (අවසානයේ තිතක් නොමැතිව පවා) PHP හි වැඩ කරන්නේ Suhosin සමඟ පමණි.
එනම්, "/" තිතක් සහිත ස්ලෑෂ් භාවිතා කරන්න. - වඩාත් විශ්වීය ක්රමයක්, මන්දයත්, slashes "/" මෙන් නොව, එය php හි සියලුම අනුවාද සඳහා ක්රියා කරයි.
නිගමනය
ඔබේ ස්ක්රිප්ට් වල කුඩාම දුර්වලතා පවා ඉතිරි නොකළ යුතු බව තේරුම් ගැනීමට මෙම ලිපිය ඔබට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි, මන්ද ඉක්මනින් හෝ පසුව ඔබට ඒවා සඳහා ඔබේම ප්රහාරක දෛශිකයක් වර්ධනය කළ හැකි අතර එය බරපතල ප්රතිවිපාකවලට තුඩු දිය හැකිය.
em මූලද්රව්යය අවධාරණයෙන් පෙළෙහි ඡේදයක් නියෝජනය කරයි. වාක්යයක හෝ ඡේදයක තේරුම පාඨකයාගේ අවධානය යොමු කිරීමට ඔබට එය භාවිතා කළ හැක. එම් මූලද්රව්යය විස්තර කරන ට පසුව මෙයින් අදහස් කරන්නේ කුමක්දැයි මම ඔබට කියමි.
වගුව 8-6: em මූලද්රව්යය
රූපය 8-3: em මූලද්රව්යය භාවිතා කිරීම
මෙම උදාහරණයේ දී, මම වාක්යයේ ආරම්භයේ දී I (I) අවධාරණය කරමි. අපි em කියන මූලද්රව්යය ගැන සිතන්නේ නම්, අපි වාක්යයක් ශබ්ද නඟා පවසන විට, එම වාක්යය ප්රශ්නයකට පිළිතුරක් බව අපි සලකා බලමු. උදාහරණයක් ලෙස, “ඇපල් සහ දොඩම් වලට කැමති කවුද?” කියා මා ඇසුවා යැයි සිතන්න. ඔබේ පිළිතුර වනුයේ: "මම ඇපල් සහ දොඩම් වලට කැමතියි." (එය හයියෙන් කියමින් I යන්න අවධාරණය කරන විට, ඔබ මෙම පලතුරු වලට කැමති පුද්ගලයෙකු බව ඔබට පැහැදිලි වේ).
නමුත් මම ඇහුවොත්, "ඔයා ඇපල් වලට කැමතිද සහ වෙන මොනවද?" ඔබට පිළිතුරු දිය හැකිය: "මම ඇපල් සහ දොඩම් වලට කැමතියි." මෙම අවස්ථාවේ දී, දොඩම් ඔබ කැමති තවත් පලතුරක් බව අවධාරණය කරමින් අවසාන වචනය මත අවධාරණය කරනු ඇත. HTML හි මෙම විකල්පය මේ ආකාරයෙන් පෙනෙනු ඇත:
මම ඇපල් වලට කැමතියි සහ දොඩම් .
විදේශීය වචන සහ තාක්ෂණික නියමයන් අර්ථ දැක්වීම
i මූලද්රව්යය අවට අන්තර්ගතයට වඩා වෙනස් ස්වභාවයක් ඇති පෙළ කැබැල්ලක් දක්වයි. මෙය තරමක් නොපැහැදිලි නිර්වචනයකි, නමුත් පොදු උදාහරණවලට වෙනත් භාෂාවලින් වචන, තාක්ෂණික හෝ විද්යාත්මක නියමයන් සහ මිනිස් සිතුවිලි (කථනයට ප්රතිවිරුද්ධව) ඇතුළත් වේ. i මූලද්රව්යය විස්තර කර ඇත.
වගුව 8-7:මූලද්රව්යය i
රූපය 8-5: s මූලද්රව්යය භාවිතා කිරීම
![](https://i2.wp.com/storage.smarly.net/html5/8.5.png)
වැදගත් පෙළ හඳුනා ගැනීම
ප්රබල මූලද්රව්යය වැදගත් වන පෙළ ඡේදයක් දක්වයි. මෙම මූලද්රව්යය විස්තර කර ඇත.
වගුව 8-9:මූලද්රව්යය ශක්තිමත්
රූපය 8-7: u මූලද්රව්යය භාවිතා කිරීම
![](https://i1.wp.com/storage.smarly.net/html5/8.7.png)
කුඩා අකුරු එකතු කිරීම
කුඩා මූලද්රව්ය කුඩා අකුරු දක්වන අතර බොහෝ විට සුදුසුකම් සහ පැහැදිලි කිරීම් සඳහා භාවිතා වේ. B කුඩා මූලද්රව්යය නියෝජනය කරයි.
වගුව 8-11:මූලද්රව්යය කුඩා
රූපය 8-8:කුඩා මූලද්රව්යය භාවිතා කිරීම
![](https://i1.wp.com/storage.smarly.net/html5/8.8.png)
උපසිරැසි සහ උපසිරැසි එකතු කිරීම
ඔබට පිළිවෙලින් උපසිරසි සහ උපසිරසි දැක්වීමට උප සහ උප මූලද්රව්ය භාවිතා කළ හැක. සමහර භාෂා වල වචන ලිවීමට සුපර්ස්ක්රිප්ට් භාවිතා කරන අතර සරල ගණිතමය ප්රකාශනවල උපරි අකුරු සහ උපස්ක්රිප්ට් යන දෙකම භාවිතා වේ. මෙම මූලද්රව්ය ඉදිරිපත් කර ඇත.
වගුව 8-12:උප සහ උප මූලද්රව්ය
රූපය 8-9:උප සහ උප මූලද්රව්ය භාවිතා කිරීම
![](https://i1.wp.com/storage.smarly.net/html5/8.9.png)