RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 416
от 01.08.2006, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 334, Экспертов: 46
В номере:Вопросов: 2, Ответов: 4


Вопрос № 50256: Уважаемые эксперты! Имеется код скрипта для голосования (в Приложении). Небходимо защитить этот скрипт от возможности повторного голосования посредством IP-пользователя. Не могли бы вы мне сказать, как это сделать? Предложите ваш вариант пол...
Вопрос № 50304: Хай усем! Куда прописывать allow_url_fopen если на сервере нет php.ini? И если его нужно самому создавать то что писать в нём? Заранее спасибо!...

Вопрос № 50.256
Уважаемые эксперты!

Имеется код скрипта для голосования (в Приложении). Небходимо защитить этот скрипт от возможности повторного голосования посредством IP-пользователя. Не могли бы вы мне сказать, как это сделать? Предложите ваш вариант полного скрипта или модифицируйте этот (желательно).

Мне бы также хотелось знать, насколько этот скрипт идеален и, самое главное, безопасен.

Надеюсь на Вашу помощь.
Спасибо!

Приложение:

Отправлен: 26.07.2006, 16:13
Вопрос задал: Демьянчук Виталий (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Демьянчук Виталий!

Сохраняй 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? И если его нужно самому создавать то что писать в нём?
Заранее спасибо!
Отправлен: 26.07.2006, 23:40
Вопрос задал: Mirgorodchenko Anton (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Physicist
Здравствуйте, Mirgorodchenko Anton!

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
Комментарий оценки:
Спасибо! Правда, опции не все сказали и сайт на время исчез!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное