Форма входа в PHP - PullRequest
4 голосов
/ 01 мая 2009
 <form action="form.php" method="post">
    Username: <input type="text" name="user" maxlength="50" value="" />
    Password: <input type="password" name="pass" maxlength="20" value="" />
    <input type="submit" name="Submit" value="Submit" />
    </form>
    <?php
    $Accesstrys = 0;
    if($_POST['Submit'] == "Submit") {
    $Accesstrys++;
    if($Acesstrys == 3)
    {
    $ip = getenv("REMOTE_ADDR");
    $file = fopen("Loginlimit/$ip",'w');
    fwrite($file,"$Accesstrys:$ip");
    }   
    }
    ?>

Я пытаюсь закодировать PHP Login Script, дает вам 3 попытки войти в систему, если вы ошибетесь, когда он остановится, скажем, 10 минут.

далеко не сделано, но я проверил это, и он не создал / записал файл с моим ip. что я не так

Ответы [ 8 ]

7 голосов
/ 01 мая 2009

Поскольку PHP на стороне сервера, ваша переменная $Accesstrys устанавливается в 0 при каждом запросе.

Ключ к использованию сессий. Попробуйте увеличить $_SESSION["AccessTrys"] вместо $Accesstrys

3 голосов
/ 01 мая 2009

PHP, как и большинство динамических языков, используемых специально для веб-приложений, работает в среде без состояний. Для отслеживания попыток входа между HTTP-запросами вам потребуется сессия для ваших пользователей:

<?php

session_start();
if (!isset($_SESSION['Accesstrys'])) {
  $_SESSION['Accesstrys'] = 0;
}
$_SESSION['Accesstrys']++;
// ... your code goes here ...
2 голосов
/ 01 мая 2009

Вы хотите использовать базу данных для хранения количества повторных попыток (по IP-адресу или, что лучше, по имени пользователя), поскольку, как уже упоминали другие, ваш $ Accesstrys будет сбрасываться в ноль при каждом запросе.

Я удивлен, что так много людей предложили использовать сеансы для отслеживания количества повторных попыток. Там есть фундаментальный недостаток безопасности - если попытки входа в систему исходят от автоматического бота, пытающегося взломать учетную запись, не будет файлов cookie (или идентификатора сеанса URL), и отслеживание попыток доступа в сеансе будет бесполезным.

2 голосов
/ 01 мая 2009

Предположительно, комбинация имени пользователя и пароля для входа в систему не жестко запрограммирована в сценарии, а извлекается из какой-либо базы данных. В таком случае, почему бы просто не включить новый столбец для каждого пользователя. Это решает проблему, если пользователь просто удаляет куки-файл сессии при каждой третьей попытке.

База данных также позволит вам «заблокировать» учетные записи, когда она достигнет 3 неудачных попыток.

Если вы чувствуете, что действительно нуждаетесь в безопасности, вы можете использовать смесь сеансов и столбцов базы данных, но сохраняя данные сеанса в базе данных. У Google есть множество примеров того, как это сделать, используя функцию set_session_save_handler.

1 голос
/ 01 мая 2009

Есть много проблем с подходом, который вы выбрали. Например

  1. REMOTE_ADDR не уникален для каждого пользователя
  2. Запись информации в файл не будет работать, если вы не позаботитесь о одновременном обращении пользователей к вашему серверу
  3. $ Accesstry ++ исчезает при каждом использовании, поэтому его значение никогда не будет сохранено.
  4. и т.д ..

Вам необходимо использовать функцию, которая называется Сеансы, и хранить информацию в сеансе или базе данных. Взгляните на http://us.php.net/manual/en/features.sessions.php

1 голос
/ 01 мая 2009

На первый взгляд кажется, что вы перезаписываете @ Accesstrys каждый раз с 0, что дает вам максимум 1. Что вам нужно сделать, это установить для файла $ Accestrys значение 0, а затем установить переменную в файл, увеличить переменной, а затем установите файл равным переменной.

0 голосов
/ 01 мая 2009

Я хотел бы добавить еще одну проблему в код, а не проверять значение отправки, равное ему, используйте ISSET.

if(isset($_POST['Submit'])) {
// Action code
}

Посмотрите примеры того, как можно эффективно разработать форму входа.
См. Следующие ссылки:
Пример кода формы входа в систему
Открытие и запись файла - функция PHP
Сеанс для отслеживания значения до истечения сеанса / закрытия браузера

0 голосов
/ 01 мая 2009

Каждый раз, когда вы публикуете попытку, она сбрасывает число попыток доступа до 0. Вам необходимо сохранить количество попыток в серверном решении, таком как база данных или сеанс.

EDIT Как упомянуто в моих комментариях, мой предыдущий умственный вывод о размещении такой информации в cookie-файле - просто худшая практика. Спасибо звездам за редактирование сообщества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...