За последние 24 часа нас посетили 53718 программистов и 1772 робота. Сейчас ищут 716 программистов ...

Защита страницы

Тема в разделе "PHP для новичков", создана пользователем smala, 13 янв 2011.

  1. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    есть страница 1.php и 2.php так вот как сделать чтоб из страницы 1.php на страницу 2.php можно было перейти, а если просто страницу 2.php запускать в браузере, или с другой страницы, чтоб не переходило))
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Возможно, так:
    PHP:
    1. <?php
    2. $ref = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '';
    3. if(strpos($ref, '/1.php') === false) exit('фиг вам');
    4. // ...
    5. ?>
    Добавить в начало файла 2.php
     
  3. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    гг спс))) и никак не обойти да?)) ну это надежно?)
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Обойти-то можно при желании
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1.php
    PHP:
    1. <?php
    2. ...
    3. $_SESSION['checkPoint1']=true;
    4. ....
    2.php
    PHP:
    1. <?php
    2. ...
    3. if (!isset($_SESSION['checkPoint1']) || !$_SESSION['checkPoint1']){
    4.     header(Location:'/');
    5. }
    6. ....
     
  6. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    вотетот способ кажется понадежней)
     
  7. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    но не работает(((
     
  8. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А сессию запустили?
     
  9. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    нет,
    но пишет
    Parse error: syntax error, unexpected ':' in Z:\home\site\www\zap.php on line 4
    а должно как я понял на главную кидать
    -----------------
    (Location:'/')
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1. Нужно запустить сессию.
    2. Функция header принимает строку, что ясно видно из документации.
     
  11. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    непошло(((
    даже через сессию
     
  12. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    может через POST сделать?))
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    У меня все работает.
     
  14. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    поставил первый вариант)) спс
     
  15. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Топикстартер 100% забыл кавычки вокруг Location: поставить в header, но в мануале же лень копаться самому. Другие подскажут.
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    1.php
    PHP:
    1. <?php
    2. $_SESSION['checkPoint1'] = true;
    3. ?>
    2.php
    PHP:
    1. <?php
    2. if(!isset($_SESSION['checkPoint1']) || !$_SESSION['checkPoint1']) {
    3.    header('Location: /');
    4. }
    5. ?>
    session_start() - в самое начало, до какого-либо вывода в браузер.
     
  17. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Согласен что через сессию наилучший вариант) и мне какраз кое с чем помогли спс))
     
  18. smala

    smala Активный пользователь

    С нами с:
    11 янв 2011
    Сообщения:
    137
    Симпатии:
    0
    О это работает, только функция всеравно продолжается, хоть и редиректит на главную, но исполняет команды скрипта, который идет после проверки сессии!)))
     
  19. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
  20. Nelepostb

    Nelepostb Активный пользователь

    С нами с:
    20 фев 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    НН
    Вот мой вариант - добавил генератор случайных чисел - отлично работает:
    php1:
    PHP:
    1. <?php
    2. srand((double) microtime( ) * 1000000);
    3. $uniq_id = uniqid(rand( ));
    4. $_SESSION['uniq_id'] = true;
    5. ?>
    PHP2:
    PHP:
    1. <?php
    2. if(!isset($_SESSION['uniq_id']) || !$_SESSION['uniq_id']) {
    3. header('Location: /');
    4. }
    5. ?>
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Nelepostb
    и что же он по-вашему делает? =)
     
  22. Nelepostb

    Nelepostb Активный пользователь

    С нами с:
    20 фев 2011
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    НН
    igordata
    добавляет случайное число примерно такого вида - 45aba50df7d3cca42b61d7e1bdbeafb2
    во втором файле проверяется его наличие и в случае отсутствия такового страница просто не выводится =)
     
  23. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Nelepostb
    жесть)))) Этот код вполне соответствует вашему нику))))

    Кстати, если вычеркнуть из первого файла 3 и 4 строки - на работу это никак не повлияет))))
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Nelepostb
    во-первых, он не проверяет наличие числа. Он проверяет, что переменная определена. А что в ней - не проверяет.
    Как следствие:
    во-вторых, после единократного создания переменной, этот скрипт ВСЕГДА будет позволять открывать второй файл без первого.

    =)

    а вобще направление мысли правильное. Чтобы избежать запуска инклудов без основного скрипта нужно просто сесть попой на клавиатуру два раза:
    PHP:
    1. <?
    2. $kdjgfaklgfkjgrkhjr="f8yeuhbhvf74ebnbgpq";
    и скопипастить проверку значения в остальные инклуды.

    Хотя хочу сказать, что при современных ценах на харды проще делать ежедневный бэкап.
     
  25. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Добавить на страницу 1.php

    Код (Text):
    1. define('page', true);
    На страницу 2.php

    Код (Text):
    1. if(!defined("page")) die('Использовать 2.php можно только через 1.php');
    Или я не так понял? :D