Вопрос № 50256: Уважаемые эксперты!
Имеется код скрипта для голосования (в Приложении). Небходимо защитить этот скрипт от возможности повторного голосования посредством IP-пользователя. Не могли бы вы мне сказать, как это сделать? Предложите ваш вариант пол...Вопрос № 50304: Хай усем!
Куда прописывать allow_url_fopen если на сервере нет php.ini? И если его нужно самому создавать то что писать в нём?
Заранее спасибо!...
Вопрос № 50.256
Уважаемые эксперты!
Имеется код скрипта для голосования (в Приложении). Небходимо защитить этот скрипт от возможности повторного голосования посредством IP-пользователя. Не могли бы вы мне сказать, как это сделать? Предложите ваш вариант полного скрипта или модифицируйте этот (желательно).
Мне бы также хотелось знать, насколько этот скрипт идеален и, самое главное, безопасен.
Сохраняй IP проголосовавших, например в voting/ip.txt. И при кадом голосовании проверяй, есть ли IP в списке проголосовавших, если есть - выводи "Вы уже проголосовали!".
Примерно так:
Приложение:
Ответ отправил: Physicist (статус: 9-ый класс)
Ответ отправлен: 26.07.2006, 16:33
Отвечает: Марк Крейн
Здравствуйте, Демьянчук Виталий!
Сразу скажу следующее: посредством проверки IP адреса пользователя Вы этот скрипт от повторного голосования никак не защитите. Дело в том что у большинства пользователей коммутируемый доступ в интернет, а следовательно у них динамические IP.
Как вариант могу предложить реализацию системы голосований, описание которой прилагаю. (см. ниже)
Пользователь регистрируется (логин и пароль), и голосует. Голосований может быть несколько, все они разбиты по категориям. Пользователю запрещено менять логин. Таким образом совершенно исключена возможность повторного голоса одного и того же пользователя (при ответе просто проверять, голосовал ли этот пользователь или нет).
Если такой вариант не устраивает, предлагаю альтернативу с cookies. Т.е. запоминать все данные у клиента. Но здесь тоже есть проблема, а именно: если пользователь отключит cookies, Ваш скрипт будет работать некорректно.
Теперь по поводу самого скрипта. Рекомендую использовать функцию flock при записи в файл. Описание функции Вы можете прочитать здесь.
Ещё одно замечание по поводу идеальности скрипта. Вы выводите html-данные посредством echo. Дело в том что echo относится к php, как следствие тратятся лишние ресурсы. Это не принципиально (у каждого свой стиль программирования), но, всё-таки, лучше выводить html-данные (формы, таблицы и т.д) не прибегая к php.
С учётом всего сказанного привожу изменённый код (см. приложение).
Надеюсь что помог Вам своим ответом.
Удачи!
С уважением,
Марк.
Приложение:
Ответ отправил: Марк Крейн (статус: Студент)
Ответ отправлен: 26.07.2006, 16:43
Вопрос № 50.304
Хай усем!
Куда прописывать allow_url_fopen если на сервере нет php.ini? И если его нужно самому создавать то что писать в нём?
Заранее спасибо!
allow_url_fopen можно прописать ТОЛЬКО в php.ini. Думаю, что этот файл на сервере должен быть (другой вопрос - есть ли у Вас к нему доступ). По умолчанию этот файл (в unix) находится в директории /usr/local/lib (<install-path>/lib), ищите там (опять же - если есть доступ).
Можете попытаться написать письмо в техподдержку своему хостеру - должны помочь. Исключением могут быть бесплатные хостинги - там зачастую отключен любой обмен "с внешним миром" (в том числе и sendmail и т.д.) в целях экономии своего траффика и защиты от спамеров.
Ответ отправил: Physicist (статус: 9-ый класс)
Ответ отправлен: 26.07.2006, 23:51 Оценка за ответ: 4 Комментарий оценки: Спасибо! Но не помогло!
Отвечает: Марк Крейн
Здравствуйте, Mirgorodchenko Anton!
Создайте файл .htaccess, в него поместите следующее: php_value allow_url_fopen 1.
Значение 1 включает директиву, 0 - отключает.
создание файла .htaccess
Обратите внимание: в файле присутствует только расширение. Для того чтобы создать такой файл сделайте следующее:
1. В Блокноте напишите строку php_value allow_url_fopen 1.
2. При сохранении в графе "Тип файла" выберите "Все файлы".
3. Там где имя файла введит .htaccess
4. Сохраняйте.
Удачи!
Ответ отправил: Марк Крейн (статус: Студент)
Ответ отправлен: 27.07.2006, 06:19 Оценка за ответ: 4 Комментарий оценки: Спасибо! Правда, опции не все сказали и сайт на время исчез!