пара вопросов к знающим

Тема в разделе "PHP", создана пользователем ghostik32, 29 апр 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ghostik32

    ghostik32 Создатель

    Регистр.:
    26 янв 2010
    Сообщения:
    40
    Симпатии:
    1
    Всем привет!
    Пишу большой сайт и по ходу дела возникли пару вопросов:
    - Как можно организовать статистику, на сайте человек или нет (у меня сейчас добавляется запись в mysql, при авторизации пользователя, что он на сайте, а когда он делает логаут то запись в таблице убирается и он как бы оффлайн). В таком способе есть неточность, если пользователь просто закроет браузер то он так и останется Онлайн на сайте так как в БД таблица не обновится.
    - Как можно организовать сбор статистики на сайте. Допустим кто-то пытается sql injected сделать, как это можно отследить.
     
  2. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    SQL иньекции. Если пытались и у них не получилось, то в принципе эта инфа неинтересная. Если пытались и получилось, то Вы первые об этом узнаете.

    А вообще отследить желаемые скл иньекции очень просто:

    1. Нужно сравнивать передаваемые в mysql запрос параметры до их отчистки от ненужных символов и после отчистки.

    2. Если все параметры одинаковые, то sql иньекции нету или Вы неправильно чистите параметры.

    3. Если полученные параметры разные, то пишем в лог или еще куда переданные параметры и юзера, который это вводил.

    По статистике сайта: В Бд нужно ввести дополнительное поле, в которое писать время последнего открытия любой страницы пользователем.
    Затем кроном или еще как удалять юзверей из этой таблицы таймаут которых больше определенного времени (например 15 минут).
     
    ghostik32 нравится это.
  3. ghostik32

    ghostik32 Создатель

    Регистр.:
    26 янв 2010
    Сообщения:
    40
    Симпатии:
    1
    очень интересно, спасибо!
    Можно какой-нибуть примерчик про чистку запросов в mysql, а то несовсем вас понял.
    По поводу логов при открытии страницы, если пользователей пара тысяч то и БД будет нагружена лишними запросами. Может есть способ без БД?

    P.S по поводу вашего способа статистики, как я понимаю будет что-то вроде такого:
    PHP:
    mysql_query ("UPDATE `users` SET last_view_url = '" time () . "' WHERE hash = '" $_SESSION['hash'] . "'");
     
  4. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    Запрос примерно правильный. И еще будет 1 запрос на удаление где last_view_url меньше (текущее минус N минут)

    Каждый пишет скрипты под себя, поэтому могу алгоритм только написать. По-любому с моим скриптом придется разбираться примерно столько же сколько и писать самому.
    Пишу еще раз алгоритм только другими словами
    Пользователь залогинился - записали (обновили) время в таблице. Пользователь открыл новую страницу - записали (обновили) время в таблице.
    С помощью какого-нибудь планировщика из этой таблицы например 1 раз в минуту или 1 раз в 5 минут удаляем устаревших пользователей, которые не открывали страницы в течении например 5 или 15 минут.

    По-любому на БД будет дополнительная нагрузка. Можно все это хранить в файлах но опять же ничего хорошего из этого не будет. Тут больше вопрос зачем нужно знать ОН-лайн пользователей? Как-то вешал на сайт видеостатистику он кликтейл.ком и на видео глядел как мой сайт пытались взломать. Интересное зрелище для неслабонервных :) .

    p.s. Кстати по поводу логов sql иньекций. Лучше НЕ писать их в БД :). А то вдруг плохо заэкранируете плохие символы и получите отрицательный эффект. Как-то вешал на сайт видеостатистику он кликтейл.ком и на видео глядел как мой сайт пытались взломать. Интересное зрелище для неслабонервных :) .
     
  5. sh4m3

    sh4m3 Писатель

    Регистр.:
    28 мар 2010
    Сообщения:
    5
    Симпатии:
    0
    самый дешевый способ узнать сколько юзверей на сайте (дешевый если сайт очень нагружен) - то это почитать кол-во файлов сессии php. - столько юзерей на сайте :)
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Это не самый дешевый способ. Для этого по крайней мере мере надо указывать session_save_path и еще бы неплохо session_save_handler. В противном случае доступ к файлам сессии не получишь, если конечно у тебя не свой vps/vds и т.п.
     
Статус темы:
Закрыта.