26 ÃËÎÁÀËÜÍÀß ÝÏÈÄÅÌÈß ÑÏÅÖ 02-07ïðîòèâîóêîëüíûéêîñòþìÏðîâåðêà âõîäíûõ äàííûõ íà PHP ñ ïîìîùüþ ÎÎÏÏÐÎÁËÅÌÀ ÑÎÇÄÀÍÈß ÁÅÇÎÏÀÑÍÛÕ ÑÊÐÈÏÒΠÂÑÅÃÄÀ ÑÒÎßËÀ ÄÎÂÎËÜÍÎ ÎÑÒÐÎ.ÄÀÆÅ ÅÑËÈ ÌÛ ÑÎÇÄÀÅÌ ÎÁÛ×ÍÓÞ ÄÎÌÀØÍÞÞ ÑÒÐÀÍÈÖÓ, ÍÀÌ ÂÐßÄ ËÈ ÁÓÄÅÒÏÐÈßÒÍÎ, ×ÒÎ ÊÀÊÎÉ-ÍÈÁÓÄÜ ÓÌÅËÅÖ ÅÅ ÂÇËÎÌÀÅÒ. ×ÒÎ ÓÆ ÃÎÂÎÐÈÒÜ Î ÊÐÓÏÍÛÕÊÎÐÏÎÐÀÒÈÂÍÛÕ È ÊÎÌÌÅÐ×ÅÑÊÈÕ ÑÀÉÒÀÕ, ÂÅÄÜ Â ÄÀÍÍÎÌ ÑËÓ×ÀÅ ÂÇËÎÌ ÌÎÆÅÒÍÀÍÅÑÒÈ ÄÎÂÎËÜÍÎ ÇÍÀ×ÈÒÅËÜÍÛÉ ÔÈÍÀÍÑÎÂÛÉ ÓÙÅÐÁ.Áîðèñ Âîëüôñîíborisvolfson@gmail.com, http://splendot.com×àùå âñåãî âçëîìùèêè ïîëüçóþòñÿ ðàçëè÷íûìè íåäîðàáîòêàìèâ ñêðèïòàõ — íàïðèìåð, íåäîñòàòî÷íîéïðîâåðêîé ïîñòóïàþùåé èçâíå (îò ïîñåòèòåëÿ ñàéòà)èíôîðìàöèè.  äàííîé ñòàòüå ÿ ïîêàæó, êàê, èñïîëüçóÿñîâðåìåííûå òåõíîëîãèè ïðîãðàììèðîâàíèÿ,ìîæíî îðãàíèçîâàòü ãèáêóþ è íàäåæíóþ ñèñòåìóïðîâåðêè äàííûõ, ïîëó÷åííûõ îò ïîëüçîâàòåëÿ.òèïè÷íûå äûðû. Êàêîé êîä ìîæåò áûòü óÿçâèìûìê àòàêàì âçëîìùèêîâ? Êàê âçëîìùèêè ïîëüçóþòñÿäûðàìè â ñêðèïòàõ? Ïðåæäå âñåãî, îòìå÷ó,÷òî ãðàìîòíî íàïèñàííûé ñêðèïò äîâîëüíî òðóäíîâçëîìàòü, à áîëüøèíñòâî âçëîìîâ ïðîèñõîäèò èççàíåäîñòàòî÷íîé áäèòåëüíîñòè ïðîãðàììèñòîâ.«Ïðîâåðÿòü, ïðîâåðÿòü è åùå ðàç ïðîâåðÿòü âõîäíûåäàííûå» — âîò ëîçóíã íàïèñàíèÿ íàäåæíûõ èáåçîïàñíûõ ñêðèïòîâ.èìåíà ôàéëîâ. Ïîëüçîâàòåëü îòïðàâëÿåòñâîè çàïðîñû ê ñåðâåðó ñ ïîìîùüþ ìåòîäîâ POSTè GET. Èç çàïîëíåííûõ ôîðì âõîäíûå äàííûå ÷àùåâñåãî ïîñòóïàþò ìåòîäîì POST, à äëÿ ïåðåäà÷èäàííûõ ñ ïîìîùüþ ãèïåðòåêñòîâîé ññûëêè ïðèìåíÿåòñÿìåòîä GET. Íàïðèìåð, ó íàñ íà ñàéòå ðàçìåùåíûðàçëè÷íûå ñòàòüè, è äëÿ èõ ïîêàçà ìû èñïîëüçóåìîòîáðàæàþùèé ñêðèïò. Èíôîðìàöèÿ î ñòàòüÿõõðàíèòñÿ â áàçå äàííûõ, à ñïåöèàëüíûé ñêðèïò âûäàåòïðèìåðíî òàêîé ñïèñîê:«äûðÿâûé» ñïèñîê ññûëîêÑòàòüÿ 1Ñòàòüÿ 2Ñòàòüÿ 3Êàæäàÿ ññûëêà óêàçûâàåò íà ñêðèïò show.php, êîòîðûéâûâîäèò ñòàòüè íà ýêðàí (â êà÷åñòâå ïàðàìåòðàåìó ïåðåäàåòñÿ èìÿ ôàéëà). Ñàì ñêðèïòshow.php ñîäåðæèò ñëåäóþùèé êîä:ïîòåíöèàëüíàÿ äûðà// Âûâîä âåðõíåé ÷àñòè ñòðàíèöû…echo file_get_contents($filename);...// Âûâîä íèæíåé ÷àñòè ñòðàíèöûÊîíå÷íî, ìû ðàññìîòðåëè ñàìûé çàïóùåííûé ñëó-÷àé: â äàííîì êîäå ñîäåðæàòñÿ äâå ãðóáûõ ñ òî÷êèçðåíèÿ íàïèñàíèÿ áåçîïàñíîãî êîäà îøèáêè.Âî-ïåðâûõ, äëÿ ïîëó÷åíèÿ âíåøíèõ äàííûõ (èìåíèôàéëà) èñïîëüçóåòñÿ ãëîáàëüíàÿ ïåðåìåííàÿ $filename.Âìåñòî ýòîãî ëó÷øå èñïîëüçîâàòü àññîöèàòèâíûåìàññèâû $_REQUEST, $_POST, $_GETè äðóãèå. Òåì áîëåå ÷òî â ñëåäóþùèõ âåðñèÿõ PHPãëîáàëüíûå ïåðåìåííûå íà îñíîâå äàííûõ ïîëüçîâàòåëÿñîçäàâàòüñÿ íå áóäóò, è õî÷åøü òû ýòîãî èëèíåò — ïðèäåòñÿ èñïîëüçîâàòü ñïåöèàëüíûå ìàññèâû.Âî-âòîðûõ, $filename íèêàê íå ïðîâåðÿåòñÿ. Íàïðèìåð,âçëîìùèê ìîæåò óêàçàòü âìåñòî èìåíèôàéëà â ñòðîêå ââîäà àäðåñà index.php è ïîëó÷èò
27Òàáëèöà 1Òàáëèöà 2Íàçâàíèåindex.phpbio.phplinks.phphtml.phpÍàçâàíèåÎïèñàíèåÃëàâíàÿ ñòðàíèöàÑòðàíèöà ñ áèîãðàôèåéÂàñè ÏóïêèíàÑòðàíèöà ñ ññûëêàìèÂñïîìîãàòåëüíûé ôàéëfunction __construct($Title)function BeginHTML()function EndHTML()function Logo()function Menu()abstract function MainText()function Write()ÎïèñàíèåÎÎÏ â PHP5ââåäåíèå. Äîñòàòî÷íî ÷àñòî äëÿðàçðàáîòêè ñàéòîâ èñïîëüçóåòñÿ ÿçûêPHP.  ïîñëåäíåé (ïÿòîé) âåðñèè PHPçíà÷èòåëüíî óëó÷øèëàñü ïîääåðæêàÎÎÏ (îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ).Òåì íå ìåíåå, ìíîãèåïðîãðàììèñòû ïðè ñîçäàíèè ñàéòîâ èñïîëüçóþòëèøü ñàìûå ïðèìèòèâíûåâîçìîæíîñòè ÎÎÏ, íàïðèìåð, èíêàïñóëÿöèþäàííûõ. Áåçóñëîâíî, òàêîå ïðèìåíåíèåÎÎÏ äåëàåò êîä áîëåå êà÷åñòâåííûì,íî, ïðèìåíÿÿ è äðóãèå âîçìîæíîñòèÎÎÏ, ìîæíî äîáèòüñÿ áîëüøåãîýôôåêòà. Ïðèìåíåíèå ïîëèìîðôèçìàè íàñëåäîâàíèÿ ïîçâîëÿåò çíà÷èòåëüíîñîêðàòèòü êîä, îäíîâðåìåííî äåëàÿåãî áîëåå íàäåæíûì. Òàêæå òàêîéêîä ìîæíî ÷àñòî èñïîëüçîâàòü ïîâòîðíî.Ðàññìîòðèì ýòî äåëî íà ïðàêòèêå.Èòàê, ïåðåä íàìè ñòîèò çàäà÷à — ñäåëàòüñòðàíèöó Âàñè Ïóïêèíà. Ââåðõóñòðàíèöû äîëæíà áûòü áîëüøàÿ íàäïèñü«Äîìàøíÿÿ ñòðàíèöà Âàñè Ïóïêèíà»(îáû÷íî ýòî ëîãîòèï ñàéòà). Äàëååñëåäóåò ìåíþ, ñîñòîÿùåå èç ñëåäóþùèõðàçäåëîâ: «Ãëàâíàÿ ñòðàíèöà», «Áèîãðàôèÿ»,«Ññûëêè». Ïî ñåðåäèíå ñòðàíèöûèäåò òåêñò ðàçäåëà. Âíèçó äóáëèðóåòñÿìåíþ. Ñàéò áóäåò ñîñòîÿòü èç ÷åòûðåõîñíîâíûõ ôàéëîâ (ñìîòðè òàáëèöó 1).êàðêàñ ñàéòà. Íàøà ñòðàíèöà áóäåòÿâëÿòüñÿ êëàññîì. Îïðåäåëèì àáñòðàêòíûéêëàññ HTML-ñòðàíèöû â ôàéëå html.php:àáñòðàêòíûé áàçîâûé êëàññ«ñòðàíèöà HTML»