|
|
|
| Человек авторизуется и попадает на страницу с загруженными данными из своей собственной таблицы.
Пример:
<?
$query = "SELECT * FROM $_SESSION['name']";
$cat = mysql_query($query);
if (!$cat) exit("Ошибка!");
?>
|
| |
|
|
|
|
|
|
|
для: newcold
(03.01.2009 в 22:34)
| | Ой ёй... Безопасно то оно безопасно, если в сессию правильно записать, только не слишком ли расточительно таблицу на каждого юзера? Как говориться съесть то он съесть... только кто ж ему дасть? | |
|
|
|
|
|
|
|
для: Николай2357
(03.01.2009 в 23:17)
| | Что посоветуете? | |
|
|
|
|
|
|
|
для: newcold
(03.01.2009 в 23:20)
| | В зависимости от того, какие цели Вы преследуете. Обычно достаточно одной учетной записи, то есть строки в таблице, в которую записать имя юзера и все его данные. | |
|
|
|
|
|
|
|
для: Николай2357
(03.01.2009 в 23:17)
| | Безопасно, говорите?
А потом придет bad boy и начнет придумывать при регистрации имя вроде
users union select u.password as name, u.* from users u
|
никакая часть текста sql-кода не должна в него попадать без проверки на соответствие формату и области допустимых значений. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 15:05)
| | Уважаемый господин Тrianon. У Вас плохо прошел праздник, или я лично чем то Вам не угодил? Вы в который раз пытаетесь приписать мне ошибки, которых я не совершал. Прочитайте внимательно мой ответ:
>если в сессию правильно записать.
Как правильно записать, я не стал расписывать ввиду того, что это не имеет никакого смысла в данном контексте. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 15:17)
| | Trianon верно сделал замечание. Понятие "правильно записать в сессию", вероятно, известно лишь Вам. Если Вы не раскрываете смысл понятий, которые сами вводите, то Ваши сообщения вообще не имеют смысла. | |
|
|
|
|
|
|
|
для: BinLaden
(04.01.2009 в 15:46)
| | Хорошо, я учту замечание. Но суть моего ответа сводилась к тому, что этого делать вообще не нужно. И суть до автора дошла. Если бы встал вопрос о том, что это действительно необходимо, тогда стоило бы продолжить, и раскрыть смысл понятий. И пришлось бы раскрывать не только понятия правильной обработки и проверки на соответствие, но так же понятия запросов MySQL, структуры таблиц, принципов работы сессии и вообще всего мироздания. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 15:53)
| | Ваша ирония в данной концепции дисозеируется с девольвацией имоций относительно данного локального индивидума. Думаю более респектабельно принять поражение )
PS. Я ни на кого не наезжаю! | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(04.01.2009 в 16:04)
| | Ни малейшего намёка на иронию. Такое было уже неоднократно. Начиналось всё довольно безобидно, потом приходилось разбирать по полочкам всё, вплоть до взаимодействия клиент-сервер. В данном случае было бы не совсем верным на мой взгляд пускаться в пространные рассуждения по поводу корректности производимой записи, так как данный подход в корне не верный. Я постарался сделать это просто и доходчиво. О каком Вы поражении пишете? Я ни с кем не воевал, что бы побеждать или проигрывать. Замечание учёл, постараюсь максимально извлечь из него пользу... И какого именно локального индивидума Вы имеете ввиду? Если автора, то то лучше спросить у него, девальвировал я его эмоции или вызвал стойкую ассоциацию... | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2009 в 15:17)
| | Николай!
Нет.
Уважаемый мною куда более многих других на этом форуме, Николай!
Успокойтесь пожалуйста.
Я не пытался приписать Вам чужие ошибки.
Собственно, замечание мое относилось к слову "безопасно".
И у меня замечательно прошел праздник. Надеюсь, у Вас тоже. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2009 в 15:05)
| | Изменил структуру таблиц теперь одна таблица..
<?
$query = "SELECT * FROM users
WHERE name = $_SESSION['name']";
$cat = mysql_query($query);
if (!$cat) exit("Ошибка!");
?>
|
Но вопрос остается, безопасно ли это и как правильно записать в сессию, чтоб было безопасно? | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 21:36)
| | безопасным будет имя таблицы в сессии не хранить.
Точнее хранение имени таблицы в переменной сессии, которая напрямую определяется желаниями пользователя, будет являться SQL-уязвимостью. | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2009 в 22:02)
| | Название попадает в сессию, только после авторизации с вводом пароля.. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 22:14)
| | Вернее это уже не название таблицы, а элемент условия поиска из таблицы user.. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 21:36)
| | Тут вроде бы про имя таблицы нет уже... Записать можно просто , а обработать при запросе, или сразу записать обработанную переменную. В данном случае строковые переменные, то же name допустим нужно обработать функцией серии mysql_escape_string() а числовые (id к примеру) привести в соответствие функцией intval(). Это поможет избежать инъекций. Есть еще XSS пакости, про них отдельно почитайте. | |
|
|
|
|
|
|
|
для: Николай2357
(06.01.2009 в 22:23)
| | Да, и в апострофы нужно переменную:
<?
"....WHERE name = '".$_SESSION['name']."'....."
|
| |
|
|
|
|
|
|
|
для: Николай2357
(06.01.2009 в 22:23)
| | Проверяю так:
$_SESSION['name'] = mysql_escape_string($_SESSION['name']);
|
| |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 22:42)
| | Не забывайте про магические кавычки. Есть такая кака, не со зла конечно сделана, но портит изрядно крови. Тут на форуме много про это есть. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 22:42)
| | A XXS инъекция насколько я знаю проводится через окно ввода данных (если я не ошибаюсь), А в данном случае авторизация проходит с вводом пароля, да и при авторизации там стоит защита.. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 22:45)
| | Спасибо, об этом тоже позаботился. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 22:45)
| | >A XXS инъекция насколько я знаю проводится через окно ввода данных
Не только. Вот попробуйте вместо имени юзера ввести вот это:
<iframe width='400' height='400' src='http://www.ruporno.org/'></iframe>
| Если всё везде правильно обработано, будет такое имя. А если нет.. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 21:36)
| | Храните идентификатор пользователя (id). По нему и стоит выбирать что-то.
А прежде изучите как оформляются строки в SQL-запросах. Всё спец. символы экранируются и после строка берётся в кавычки/апострофы. | |
|
|
|
|
|
|
|
для: BinLaden
(06.01.2009 в 22:53)
| | Спасибо, я знаю. Просто наспех писал.. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 22:58)
| | Пользователь заходит на сайт, авторизовывается и переходит на
www.domen.ru/user/user.php?=1
больше ничего не заполняет.
При авторизации использую пример из книги PHP практика создания web сайтов, так что там надежно.. | |
|
|
|
|
|
|
|
для: newcold
(06.01.2009 в 23:13)
| | > При авторизации использую пример из книги PHP практика создания web сайтов, так что там надежно
Ой ли. Вполне может быть и нет. | |
|
|
|
|
|
|
|
для: BinLaden
(06.01.2009 в 23:19)
| | Может и нет, но создатели этого сайта утверждают что их код надежный.. | |
|
|
|