За последние 24 часа нас посетили 32973 программиста и 1821 робот. Сейчас ищут 876 программистов ...

Защита $_SESSION

Тема в разделе "PHP для новичков", создана пользователем acso, 15 апр 2010.

  1. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Уважаемые дамы и господа. На php пишу не так давно, хотя на delphi опыт более 15 лет. Руководству сайт потребовался, вот и пришлось переквалифицироваться - вот что получилось http://ark-spa.com
    У меня вопрос такого плана. Где-то вычитал, что сессии небезопасны в плане утечки данных, вот и решил воспользоваться такой замуткой: использую только session_id() а все остальное храню в бд mysql. Посмотрите, что у меня получилось и стоит ли игра свеч?
    PHP:
    1. <?php
    2.  function sess_set($name, $value) {
    3.   dbConnect();
    4.   if (is_bool($value)) $value = (int) $value;
    5.   $name = mysql_escape_string($name);
    6.   $value = mysql_escape_string($value);
    7.   mysql_query('delete from t_Sessions where id="'.$id.'" and name="'.$name.'"');
    8.   mysql_query('insert into t_Sessions (id,name,value) values ("'.$id.'","'.$name.'","'.$value.'")');
    9.  }
    10.  
    11.  function sess_get($name) {
    12.   dbConnect();
    13.   $name = mysql_escape_string($name);
    14.   $res = mysql_query('select * from t_Sessions where id="'.$id.'" and name="'.$name.'"');
    15.   if ($row = mysql_fetch_assoc($res)) $ret = $row['value'];
    16.   return $ret;
    17.  }
    18.  
    19.  function sess_isset($name) {
    20.   if (!sess_get($name)) return false; else return true;
    21.  }
    22.  
    23.  function sess_unset($name) {
    24.   dbConnect();
    25.   $name = mysql_escape_string($name);
    26.   mysql_query('delete from t_Sessions where id="'.$id.'" and name="'.$name.'"');
    27.  }
    28. ?>
     
  2. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    P.S. Немного усложнил - вместо $id использую результат функции sess_id()
    PHP:
    1.  function sess_id() {
    2.   return md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['HTTP_ACCEPT_CHARSET'].session_id());
    3. }
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вы куки с сессиями не попутали?
    Сессии живут на сервере. И используют только session id =)
    И хранят все где надо и там никто не ходит =)
     
    acso нравится это.
  4. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    А ведь действительно, чайник я с ручкой )))
    Почитал мануал по сессиям и разобрался. Насколько я понял айди сессии хранится в куке и передается серверу. Но может передаваться и через get-параметр. Короче, дурная затея )))
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    acso
    Хотел подшутить чтото, но твой стаж программирования в 15 лет на делфи мне морально такого не позволяет))
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Если этот стаж - не таскание VCL по форме ;-)
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    короче сессиям можно доверять.

    если у клиента на компе засел троян, тот тут уже ничего не спасет.
     
  8. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Что ж, спасибо на добром слове. Да, таскаю, кодом.
    Какое начало общения, такое и продолжение. По крайней мере там, где я общаюсь, себя не так ведут. Даже с новичками. Прощайте. Гугль рулит форева!
    vcl по форме... хм...
    Королевство Delphi
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Спасибо, мне С++ хватает и профиля тут =)
     
  10. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    Загнул ты конечно про 15 лет и vcl))
    За такое время я в пхп, наверно, научусь md5 в голове дешифровывать :D ))))
     
  11. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А что, человек за 15 лет на всех форумах, на которых отписывался, не забывал упомянуть о своём стаже на Delphi? =)
    Можно ещё сказать, что у меня жена, трое детей и рояль в гостинной, но в РНР не шарю.

    MD5 относится к РНР как слон к губке.
     
  12. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    Думаю, если бы ты 15 лет изучал пхп (+ js, html, css), то смог бы в короткое время разобраться в несложном коде того же делфи. Так и тут.
     
  13. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Неправильно думаешь, неправильно.
    У РНР Си-подобный синтаксис, у Дельфи, мягко говоря, — нет.
    Кроме того подключаемые библиотеки и процедуры в Дельфи в корне отличаются от тех же С++ (не считая VCL для Дельфи, которую прилепили к билдеру).
    Итого: разный синтаксис уже, тип Variant (знаешь, что это такое? Догадайся :p ), а как тип-то лепится к переменной - он не впереди стоит, и список отличий, который можно продолжать и продолжать.
    Это разные языки, кроме того, в РНР нет указателей, и простенький код на Дельфи, содержащий указатели, нифига не скажет программеру на РНР.

    Увы, это суровая правда.
    Суть программирования одна (а иначе почему Дональд Кнут так популярен?), но подходы языков - разные.
     
    acso нравится это.
  14. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Apple
    Да я тебе не о синтаксисе и о точном подобии))) Ты программист или домохозяйка в конце-концов? :D))) За 15 лет вырабатывается уже мышление, есть навыки как ошибку искать, даже мануал найти в интернете, дабы прочитать про каждую функцию и "въехать" в код. Не зря ж даже тут принято на мануал посылать.
    Тут вопрос не в том чтоб за день переквалифицироваться в програмера другого языка, а в том чтоб за день разобраться в 30 строках логически законченного кода. Не факт, что даже в таких 30-ти строках самому получиться найти ошибку, в силу не хватаемого опыта по этому языку, но понять логику скрипта, что он выполняет и что должно быть на выходе - думаю можно. Do you agree with me?))
     
    acso нравится это.