Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: SQL, XSS, помогите защититься
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Всем здрасте. Опишу сразу в кратце суть проблемы:
Пишу гостевую книгу, без регистрации и прочего, любой пользователь может оставить запись в гостевой книге на сайте, ввести может только сообщение, ну и каптча для проверки.
Вот база сообщений:
if(isset($_POST["user_message"]) && isset($_SESSION["rand_code"])) //(если короч нажата кнопка и есть сессия от каптчи)
{
$_SESSION['name'] = "$user_message"; // для формы, чтобы текст сохранялся
if ($user_message==""){echo "<center>Ошибка! Заполните поле Сообщение!<br> <a href=".$_url.">Вернуться</a></center>";?></div></div></div ><?include('footer.php');exit;}
if($_POST['captcha']!=$_SESSION['rand_code']){echo"<center>Ошибка! Не верный результат!<br> <a href=".$_url.">Вернуться</a></center>";?></div></div></div><?include('footer.php');exit;}
if(strlen($user_message)>2000){echo"<center>Ошибка! Текст не должен превышать 2000 символов!<br> <a href=".$_url.">Вернуться</a></center>";?></div></div></div><?include('footer.php');exit;}
mysql_query("insert into `t_messages` (`message`,`data`,`ip`) VALUES ('$text','$date_time','$sIp')");unset($_SESSION['name']);// cняли сессию с формы, удалили текст если юзер неправильно ввел каптчу чтобы заного не вводить
echo"<center>Ваше сообщение отправлено в обработку!</center>";
Теперь, имея все это, нужно еще написать снизу навигацию, что то типа переход по страницам <1> <2> <3> <вперед> так же эти ссылки вроде как нужно защищать mysql_real_escape_string`ом ? Не знаю как это реализовать вообще..
Вот мой скрипт, обычная гостевая с одним полем - "введите Ваше сообщение", вот мое понимание о защите.. Уважаемые знатоки, пожалуйста, помогите разобраться, что я еще не сделал тут, что сделал не так, а что сделал вообще криво аж на что смотреть страшно...
Как защищать в МОЕМ случае данные и обрабатывать их до ввода в БД?
Как выводить их безопасно ИЗ БД, даже если я руками туда пропишу слеши, хтмл теги, кавычки, или ява скрипт ну и в этом духе..
В общем, как обезопасить сей скрипт? И кому не лень, помогите с навигацией из БД чтобы выводились последние, "свежие" мессаги из БД, чтобы можно было переменной регулировать коилчество выводимых строк на одной странице.
И есчё, как при такой защите сделать так, чтобы в БД можно было отправить допустим кавычку? Слеши не пускаем, а если юзер захочет написать (к примеру) Жанна Д'Арк, чтобы так оно и отобразилось в гостевой? Каким макаром экранировать чтобы в БД сидело безопасно, а выводилось как надо..
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
по первому ссылю понятно, по xss читал и везде по-разному пишут, я хочу разобраться именно со своим случаем. Вторая ссыль - не понятно что там такое вообще. Так же навигацию сделать не могу.
Вопрос по-прежнему актуален!
Мелкий
Отправлено: 21 Сентября, 2014 - 19:07:41
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
nomak_suntown пишет:
именно со своим случаем.
Нет никакого своего случая.
htmlspecialchars на весь вывод в HTML
prepared statements на всё, что передаётся извне в базу.
Всё.
----- PostgreSQL DBA
nomak_suntown
Отправлено: 23 Сентября, 2014 - 07:56:15
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Что фильтровать перед выводом, а что перед вводом? Что куда применить
Мелкий
Отправлено: 23 Сентября, 2014 - 10:03:34
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Мелкий пишет:
htmlspecialchars на весь вывод в HTML
prepared statements на всё, что передаётся извне в базу.
Что здесь непонятно?
----- PostgreSQL DBA
esterio
Отправлено: 23 Сентября, 2014 - 13:39:19
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Всем спасибо за помощь!!
Только вот вопрос по навигации, там методом GET передаем ссылки на страницы 1.2.3....и тд, их нужно как то обрабатывать?
RickMan
Отправлено: 24 Сентября, 2014 - 09:26:00
Участник
Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012
Помог: 30 раз(а)
Что с этими ссылками происходит после передачи? Они отображаются где-то или как?
nomak_suntown
Отправлено: 24 Сентября, 2014 - 09:26:20
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Народ еще такой вопрос, Дата записывается в таблицу date с типом varchar(50) и записывается функцией $date_time=date("d.m.Y H:i:s"); и в таблице имеет вид 23.09.2014 22:03:08
Правильно ли я делаю? Помню в прошлый раз у меня время было толи юникс код не помню как делается, там просто цифры..
И Как мне вывести не всю такую дату с временем, ( <?=$data?> ) а только лишь дату, без времени? Как ее вытянуть из бд?
где-то прочитал что можо $date = date(m.d.y, $date) как то так, но не работает.. (Добавление)
Да на странице, обыкновенная навигация, думаю как лучше ее сделать (смотрю на другие варианты) но нигде ни в запросах ни при выводе она не фильтруется.
Просто на странице, к примеру, выводится последние 10 записей из БД, и ниже навигация по страницам 1,2,3...далее (Добавление)
echo date('Y-m-d',$data["date"]); выводит 1970 год...видимо не правильно в Б храню дату и время, записываю тупо как текст...
Sail
Отправлено: 24 Сентября, 2014 - 09:59:29
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
nomak_suntown пишет:
Дата записывается в таблицу date с типом varchar(50) и записывается функцией $date_time=date("d.m.Y H:i:s"); и в таблице имеет вид 23.09.2014 22:03:08
Правильно ли я делаю?
При условии использования более правильного формата становятся доступны Функции даты и времени.
Впрочем, это уже тема для другого обсуждения... да и на форуме неоднократно поднималась.
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Люди добрые, написал каптчу, простое сложение двух чисел, решил случайно выводить в картинку либо мт_ранд(1,10) + мт_ранд(1,10) либо мт_ранд(1,10) - мт_ранд(1,10)
Вроде все сделал, но не работает.. Вот код
Не понимаю, если в imagettftext записать $number_1+$number_2 то все работает, а если это внести в переменную $a и записать в imagettftext эту переменную, то ничего не работает.. Так же и с сессией, нужно в сессию записывать само выражение +. А я хочу либо + либо - и те числа которые мне надо заранее подготовить.
Как правильно вписать в строку? Вопрос то простой блин, разобраться не могу((
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.