Автор Тема: функция с която да прихващам заявката на "противникови" браузер  (Прочетена 2418 пъти)

a_panov

  • Напреднали
  • *****
  • Публикации: 62
    • Профил
Аз си пиша сайтовете сам и затова са смотани, нямат функционалности и не могат да ги сринат отвънка... Както и да е и аз се нуждая от помощ!!!
Помощ...
Имам сайт на РНР и от цялото дърво от файлове е:
основна дир/дир 1/дир 2
та основните изпълними файлове за строежа на интерфейса са в "основна дир", но някой умник като вземе да достъпва РНР файловете от "дир 1" и "дир 2" сървърните логове ми се пълнят с грешки че не моге да се инклудват файлове!!! Това е така защото относителния път е от "основна дир". Та трябва ми функция с която да прихващам заявката на "противникови" браузер към моя сървър и да я чеквам!
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Можеш да изключиш записването на определени записи в логовете с функцията SetEnvIf на Apache. Пример
Цитат
SetEnvIf Request_URI "http://домейн.com/дир1(.*)" dontlog

Иначе, PHP си има предварително зададена променлива за адреса, който е подаден от потребителя
Цитат
$_SERVER["REQUEST_URI"]

Използвай я смело. А какви са останалите предварително зададени променливи, можеш да провериш в phpinfo ;)
« Последна редакция: May 15, 2009, 18:15 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

victim70

  • Напреднали
  • *****
  • Публикации: 454
  • Distribution: Gentoo, Ubuntu
  • Window Manager: Kde Xfce
    • Профил
Не е добре написано щом позволява да има грешки.
Но това че търсиш помощ е добре - защото разбираш че не е добре.
Сега по темата:
1. Работи със сесии. В тях много лесно се помни инфо на потребителя и се използват когато е необходимо. Ако не ползваш - имаше номер да забраниш бутона за назад (back).
2. Във всяка директория си сложи по един файл index.php който да редиректва към желаната локация. Ето и пример:
Код:
<?php
           header( "Location: http://www.abc.com/myfile.php" );
?>
3. Използвай FastTemplate. По този начин ще отделиш php кода от html кода. В този случай подиректориите ти остават незабележими. Дори и да се опита някой да отвори темплейта ще си види една нормална html страница със маркери в нея които се заместват от php скриптовете.
Това ще помогне и при редизаин на страницата защото може да се извърши дизайна от професионален дизайнер който си няма и хабер от програмиране само ще ти сложи реперите в полетата за заместване.
4. На едно място бях направил грешките да се показват само на определени IP-та но не си спомням магията а не ми се чете в момента.
5. Инклудвай файлове само от една локация примерно
/var/www/html/include
достъп от друга директория примерно:
/var/www/html/dir1/drundrun.php
код за включване
Код:
<?php
     include("../include/functions.php");
     
?>

Заявката от "вражеският браузер" неможеш да я чекваш защото неможеш да разбереш без сесия от къде идва (дали е нормално или инжектирано извикване). иначе ползвай в такъв случай try/catch структура за случаите на вариянт еб.. сие м..та
http://bg.php.net/manual/bg/language.exceptions.php

И не забравяй най-важното нещо за потребителски интерфейси
ВИНАГИ ПРОВЕРЯВАЙ ПОТРЕБИТЕЛСКИЯТ ВХОД ТОЙ ВИНАГИ :-) Е ГРЕШЕН АКО НЕ Е ПРОВЕРЕН
При мене се е получавало че имам 20-30 реда проверка и 10 реда същински код :-)

Надявам се че не съм те омоткал съвсем
« Последна редакция: May 15, 2009, 21:47 от victim70 »
Активен

"Господи, дай ми сила да променя нещата които немога да приема,
дай ми търпение да приема нещата които не мога да променя,
и ми дай мъдрост, да правя разликата между двете"

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Просто сложи всички директории и файлове, които са само за include извън web root директорията. Така няма да бъдат директно достъпни :)

По отношение на template системите - лично аз ги ненавиждам :) Идеята за "език в езика" не ми се нрави, но това е друга тема...

Моят съвет е да прочетеш за MVC принципите:
http://en.wikipedia.org/wiki/Model-view-controller
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Има нещо криво в цялата работа :) Как така злият потребител разбира въобще за съществуването на dir1 и dir2??? Нали скриптовете оттам се include-ват, не би трябвало никъде в изплютия HTML да се догатва въобще че съществуват въпросните директории?

После - това че сам си ги пишеш не означава, че идиоти не могат да ти ги счупят. Достатъчно е единствено потребителят да има контрол върху част от стринг-а, който ползваш в include()/require() - в доста случаи това може да се ескалира доволно лесно до изпълнение на код върху твоят сървър.

Активен

"Knowledge is power" - France is Bacon

victim70

  • Напреднали
  • *****
  • Публикации: 454
  • Distribution: Gentoo, Ubuntu
  • Window Manager: Kde Xfce
    • Профил
Има нещо криво в цялата работа :) Как така злият потребител разбира въобще за съществуването на dir1 и dir2??? Нали скриптовете оттам се include-ват, не би трябвало никъде в изплютия HTML да се догатва въобще че съществуват въпросните директории?

После - това че сам си ги пишеш не означава, че идиоти не могат да ти ги счупят. Достатъчно е единствено потребителят да има контрол върху част от стринг-а, който ползваш в include()/require() - в доста случаи това може да се ескалира доволно лесно до изпълнение на код върху твоят сървър.

Абсолютно съгласен.
Усещах че има 'гнилоч' ама не усещах от къде. Как ли разбира гадняра за скритите директории  :o .
За изпълнението на код става и по погрешка не само от разбирачи. Една естественно руса шматка с копи/пейст така ми омаза апликацията без да иска че не е истина.
От този момент входа на злият потребител го проверявам яко.
Активен

"Господи, дай ми сила да променя нещата които немога да приема,
дай ми търпение да приема нещата които не мога да променя,
и ми дай мъдрост, да правя разликата между двете"

a_panov

  • Напреднали
  • *****
  • Публикации: 62
    • Профил
да да да да... :'(
Имам в главната index.php който строи целия сайт и си вика различни файлове от различни поддиректории. Обаче в поддиректорията /news/today_news.php и /news/yesterday_news.php се извикват от индекса в главната. Отделно от това те правят неща от "погледа на главната директория" включване на ленгуидж файлове, заявки към база данни.
Така и ако тези файлове по някакъв начи бъдат достъпвани не като index.php/?page=news/today_news.php а директно е извикан като today_news.php лога на апача естествено ще се напълни с грешки. Горните работи са примерни.

Та да не се постъпват директно поддиректориите под главната, или по точно те си се достъпват но съм забранил достъпването на php файлове с .htaccess по този начин:

Код:
<FilesMatch "\.php$">
order allow,deny
deny from all
</FilesMatch>

и така апача ги заплюва с грешка 404 Not Found която може да я прихванете с .htaccess-а в главната директория.

При желание мога да ви архивирам кода и да ви го пратя. Днес открих груба логическа грешка в index.php която е при обработката на изключения но сега няма да се опитвам да я поправям а ще легна да почета книга и да поспя.

Лек ден на всички!
« Последна редакция: Jun 20, 2009, 18:55 от a_panov »
Активен

Lucifer

  • Напреднали
  • *****
  • Публикации: 103
    • Профил
Я чакай ... викащ го с index.php/?page=news/today_news.php ???????????

Аз ли не схващам идеята или ти наистина викаш целия филе? Я му дай include()/require() и си викай функцийте от него ... не че и аз не съм правил такива неща (и не ги правя) но по принцип PHP файла винаги се вика с някаква променлива ... иначе връща празно ...
Активен