2008-09-02

Explicit is better than implicit

Өнөөдөр нэг хүндхэн ажилтай тулгарав. Энэ нь нэг вэбийн програмыг шинэхэн суулгасан сервер дээр ажиллуулах. Хэдийгээр хялбархан сонсогдож байгаа ч яг үнэндээ тийм биш юм. Зөвхөн энэ програмыг ажиллуулахын тулд би мэдээллийн аюулгүй байдлын талаар баримтладаг зарим нэг зарчмаасaa ухарч, хэдэн ч тохиргоо өөрчлөв дөө. Шал утгагүй юм. Би энэ ажлыг үзэн ядаж байна, энэ кодыг бичсэн хүнийг ёстой хэлэх ч үг олдохгүй байна. Хэдийгээр би хийчихсэн ч надад таалагдахгүй байна, ийм байх ёсгүй.

Гарчигаа хэрхэн орчуулахаа мэдэхгүй байна гэхдээ тодорхой байдал нь таамаглахаас хавьгүй дээр гэсэн утга гарах болов уу. Хэрэв та үнэхээр сайн хөгжүүлэгч болохыг хүсч байвал хэзээ ч энэ нь ийм байх ёстой гэж таамаг дэвшүүл, зүгээр л шалга, бүгдийг тодорхой болго. Жишээ нь, миний сая ажилд оруулсан вэб маань PHP-ийн автоматаар session үүсгэдэг боломж нь нээлттэй байх ёстой гэж таамаглаад түүндээ хувьсагч хадгалж, тэгээд бас ашиглахыг оролдоно. Гэвч энэ боломж нь ихэвчлэн хаалттай байдаг болохоор ажиллахгүй. Үүнийхээ оронд хөгжүүлэгч нь боломж нээлттэй эсэхийг шалгах эсвэл бүр энэ боломжид найдалгүйгээр өөрөө session үүгээд явах боломж байсан. Бас болоогүй register_globals гэсэн тохиргоо идэвхитэй байна гэж найдсан байгаам. Найдах ч гэж дээ тодорхой боловч урт басхүү найдвартай код бичилгүй залхуурсан байх. Гэтэл энэ тохиргоог нээх нь аюулгүй байдлын хувьд асуудал үүсгэж мэднэ. Энэ мэт тоочоод байвал хэд хэдэн зүйл бий.

Дээрхийн адил таамаглалууд нь аюулгүй байдлын асуудлууд үүсгэдэг. Жишээ нь, нууц үгээ л хүн оруулах ёстой гэж таамаглаад түүнийгээ шалгалгүй SQL баазруугаа өгснөөс болж SQL Injection үүсдэг, бас зүгээр л текст байх ёстой гэж таагаад аваад дэлгэцэнд харуулах нь XSS үүсгэдэг. Юунд ч бүү найд, юуг ч бүү таа зүгээр л шалга. Нууц үг нь элдэв буруу тэмдэгт агуулсан эсэхийг шалгаад, хэрэв тийм бол битгий SQL рүү оруул. Шалгахдаа ахин дахин шалга. Манайхан javascript ашиглаад буруу тэмдэгт байгаа эсэхийг шалгаад цаад програмдаа шалгадаггүй. Буруу. Javascript-р дамжуулалгүй шууд утга дамжуулах хар мянган арга байгаа гэдгийг сана. Бүү таа, зүгээр шалга, нягтла, тодорхой болго. Нээрээ гарчиг маань python хэлний үндсэн зарчмуудын нэг юм шүү.

Нэмэлт: Манайхны гаргадаг нийтлэг алдаа нь өгөгдлийн сан руу холбогдох. Уг нь бол өгөгдлийн сангийн сервер руу холбогдоно, амжилттай болсон эсэхийг шалгана. Амжилттай бол өгөгдлийн сангаа сонгоно, амжилттай бол хүсэлтээ явуулж мэдээлэл авна, амжилттай бол мэдээллийг дэлгэцэнд гаргана. Гэтэл манайхан эдгээр шатуудад шалгалт хийгээгүйгээс бол холбогдохгүй, холбогдоогүй юм чинь өгөгдлийн сангаа сонгож чадахгүй, мэдээж дараа нь мэдээлэл авах гаргах нь алдаатай болж таарна. Энэ их түгээмэл тааралддаг алдаа.

No comments: