Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Jimmbo
28 / 9 / 1
Регистрация: 16.11.2011
Сообщений: 340
#1

Запретить доступ через адресную строку - PHP

14.02.2013, 14:02. Просмотров 3126. Ответов 10
Метки нет (Все метки)

Всем привет, как можно запретить доступ через адресную строку ? То есть у меня есть файл index.php в котором идёт проверка на авторизацию, и если удачно то переходит на другой файл indexScript.php и дает редактировать данные. Но если в адресной строке тупо вбить путь к файлу indexScript на прямую то будет тот же эффект, можно будет без проблем редактировать данные без авторизации как такое поправить, могу выложить весь код если нужно
http://www.cyberforum.ru/php-beginners/thread1856373.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2013, 14:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запретить доступ через адресную строку (PHP):

Закрыть доступ к php файлу через адресную строку, но так, чтобы он инклудился другим скриптом и работал
Здравствуйте,подскажите можно ли закрыть доступ к php файлу через адресную...

Заполнение формы через адресную строку
Здравствуйте! Узнал о способе заполнения формы, через адресную строку: ...

Отправка данных через адресную строку
Я новичок в этом деле и в формах на страницах хтмл мало че понимаю. Обьясните...

Запрет GET в ручную через адресную строку
При удалении записи из таблицы формируется GET запрос и в адресной строке...

Запрет доступа через адресную строку
Для того чтобы нельзя было перейти на страницы используемые для админа на...

10
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
14.02.2013, 14:05 #2
самое простое - использование констант. в первом файле определяете какую-нибудь константу:
PHP
1
define('__FOO__BAR__LOL__', true);
и делаете не редирект на второй файл, а подключаете его.
А во втором файле простая проверка
PHP
1
2
3
4
5
6
if(!defined('__FOO__BAR__LOL__'))
    exit('Access denied!');
else
{
//здесь код
}
1
Василий Макогон
269 / 225 / 11
Регистрация: 20.04.2012
Сообщений: 820
14.02.2013, 14:06 #3
а у самого какие идеи есть?
0
Jimmbo
28 / 9 / 1
Регистрация: 16.11.2011
Сообщений: 340
14.02.2013, 14:45  [ТС] #4
KOPOJI во спасибо, то что и хотелось Правда теперь осталось додуматься как это использовать. так как если я подключаю файл чтобы принять значения то он подключается вместе со всем мусором, у меня там целый лабиринт

Добавлено через 11 минут
Всё, класс разобрался. Спасибо еще раз

Добавлено через 1 минуту
Цитата Сообщение от Василий Макогон Посмотреть сообщение
а у самого какие идеи есть?
Я пытался создать переменную и присвоить ей значение. и так же само если значения совпадают то запускать скрипт. но мне выдало много ошибок и я подумал что так не кто не делает

Добавлено через 11 минут
Оу, все же не совсем работает. При попытке зайти по адресной строке не пускает на прямую, все ок. Когда через форму авторизацию заходит, но если попробывать изменить данные в таблице то при нажатии опя Access denied.
может кто посмотреть как в сам код надо это сделать, и заодно сказать на сколько не грамотно написан код

index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
function draw_form($bad_login = false) {
?>
 
<div style="margin-top: 200px">
<form action="" method="post">
    <center>
    Login:<BR><input type="text" name="login"><br/>
    Password:<BR><input type="password" name="pass"><BR>
    <input type="submit" name="submit" value="Войти">
    </center>
    <center><img src="_img/test.jpg" style="margin-right: 220px"></center>
</form>
</div>
<?php
    if ($bad_login)
        echo "<center><b style='color: red'>Неправильный логин или пароль</b></center>";
}
 
function check_login($login, $pass) {
    return ($_POST['login'] == 'test_user') && ($_POST['pass'] == '123');
    define('__FOO__BAR__LOL__', true);
}
 
session_start();
 
if (isset($_GET['logout'])) {
    session_unset();
    session_destroy();
    header("Location: index.php");
    define('__FOO__BAR__LOL__', true);
    exit();
 
}
 
 
if (!isset($_SESSION['login'])) {
 
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    define('__FOO__BAR__LOL__', true);
 
    if (count($_POST) <= 0)
        draw_form();
    else {
        if (check_login($login, $pass)){
            $_SESSION['login'] = $login;
            require('indexScript.php');
        }
        else
            draw_form(true);
    }
}
 
if(!isset($_SESSION['login'])){
    die();
}
 
 
 
 
echo "<p style='margin-top:220'><center><b style='color: green; margin-top: 220'>Здравствуйте, вы зашли как: </b><b>".$_SESSION['login']."</b></center></p>";
?>
 
<center>
 
<b><a href="indexScript.php">Перейте к редактированию данных</a><br/></b>
<a href="index.php?logout">Выход</a>
 
</center>
indexScript.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
session_start();
require('_include/setup.php');
//require('index.php');
if(!defined('__FOO__BAR__LOL__'))
    exit('Access denied!');
else
{
$smarty = new MySmarty();
$smarty->assign('printAll',$db->getAll("SELECT * from `#___table`"));
$smarty->display('indexTable.tpl');
//===================================================================
 
//Delete...
if (isset($_GET['action']) && $_GET['action'] == 'del') {
    $id = (int) $_GET['id'];
    if (!empty($id)) {
        $sql = 'DELETE FROM `test_table` WHERE `test_ID` = ' . $id;
        mysql_query($sql);
            header ('Location: indexScript.php');
            die();
    }
}
//Add...
if(isset($_POST['addData'])){
    $smarty->display('addData.tpl');
}
if(isset($_POST['addValue']))
{
    if ($_POST['ID'] == true){
        $db->insert('test_table', array('test_ID'=>$_POST['ID'],'test_Name'=>$_POST['Name'],'test_Email'=>$_POST['Email']));
        header ('Location: indexScript.php');
        die();
    }else echo "<center><b style='color: red'>Вы не ввели данные</b></center>";
}
//Change...
if(isset($_GET['action']) && $_GET['action'] == 'change'){
    $smarty->display('addData.tpl');
}
if(isset($_POST['addValue'])){
    $db->update('test_table', array('test_Name'=>$updateName, 'test_Email'=>$updateEmail), "test_ID=$idd");
}
$smarty->assign('changeMe', isset($_GET['action']) && $_GET['action'] == 'change');
}
indexTable.tpl
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form action="indexScript.php" method="post">
    <centeR>
        <table border=3>
        {foreach from=$printAll item=row key=k }
            <tr >
                <td><b style="font-family: arial">ID:</b> {$row.test_ID}</td>
                <td><b style="font-family: arial">Name:</b> {$row.test_Name}</td>
                <td><b style="font-family: arial">Email:</b>{$row.test_Email}</td>
                <td><a href="/indexScript.php?action=del&id={$row.test_ID}">удалить</a></td>
                <td><a href="/indexScript.php?action=change&changeID={$row.test_ID}">редактировать</a></td>
            </tr>
        {/foreach}
    </center>
</form>
 
<form action="indexScript.php" method="post">
    <input type="submit" name="addData" value="Новая запись">
</form>
 
<b style="float: right"><a href="index.php?logout">Выход</a></b>
addData.tpl
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<center>
<form action="indexScript.php" method="post">
    ID:
    <input type="text" name="ID" size="8">
    Имя:
    <input type="text" name="Name" size="8">
    Email:
    <input type="text" name="Email" size="8"><BR><BR>
    <input type="submit" name="addValue" value="Добавить запись">
    <input type="submit" name="cancel" value="Отмена"><BR>
</form>
</center>

Заранее спасибо
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
14.02.2013, 14:55 #5
Цитата Сообщение от Jimmbo Посмотреть сообщение
PHP
1
define('__FOO__BAR__LOL__', true);
зачем трижды? Вынесите в начало кода и все.
Цитата Сообщение от Jimmbo Посмотреть сообщение
PHP
1
2
return ($_POST['login'] == 'test_user') && ($_POST['pass'] == '123');
* * define('__FOO__BAR__LOL__', true);
здесь это вообще неверно - никогда не выполнится. Почитайте про оператор return.

Цитата Сообщение от Jimmbo Посмотреть сообщение
PHP
1
2
3
4
5
function check_login($login, $pass) {
* * return ($_POST['login'] == 'test_user') && ($_POST['pass'] == '123');
* * define('__FOO__BAR__LOL__', true);
}
session_start();
Warning: cannot modify header information - headers already sent .....

По вопросу доступа - Вы хотите закрыть прямой доступ к файлу indexScript.php, чтоб была возможность только через форму зайти туда?
0
Jimmbo
28 / 9 / 1
Регистрация: 16.11.2011
Сообщений: 340
14.02.2013, 14:57  [ТС] #6
По вопросу доступа - Вы хотите закрыть прямой доступ к файлу indexScript.php, чтоб была возможность только через форму зайти туда?
Именно
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
14.02.2013, 14:59 #7
Тогда все еще проще, константы не нужны.
в этом файле обычная проверка:
PHP
1
2
3
4
5
6
7
8
if( !isset($_POST['ID']) ) // а лучше все поля записать - if( !isset($_POST['ID'], $_POST['Name'], ...) )
{
//ввел напрямую
}
else
{
//Здесь код
}
1
Jimmbo
28 / 9 / 1
Регистрация: 16.11.2011
Сообщений: 340
14.02.2013, 15:04  [ТС] #8
Цитата Сообщение от KOPOJI Посмотреть сообщение
Тогда все еще проще, константы не нужны.
в этом файле обычная проверка:
PHP
1
2
3
4
5
6
7
8
if( !isset($_POST['ID']) ) // а лучше все поля записать - if( !isset($_POST['ID'], $_POST['Name'], ...) )
{
//ввел напрямую
}
else
{
//Здесь код
}
Эээ.. не совсем понял, у меня шас такая каша в голове как мне проверка на введенный ID и Имя поможет для закрытия прямого доступа по адресной строке
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16744 / 6635 / 860
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
14.02.2013, 15:05 #9
не на введенный ID а на существование соответствующих значений в массиве $_POST. Если мы не жмякали по кнопке формы - то этих данных там не будет (ну кроме как cURL и т.п.)
1
Jimmbo
28 / 9 / 1
Регистрация: 16.11.2011
Сообщений: 340
14.02.2013, 15:12  [ТС] #10
Окей, спасибо огромное тебе за помощь добрый человек
0
KOPOJI
14.02.2013, 15:13     Запретить доступ через адресную строку
  #11

Не по теме:

не за что, рад был помочь

1
14.02.2013, 15:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2013, 15:13
Привет! Вот еще темы с ответами:

Блокирование данных в поле формы при заполнении через адресную строку
Добрый день. Есть следующая задача: При переходе по ссылке в адресной...

Запретить доступ по запросу через htaccess
Добрый день. Последнее время появились &quot;нежелательные&quot; заходы на сайт через...

Изменить адресную строку
Здравствуйте, у меня такой вопрос: можно ли изменить адресную строку после...

Передать параметры в адресную строку
Здравствуйте. Прошу помощи в написании кода. Задача: Дано две страницы:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru