Өнөөдөр та бүхэндээ дэлхийн хамгийн түгээмэл скрипт хэл болох РНР-ын хамгаалалтын талаар бичье. Эхлээд хэрхэн хамгаалах талаар ярьхаас өмнө PHP скрипт гэж юу болох талаар товч дурьдаад түүний сул талууд болон хэрхэн хамгаалалт хийж болох талаар бичье.

PHP скрипт хэлний танилцуулга

     РНР бол Hypertext Preprocessor /Personal Home Page/ гэсэн үгийн товчлол юм. РНР бол өргөн тархсан, платформ хамааралгүй, HTML холилдсон сервер талын вэб програмчлалын хэл юм. Өнөөдөр дэлхий дээр веб сайтуудын бараг 90% нь энэ скрипт хэл дээр бичигдсэн байна. Энэ тоо таныг уншиж байх энэ хооронд өссөөр л байгаа.

    РНР-ийн давуу талууд гэвэл сурахад амархан, C хэлтэй бичиглэлийн хувьд төстэй мөн олон төрлийн функцуудээр хангагдсан (3000 орчим бэлэн функцтэй), уян хатан, хурдан ажилладаг, олон програмчлалын хэлүүдтэй хамтран ажиллах боломжтой, маш олон төрлийн Database буюу өгөгдлийн сантай харицан ажиллаж чаддаг ж.н : MySQL, Oracle, SQL, PostgreSQL, mSQL, SyBase, Access гэх мэт мөн олон төрлийн протоколуудтай харицан ажиллах боломжтой IMAP, SNMP, NNTP, POP3 , HTTP гэх мэт маш сайн сервер талын програмчлалын хэл юм.

PHP сул тал

  • РНР нь нээлттэй эх кодтой учир хэн нэгэн РНР-ээс алдаа олох юм бол тэрийгээ засагдахаас өмнө дутагдалтай талыг нь ашиглаж хакердаж болно.
  • Хэрэглэгчийн оруулсан мэдээлэл дотроос HTML код, PHP script болон MySQL илэрхийллийг сайн шүүгээгүйгээс болж хакдуулах аюултай байдаг.
  • Address bar-с өгөгдөл шууд авахыг зогсоох хэрэгтэй. Энэ нь хакерууд address bar-р дамжуулж нэвтрэх, өгөгдлийн санг устгах зэрэг боломжийг олгодог.
  • Нууцлалыг сайн хийхгүй бол Session-ыг алдвал хакдуулах боломжтой.
  • PHP-ийн үндсэн тохиргоонд алдааны мэдээллийг харуулдаг учир хакерыг мэдээллээр хангах аюултай байдаг.
  • Хамгийн гол нь хувьсагч болгоныг ямар нэгэн халдвартай өвчтөн мэтээр үзэж кодоо бивчэл сайн.
  • PHP үндсэн тохиргооны анхны утга нь сул тал нь болж өгдөг. Үүнийг тохируулж чанаржуулах шаардлагатай.

Хамгаалалт хэрхэн хийх

  • Оруулж буй өгөгдлийг шалгах

    Хэзээ ч хэрэглэгчийн оруулж буй өгөгдөлд итгэж болохгүй. Таны веб сайт руу зочилж буй хэрэглэгчдийг бүгдийг нь хакер мэтээр санаж кодоо бичих шаардлагатай. Жишээлбэл энэ код дээр авч үзье.

$month = $_GET[month];
$year = $_GET[year];

exec(“cal $month $year”, $result);
print “<PRE>”;
foreach ($result as $r) { print “$r<BR>”; }
print “</PRE>”;

Энэ кодонд хэрэглэгчийн оруулсан утгыг Unix cal командаар боловсруулж утгыг хэвлэнэ. Хэрэв хакер үүнийг ашиглаж сар жилийн оронд “;rm -rf *” гэж оруулж өгвөл таны веб дэх сар болон жилийн мэдээллийг устгана. Үүнээс сэргийлж оруулж буй өгөгдлийг шалгах шаардлагатай.

$month = $_GET[month];
$year = $_GET[year];

if (!preg_match(“/^[0-9]{1,2}$/”, $month)) die(“Bad month, please re-enter.”);
if (!preg_match(“/^[0-9]{4}$/”, $year)) die(“Bad year, please re-enter.”);

exec(“cal $month $year”, $result);
print “<PRE>”;
foreach ($result as $r) { print “$r<BR>”; }
print “</PRE>”;

  • Хэрэгэлэгчдийн хандах эрхийг хуудас болгон дээр шалгах

    Хэрэв ямар нэгэн байдлаар энгийн хэрэглэгч админы хэсэгт орвол тохиргооны файлыг өөрчлөх, дэлгэцэнд гарч буй мэдээлийг өөрчлөх боломжтой болох учир хуудас бүрд орох болгонд нь session-г нь шалгах хэрэгтэй. Бас админы хандах хэсэгт IP хаягыг нь шалгаж нэвтрүүлдэг бол бүүр сайн.
Доорх байдалтай вебийнхээ бүтцийг хйиснээр apache сервер дотроо эдгээр директор руу хандах эрхийг нь хааж болно.

/home
    /httpd
        /www.example.com
            .htpasswd
            /includes
                cart.class.php
                config.php
            /logs
                access_log
                error_log
            /www
                index.php
                /admin
                    .htaccess
                    index.php

  • Session ID Protection

    PHP веб сайтын нэг том асуудал бол Session ID-г хулгайлах явдал юм. Session нь хэрэглэгч бүрийн хувьд үүсдэг ба хэн нэгэн админы ч юмуу өөр хэрэглэгчийн Session ID-г мэдвэл тэр хүний мэдээллийг харах засах боломжтой юм. Хэрэв та session хувьсагчийн нууц үгийг хадгалах бол хоосон нууц үг оруулахыг хэзээ ч зөвшөөрч болохгүй ба нууц үгийг SHA1() болон md5() зэрэг encrypt-р шифрлэх ёстой.

if ($_SESSION[‘sha1password’] == sha1($userpass)) {
// do sensitive things here
}

  • Cross Site Scripting (XSS)

    Хэрэглэгчийн оруулсан өгөгдөл дотор Javascript явж байвал xss гэж үзнэ. Веб хуудас дээр хэрэглэгч HMTL бичиглэл (жишээ нь < болон > орж байгаа эсэх ) мөн HTML тэмдэгт оруулж байгаа эсэхийг шалгах шаардлагатай.
Хэрэв хэрэглэгч HTML кодтой өгөгдөл оруулбал дэлгэцэн дээр өөр мэдээлэл гарах зэрэг алдаа гарч болно. Гэхдээ зарим тохиолдолд хэрэглэгчдийг html өгөгдөл оруулахыг зөвшөөрөх тохиолдол гарна. Үүнийг зогсоохын тулд оролт дотор <script> -гэсэн маягийн зүйл байгаа эсэхийг шалгаж болно. Үүнээс сэргийлэхийн тулд хэрэглэгчийн оруулж байгаа өгөгдлийг PHP-ийн htmlspecialchars функцээр шалгах хэрэгтэй.

  • Алдааны мэдээллийг нуух

    PHP тохиргооны php.ini файлд байх display_errors–ын утыг “0” болгох ө.х таны кодон дахь ямар нэг алдаа, өгөгдлийн сантай холбогдоход гарах алдаа зэрэг нь хэрэглэгчийн browser дээр гардаг үүнийг харуулахгүй байх. Мөн error_log –ийн утгыг “1” болгох. Эдгээр тохиргоо нь зөвхөн наад захын л зүйл учраас цааш нь тохиргоонуудыг сайн хийж өгөх хэрэгтэй.

  • PHP.ini файлыг тохируулах

Энэ файлын анхны утга стандарт хэлбэрээр байдаг учир хамгаалалтыг сайжруулахын тулд зарим тохируулгыг өөрчлөх шаардлагатай байдаг. Та php хувилбараа шинэчилсэн ч php.ini файл нь шинчлэгддэгүй учир нэг удаа тохируулгаа сайн хийх хэрэгтэй. phpinfo() функцийг хаах энэ нь php-ийн талаар маш дэлгэрэнгүй мэдээлэл байдаг учир хакер энэ мэдээллийг авбал маш хялбар хакедах болно.

Дараах тохиргоонууд нь php-г илүү хамгаалалтай болгодог:
1. register_globals: Энэ нь анхны утга нь on байдаг ба үүнийг off болгох
2. safe_mode:on” болгох. Локал системийн файл руу зөвшөөрөлгүй хандалтыг хаана. Энэ нь on байвал систем дээрх файлуудыг зөвхөн унших горимд оруулдаг.
3. disable_functions: Энэ тохиргоог зөвхөн php.ini файлд хийж өгнө. Энэ нь PHP-г installation хийхэд функцуудыг жагсаалтыг идэвхгүй болгодог. Энэ нь зөвшөөрөлгүй функцыг ажиллуллахыг хориглодог.

Холбоотой бичлэгүүд: