|
В предния брой създадохме малък сайт, като страниците в него се изграждаха "в движение", като вземаха съдържанието си от няколко различни файла. Името на файла със съдържанието се предаваше като част от URL, например http://www.server.com/index.php?p=once.
Това означаваше, че index.php трябва да включи в себе си съдържанието на файла once.php. Тогава зададохме въпроса, какво би се получило, ако по някаква причина на index.php му се зададе да включи файл, който не съществува? Например при опит за извикване на /index.php?p=onced, ще получим съобщение за грешка : Warning: Failed opening 'onced.php' for inclusion (include_path='.; apacheincludes;apachehtdocs;') in C:apachehtdocsindex.php on line 17 Макар и силно подценявана, възможността да се случи такава грешка е много голяма. Причините също могат да бъдат разнообразни. При по-големи сайтове става невъзможно да се проследи включването на всеки един файл. В тях се използват конфигурационни файлове, както и файлове с код за множество отделни части от показваната на монитора страница. А и при недообмисляне на рисковете, техниката на включване на множество файлове един в друг би могла да представлява сериозна дупка в сигурността на сайта, дори и на целия сървър. Кракерите знаят това и доста често умишлено предизвикват подобни грешки, чрез манипулиране на URL-то, за да проверят дали няма да открият възможност за експлойтване. Тук трябва да посочим и друга възможна уязвимост на този начин за съставяне на сайтове. Не използвате в кода си ред като: CODE
Тук се очаква да бъде включен файлът, чието име се съдържа в променливата $p, например once.php. Ситуацията представлява огромен риск за сигурността на сайта и сървъра, защото дава възможност за извеждане на който и да е файл, за който съръвърът има право на четене. Поразиите, които могат да се направят са големи, така че е необходимо да вземете мерки, за да ги предодвратите. Можете да направите поне две неща - да определеите точен път до файловете, които да се включват и да определите точния им тип (например .txt, .html, .inc и други). Този вариант на същия ред е доста по-сигурен : CODE
В примера се предполага, че файловете, които ще включвате се намират в директория files в Уеб директорията на сайта - httpd/www/site. Този път до нея е примерен, тук трябва да проверите как изглежда той в системата, която използвате. Ползвайте абсолютни, а не относителни пътища, защото относителните са лесно манипулируеми. Те биха могли да бъдат преодоляни чрез повикване като :
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









