|
|
|
|
|
для: Manwen
(07.04.2011 в 21:23)
| | >Да, точно. Я же базе данных не передаю значения из полей ввода.
> Хотя эта проверка не помешает, мало ли.
Ну, я написал какая пакость может быть от этого "мало ли", и вообще когда составляете запросы к базе лучше в этом запросе и обрабатывать все входящие данные(предварительно почистив от маг. кавычек)
<?
//чистим POST от маг. кавычек если такие включены
//так как ПОСТ чистый, то спокойно можем делать всякие проверки
$sql = "SELECT * FROM table WHERE filed1=".(int)$_POST['integer']."
OR filed2=".mysql_real_escape_string($_POST["string"]);
$query = mysql_query($sql);
//и дальше можем использовать ПОСТы так как они не захламлены экранирующими слешами
|
-и никогда не будет конфликта при сравнении(то что я выше написал)
>А какие замечания?
Несущественные:
mysql_escape_string уже вроде как устарел
Очень много else подряд: для меня привычней, если условие не выполняеться(сравнение логинов вернуло false), то просто формируем отчет об ошибочке и завершаем работу скрипта. И не будет ни одного else и проще логику проследить. Но это мое субъективное мнение | |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 22:32)
| | Думал как лучше :)
Спасибо Игорь Вячеславович за помощь. Буду теперь дальше двигаться. | |
|
|
|
|
|
|
|
для: Manwen
(07.04.2011 в 21:42)
| | А зачем такие сложности? Злоумышленники все-равно до значений внутри сессии добраться не смогут. | |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 19:37)
| | Если я в таблице сделаю еще одно поле, например "code" и при успешной проверке я буду в $_SESSION['id'] загонять хеш поля "code", а в другом фале буду проверять: есть ли этот хеш в $_SESSION['id'].
Это будет глупо или можно прибегнуть даже к такому способу? | |
|
|
|
|
|
|
|
для: tvv123456
(07.04.2011 в 18:29)
| | Да, точно. Я же базе данных не передаю значения из полей ввода. Хотя эта проверка не помешает, мало ли.
А какие замечания? | |
|
|
|
|
|
|
|
для: Manwen
(07.04.2011 в 19:17)
| | Константу нет, но можно использовать переменную. Присвойте ей любое значение, хотя бы тоже true и проверяйте. | |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 17:08)
| | А можно в сессию константу загнать? Например, в этой статье http://www.softtime.ru/info/articlephp.php?id_article=34 используется константа define("IN_ADMIN", TRUE); и она проверяется в каждом файле.
Вот только как бы мне эту проверку "элегантней" реализовать. | |
|
|
|
|
|
|
|
для: Manwen
(07.04.2011 в 15:20)
| | Вот этот блок я все-таки считаю лишним,
<?php
if (!get_magic_quotes_gpc())
{
$_POST['login'] = mysql_escape_string($_POST['login']);
$_POST['passw'] = mysql_escape_string($_POST['passw']);
}
|
так как вы в запросе не используете ни
$_POST['login'] ни $_POST['passw'] , более того если вы храните в базе какой-нибудь не стандартный логин(d'artanyan, допустим) и будете в форме указывать его, то в $_POST['login'] вы получите d\'artanyan, а из базы вытащите d'artanyan, и в итоге долго будете мучаться и думать почему не срабатывает условие
<?
if ($_POST['login'] == mysql_result($usr, 0, 'user'))
|
Думаю это можно считать ошибкой в логике
Есть еще пару замечаний, но они не очень существенные | |
|
|
|
|
|
|
|
для: Manwen
(07.04.2011 в 16:41)
| | Сессия только вам доступна для редактирования - поместите в неё флаг, просто цифру 1. Без авторизации этот флаг не получить и хэш храниться не будет, а то мало ли где выведется случайно. | |
|
|
|
|
|
|
|
для: cheops
(07.04.2011 в 16:22)
| | Хеш в сессии наверно плохая идея, но лучше я ничего пока не придумал, чтобы на другой странице определить авторизован ли админ или нет.
Я пробовал подставлять константу при успешной авторизации, к примеру так: if(!defined("IN_ADMIN")) die; , но другой файл не видит что я авторизовался и прерывает выполнение. | |
|
|
|
|