[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проконсультируйте по безопасности
Xes
Подскажите делаю авторизацию вроди по всем правилам если введенный логин пароль найдены в БД то создаю переменные сесии и перекидываю на рабочею страницу. Далее проверяю опять существование переменных и насколько они правельные.
Глянте пожалуйсто код рабочей страницы правильно ли я понял то что пишут про авторизаию, код ниже.

И сам вопрос я создаю переменную $iduser. Далее у меня некоторые параметры а именно id гостиницы передаются в гет.
http://test1.ru/user/userpanel.php?hotel_edit=157&table=hotels&page=3

Даллее при работе я в mysql запросе спрашиваю: Выбрать данные где id гостиницы равно данным из пост (hotel_edit=157), и обязательно еще чтобы user - создавший эту запись был равен $iduser.
ТОесть если в гет указать другой id то т.к. записи удавлетворяющей этому требованию нет то и ничего показано не будет и пользователь сможет редактировать только свои данные.

Насколько это надежно ни как $iduser нельзя перезаписать? Можно ли переменную сесии както создать? Подменить?

 
<?
require('config.php');
require('module/dbconnect.php');
session_start();
if(!empty($errordb) || empty($_SESSION['iduser']) || empty($_SESSION['pmd5'])){
header('location:userlog.php');
die('Error!');
}
$query = "SELECT * FROM `users` WHERE `iduser`='".intval($_SESSION['iduser'])."' AND `pmd5`='".mysql_real_escape_string($_SESSION['pmd5'])."' LIMIT 1";
$sql = @mysql_query($query);
if(@mysql_num_rows($sql)>0){
$sqlrow = @mysql_fetch_array($sql);
$iduser = $sqlrow['iduser'];
$fiouser = $sqlrow['fio'];
$emailuser = $sqlrow['email'];
if(empty($_SESSION['flagenteruser'])){
$query = "UPDATE `users` SET `dlast`='".date("Y-m-d H:i:s")."' WHERE `iduser`='".$iduser."'";
@mysql_query($query);
}
$_SESSION['flagenteruser'] = true;
}else{
header('location:userlog.php');
die('Error!');
}




Спустя 8 минут, 13 секунд (29.09.2011 - 20:18) alex12060 написал(а):

$sql = @mysql_query($query);



$sqlrow = @mysql_fetch_array($sql);



$iduser = $sqlrow['iduser'];
// ...
$query = "UPDATE `users` SET `dlast`='".date("Y-m-d H:i:s")."' WHERE `iduser`='".$iduser."'";


Плохо, плохо, плохо!!

Спустя 13 минут, 35 секунд (29.09.2011 - 20:32) Xes написал(а):
Третье понятно intval пропустил а что первые 2а? Хотя $iduser = $sqlrow['iduser']; вобщемто это уже данные из БД которые поидеи должны быть точными и без косяков.

Спустя 3 минуты, 57 секунд (29.09.2011 - 20:36) Winston написал(а):
Цитата (Xes @ 29.09.2011 - 20:32)
Третье понятно intval пропустил

Зачем? Достаточно
WHERE `iduser`='".(int)$iduser."'"
А 1 и 2 это заглушки (собаки) - это плохо !

Спустя 6 минут, 42 секунды (29.09.2011 - 20:42) Xes написал(а):
@ это для юзера, уже потом ... малоли че том может я че не учел отсутсвующею колонку например. Чтобы юзер все это не видел.
А рас уж вопрос про заглушки.... Только что возник
error_reporting(0);
Заглушит ошибки $sqlrow = @mysql_fetch_array($sql); чтобы неписать везде сабак?
Я давно, как только начал писать, стал писать собак перед всеми mysql_ походу можно потом все ошибки заглушить error_reporting(0); ?


А что касаемо других вопросов тоесть вроди как если глобаьные переменные отключены то $iduser или в сесии['iduser'] не подменишь? Достаточно что я проверяю то что запись была создана этим юзером?
Цитата

Зачем? Достаточно
WHERE `iduser`='".(int)$iduser."'"


А почему не intval, почему Достаточно вроди intval и (int) одно и тоже.
WHERE `iduser`='".intval($iduser)."'

Спустя 25 минут, 3 секунды (29.09.2011 - 21:07) inpost написал(а):
Xes
Сессия безопасна тем, что её не подменить smile.gif

Спустя 3 минуты, 15 секунд (29.09.2011 - 21:11) Nikitian написал(а):
Цитата (inpost @ 29.09.2011 - 21:07)
Xes
Сессия безопасна тем, что её не подменить smile.gif

Нет ничего кроме времени, чтобы могло препятствовать этому

Спустя 18 минут, 29 секунд (29.09.2011 - 21:29) Winston написал(а):
Цитата (Xes @ 29.09.2011 - 20:42)
А почему не intval, почему Достаточно вроди intval и (int) одно и тоже.

Конечно одно и тоже
Запусти
echo intval('11test');
echo '<br/>';
echo (int)'11test';

Но (int) быстрее отработает

Спустя 7 минут, 6 секунд (29.09.2011 - 21:36) Nikitian написал(а):
Цитата (Winston @ 29.09.2011 - 21:29)
Но (int) быстрее отработает

На ебическую долю секунды, которая не стоит нарушения семантики кода.

Спустя 1 минута, 36 секунд (29.09.2011 - 21:38) Winston написал(а):
Nikitian
biggrin.gif согласен

Спустя 51 минута, 34 секунды (29.09.2011 - 22:29) inpost написал(а):
int в 2.5 раза быстрее intval, тут уже из-за солидности smile.gif

Спустя 20 часов, 15 минут, 47 секунд (30.09.2011 - 18:45) Xes написал(а):
Цитата (Winston @ 29.09.2011 - 17:36)
А 1 и 2 это заглушки (собаки) - это плохо !

error_reporting(0); не отменяет показ ошибок mysql_
есть ли дериктива чтобы отменить показ таких ошибок (например поля не существует и т.д.), когда все уже заливается на сервер, чтобы везде собак не писать?

Спустя 12 минут, 31 секунда (30.09.2011 - 18:58) Winston написал(а):
Чтобы не ставить собак вместо этого
$sql = @mysql_query($query);
Пиши
$sql = mysql_query($query) or die(mysql_error());

Спустя 22 минуты, 44 секунды (30.09.2011 - 19:20) Xes написал(а):
А варианта аналогичного сабакам нет только глобального чтобы не писать перед каждой строчкой @mysql_query($query);

Цитата
$sql = mysql_query($query) or die(mysql_error());

Такой вариант понятен но если выбирать мне больше нарвится сабака, так хотябы дальше сайт прогрузится где возможно. У меня так шаблон каркас сайта в большинстве случаев появится просто содержимого не будет а с die будет белый экран.

Видимо нет глобальной выключалки ошибок mysql ?

Спустя 53 минуты, 23 секунды (30.09.2011 - 20:14) Winston написал(а):
Цитата (Xes @ 30.09.2011 - 19:20)
мне больше нарвится сабака

Это очень дурной тон !

Спустя 34 секунды (30.09.2011 - 20:14) Santehnick написал(а):
в .htaccess написать следующее

php_flag display_errors off

тогда вообще никакие ошибки не будут появляться на экране, но это не выход, грамотный программист должен всегда отслеживать ошибки, которые происходят на его сайте, для этого обычно все ошибки просто пишут в файл, а пользователю ничего не показывают, как будто их нет.

Спустя 1 час, 15 минут, 39 секунд (30.09.2011 - 21:30) Xes написал(а):
Цитата (Santehnick @ 30.09.2011 - 17:14)
в .htaccess написать следующее

php_flag display_errors off

Спасибо!

Спустя 18 минут, 37 секунд (30.09.2011 - 21:49) caballero написал(а):
Цитата
мне больше нарвится сабака


конечно
зачем обрабатывать ошибку если ее можно удавить и сделать вид что все хорошо

Спустя 11 минут, 24 секунды (30.09.2011 - 22:00) Xes написал(а):
Да к причем тут сделать вид. Я же говорю уже о том когда файл на серваке лежит.
Ползователю глубоко всеровно че там у меня запроблемы и ошибки нафига ему видеть код ошибки и причуну произошедщего.
Вот человек мне подсказал как все разом отключить чтобы я не ставил сабак визде, а в одном месте перед заливкой на сервак отключил все ошибки и все.

Спустя 9 минут, 34 секунды (30.09.2011 - 22:10) caballero написал(а):
Цитата
Ползователю глубоко всеровно че там у меня запроблемы и ошибки нафига ему видеть код ошибки и причуну произошедщего.


Так тем более надо выловить ошибку и обработать ее

а что по твоему увидит пользователь на сайте с пустыми данными если к базе коннекта нет?

Спустя 6 минут, 47 секунд (30.09.2011 - 22:16) Xes написал(а):
Причем здесь конект?
Если нет конекто у меня он увидет сообщение что нет подключения к БД. И весь сайт загрузиться, в отличие от случая с die.

А вдругих ситуациях от либо ничего не увидет только каркас сайта либо то собщение которое будет идти после
if(mysql_num_rows($sql)>0){

}else{
ТУТА сообщение если я его предусмотрю.
}

Вобщем может я плохо изъясняюся. Но из того что вы говорите мне я не нахожу больше полезной информации.
Не вижу смысла обробатывать сайт на серваке отлавливать там ошибки и т.д. Я все тестирую на денвере, потом ставлю php_flag display_errors off и заливаю на сайт.
Благо сайт небольшой, если ктото пожалуется что чтото не работает то я без проблем найду касяк где и что я там описался.

Вообщем я чето не доганю что еще вы мне хотите объяснить... вродия я все верно делаю.

Спустя 6 минут, 1 секунда (30.09.2011 - 22:22) Winston написал(а):
Цитата (Xes @ 30.09.2011 - 22:16)
из того что вы говорите мне я не нахожу больше полезной информации

Ну и молодец! Дам тебе совет: Используй собаки везде и всегда, и будешь крут !

Спустя 6 минут, 47 секунд (30.09.2011 - 22:29) neadekvat написал(а):
Цитата (Winston @ 30.09.2011 - 21:14)
Это очень дурной тон !

Дурной тон - везде писать "or die()".
Нужна обертка для функции запроса - вот это хороший тон.

Цитата (caballero @ 30.09.2011 - 23:10)
Так тем более надо выловить ошибку и обработать ее

Цитата (Winston @ 30.09.2011 - 23:22)
Ну и молодец! Дам тебе совет: Используй собаки везде и всегда, и будешь крут !

Не понимаю я, чего накинулись то? Мне кажется, автору уже ответили и он уже решил, как лучше делать. Я понимаю, инерция - она такая, но взрослые ж люди.

Спустя 2 минуты, 28 секунд (30.09.2011 - 22:32) Xes написал(а):
Блляяять, опять двадцать пять! )))
Ладно я понял, что у меня нет таланта донести до людей свои мысли.
вы мне все пытаетесь сказать что не надо использовать @ в 150й раз.
Я пытаюсь сказать вам в ответ, что я их не использую при отладке, они проставлены для файлов на сервакае... на всякий случай ... )))))

Спустя 3 минуты, 49 секунд (30.09.2011 - 22:35) neadekvat написал(а):
Xes, материться - плохо.

Цитата (Xes @ 30.09.2011 - 23:32)
А пытаюсь сказать что я их не использую при отладке

Потом чтоль расставлял? оО Хорошо хоть теперь не будешь.

Спустя 9 минут, 21 секунда (30.09.2011 - 22:45) caballero написал(а):
Цитата
ни проставлены для файлов на сервакае... на всякий случай ...


Об этот тебе и говорят - нельзя такое делать на продакшене


Цитата
Дурной тон - везде писать "or die()".
Нужна обертка для функции запроса - вот это хороший тон.


хороший тон -
получить ошибку
записать в лог или отправить админу по почте
пользователю вывести не die() и не сайт где вместо данных пустые дырки и понимай это как хочешь

а соответствующую страницу с сообщением о временных трудностиях

хотя если сайт отлаженый и на нормальном хостинге такая ситуация маловероятна


Спустя 5 минут, 32 секунды (30.09.2011 - 22:50) neadekvat написал(а):
caballero, что здесь не подходит под описание "обертки"?

Спустя 27 минут, 3 секунды (30.09.2011 - 23:17) caballero написал(а):
Цитата
что здесь не подходит под описание "обертки"?


Отсутствие таковой
где здесь обертка (wrapper)?

здесь обычный if elfe не более того

Спустя 1 час, 34 минуты, 12 секунд (1.10.2011 - 00:52) neadekvat написал(а):
Цитата (caballero @ 1.10.2011 - 00:17)
Отсутствие таковой

Цитата (caballero @ 1.10.2011 - 00:17)
здесь обычный if elfe не более того

И что, на каждый запрос такую хрень мутить? Зачем, если можно засунуть это в обертку?

Спустя 1 час, 41 минута, 13 секунд (1.10.2011 - 02:33) killer8080 написал(а):
Цитата (neadekvat @ 1.10.2011 - 00:52)
И что, на каждый запрос такую хрень мутить? Зачем, если можно засунуть это в обертку?

корректно обрабатывать ошибки можно и безо всяких оберток wink.gif

Спустя 1 час, 40 минут, 41 секунда (1.10.2011 - 04:13) imbalance_hero написал(а):
Xes
Используешь обертку, обертку можно подглядеть на Ирбисе, там неудачный запрос записывается в файл. Далее проверяешь лишь логи, чтобы ошибок нигде и ни у кого нет.
Когда делаешь сайт, у тебя не должно быть ошибок в запросах ВООБЩЕ, а если появляется, отображаться в твоём логе, где ты моментально будешь убирать.
Очень удобно, + к тому же ты четко знаешь, когда кто-то пытается тебя поломать smile.gif

Спустя 16 часов, 18 минут, 40 секунд (1.10.2011 - 20:32) killer8080 написал(а):
По моему лучше ошибки обрабатывать глобально, через ob_start() и set_error_handler(), как это описано у Котерова.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.