Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Безопасно ли использование сессии как имя таблицы в БД
 
 автор: newcold   (03.01.2009 в 22:34)   письмо автору
 
 

Человек авторизуется и попадает на страницу с загруженными данными из своей собственной таблицы.
Пример:
<?
$query 
"SELECT * FROM $_SESSION['name']";
    
$cat mysql_query($query);
    if (!
$cat) exit("Ошибка!");
?>

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 23:17)   письмо автору
 
   для: newcold   (03.01.2009 в 22:34)
 

Ой ёй... Безопасно то оно безопасно, если в сессию правильно записать, только не слишком ли расточительно таблицу на каждого юзера? Как говориться съесть то он съесть... только кто ж ему дасть?

  Ответить  
 
 автор: newcold   (03.01.2009 в 23:20)   письмо автору
 
   для: Николай2357   (03.01.2009 в 23:17)
 

Что посоветуете?

  Ответить  
 
 автор: Николай2357   (03.01.2009 в 23:36)   письмо автору
 
   для: newcold   (03.01.2009 в 23:20)
 

В зависимости от того, какие цели Вы преследуете. Обычно достаточно одной учетной записи, то есть строки в таблице, в которую записать имя юзера и все его данные.

  Ответить  
 
 автор: Trianon   (04.01.2009 в 15:05)   письмо автору
 
   для: Николай2357   (03.01.2009 в 23:17)
 

Безопасно, говорите?
А потом придет bad boy и начнет придумывать при регистрации имя вроде
users union select u.password as name, u.* from users u


никакая часть текста sql-кода не должна в него попадать без проверки на соответствие формату и области допустимых значений.

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 15:17)   письмо автору
 
   для: Trianon   (04.01.2009 в 15:05)
 

Уважаемый господин Тrianon. У Вас плохо прошел праздник, или я лично чем то Вам не угодил? Вы в который раз пытаетесь приписать мне ошибки, которых я не совершал. Прочитайте внимательно мой ответ:
>если в сессию правильно записать.
Как правильно записать, я не стал расписывать ввиду того, что это не имеет никакого смысла в данном контексте.

  Ответить  
 
 автор: BinLaden   (04.01.2009 в 15:46)   письмо автору
 
   для: Николай2357   (04.01.2009 в 15:17)
 

Trianon верно сделал замечание. Понятие "правильно записать в сессию", вероятно, известно лишь Вам. Если Вы не раскрываете смысл понятий, которые сами вводите, то Ваши сообщения вообще не имеют смысла.

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 15:53)   письмо автору
 
   для: BinLaden   (04.01.2009 в 15:46)
 

Хорошо, я учту замечание. Но суть моего ответа сводилась к тому, что этого делать вообще не нужно. И суть до автора дошла. Если бы встал вопрос о том, что это действительно необходимо, тогда стоило бы продолжить, и раскрыть смысл понятий. И пришлось бы раскрывать не только понятия правильной обработки и проверки на соответствие, но так же понятия запросов MySQL, структуры таблиц, принципов работы сессии и вообще всего мироздания.

  Ответить  
 
 автор: Inviseble_Demon   (04.01.2009 в 16:04)   письмо автору
 
   для: Николай2357   (04.01.2009 в 15:53)
 

Ваша ирония в данной концепции дисозеируется с девольвацией имоций относительно данного локального индивидума. Думаю более респектабельно принять поражение )
PS. Я ни на кого не наезжаю!

  Ответить  
 
 автор: Николай2357   (04.01.2009 в 16:16)   письмо автору
 
   для: Inviseble_Demon   (04.01.2009 в 16:04)
 

Ни малейшего намёка на иронию. Такое было уже неоднократно. Начиналось всё довольно безобидно, потом приходилось разбирать по полочкам всё, вплоть до взаимодействия клиент-сервер. В данном случае было бы не совсем верным на мой взгляд пускаться в пространные рассуждения по поводу корректности производимой записи, так как данный подход в корне не верный. Я постарался сделать это просто и доходчиво. О каком Вы поражении пишете? Я ни с кем не воевал, что бы побеждать или проигрывать. Замечание учёл, постараюсь максимально извлечь из него пользу... И какого именно локального индивидума Вы имеете ввиду? Если автора, то то лучше спросить у него, девальвировал я его эмоции или вызвал стойкую ассоциацию...

  Ответить  
 
 автор: Trianon   (04.01.2009 в 16:18)   письмо автору
 
   для: Николай2357   (04.01.2009 в 15:17)
 

Николай!
Нет.
Уважаемый мною куда более многих других на этом форуме, Николай!
Успокойтесь пожалуйста.
Я не пытался приписать Вам чужие ошибки.
Собственно, замечание мое относилось к слову "безопасно".
И у меня замечательно прошел праздник. Надеюсь, у Вас тоже.

  Ответить  
 
 автор: newcold   (06.01.2009 в 21:36)   письмо автору
 
   для: Trianon   (04.01.2009 в 15:05)
 

Изменил структуру таблиц теперь одна таблица..

<? 
$query 
"SELECT * FROM users
WHERE name = 
$_SESSION['name']"
    
$cat mysql_query($query); 
    if (!
$cat) exit("Ошибка!"); 
?>

Но вопрос остается, безопасно ли это и как правильно записать в сессию, чтоб было безопасно?

  Ответить  
 
 автор: Trianon   (06.01.2009 в 22:02)   письмо автору
 
   для: newcold   (06.01.2009 в 21:36)
 

безопасным будет имя таблицы в сессии не хранить.
Точнее хранение имени таблицы в переменной сессии, которая напрямую определяется желаниями пользователя, будет являться SQL-уязвимостью.

  Ответить  
 
 автор: newcold   (06.01.2009 в 22:14)   письмо автору
 
   для: Trianon   (06.01.2009 в 22:02)
 

Название попадает в сессию, только после авторизации с вводом пароля..

  Ответить  
 
 автор: newcold   (06.01.2009 в 22:16)   письмо автору
 
   для: newcold   (06.01.2009 в 22:14)
 

Вернее это уже не название таблицы, а элемент условия поиска из таблицы user..

  Ответить  
 
 автор: Николай2357   (06.01.2009 в 22:23)   письмо автору
 
   для: newcold   (06.01.2009 в 21:36)
 

Тут вроде бы про имя таблицы нет уже... Записать можно просто , а обработать при запросе, или сразу записать обработанную переменную. В данном случае строковые переменные, то же name допустим нужно обработать функцией серии mysql_escape_string() а числовые (id к примеру) привести в соответствие функцией intval(). Это поможет избежать инъекций. Есть еще XSS пакости, про них отдельно почитайте.

  Ответить  
 
 автор: Николай2357   (06.01.2009 в 22:37)   письмо автору
 
   для: Николай2357   (06.01.2009 в 22:23)
 

Да, и в апострофы нужно переменную:
<?
"....WHERE name = '".$_SESSION['name']."'....."

  Ответить  
 
 автор: newcold   (06.01.2009 в 22:42)   письмо автору
 
   для: Николай2357   (06.01.2009 в 22:23)
 

Проверяю так:
$_SESSION['name'] = mysql_escape_string($_SESSION['name']);

  Ответить  
 
 автор: Николай2357   (06.01.2009 в 22:44)   письмо автору
 
   для: newcold   (06.01.2009 в 22:42)
 

Не забывайте про магические кавычки. Есть такая кака, не со зла конечно сделана, но портит изрядно крови. Тут на форуме много про это есть.

  Ответить  
 
 автор: newcold   (06.01.2009 в 22:45)   письмо автору
 
   для: newcold   (06.01.2009 в 22:42)
 

A XXS инъекция насколько я знаю проводится через окно ввода данных (если я не ошибаюсь), А в данном случае авторизация проходит с вводом пароля, да и при авторизации там стоит защита..

  Ответить  
 
 автор: newcold   (06.01.2009 в 22:49)   письмо автору
 
   для: newcold   (06.01.2009 в 22:45)
 

Спасибо, об этом тоже позаботился.

  Ответить  
 
 автор: Николай2357   (06.01.2009 в 22:58)   письмо автору
 
   для: newcold   (06.01.2009 в 22:45)
 

>A XXS инъекция насколько я знаю проводится через окно ввода данных
Не только. Вот попробуйте вместо имени юзера ввести вот это:
<iframe width='400' height='400' src='http://www.ruporno.org/'></iframe>
Если всё везде правильно обработано, будет такое имя. А если нет..

  Ответить  
 
 автор: BinLaden   (06.01.2009 в 22:53)   письмо автору
 
   для: newcold   (06.01.2009 в 21:36)
 

Храните идентификатор пользователя (id). По нему и стоит выбирать что-то.

А прежде изучите как оформляются строки в SQL-запросах. Всё спец. символы экранируются и после строка берётся в кавычки/апострофы.

  Ответить  
 
 автор: newcold   (06.01.2009 в 22:58)   письмо автору
 
   для: BinLaden   (06.01.2009 в 22:53)
 

Спасибо, я знаю. Просто наспех писал..

  Ответить  
 
 автор: newcold   (06.01.2009 в 23:13)   письмо автору
 
   для: newcold   (06.01.2009 в 22:58)
 

Пользователь заходит на сайт, авторизовывается и переходит на
www.domen.ru/user/user.php?=1

больше ничего не заполняет.

При авторизации использую пример из книги PHP практика создания web сайтов, так что там надежно..

  Ответить  
 
 автор: BinLaden   (06.01.2009 в 23:19)   письмо автору
 
   для: newcold   (06.01.2009 в 23:13)
 

> При авторизации использую пример из книги PHP практика создания web сайтов, так что там надежно
Ой ли. Вполне может быть и нет.

  Ответить  
 
 автор: newcold   (06.01.2009 в 23:33)   письмо автору
 
   для: BinLaden   (06.01.2009 в 23:19)
 

Может и нет, но создатели этого сайта утверждают что их код надежный..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования