[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление текста после двойных кавычек
IamSmorodin
Получаю данные методом POST. Допустим, вводим -> log"in
Проверяю полученные данные:

if (empty($_POST['login']))
{
$is_error = 1;
$er_login_e = 'Вы не ввели логин.';
}
else
{
$user_login = trim($_POST['login']);
$user_login = htmlspecialchars($user_login);

if (strlen($user_login)<=5)
{
$is_error = 1;
$er_login_l = 'Логин не может быть менее шести символов.';
}
if(!preg_match("/^[a-zA-Z0-9]+$/", $user_login))
{
$is_error = 1;
$error_login = 'Логин может содержать только латинские буквы и числа.';
}
}


Данные не удовлетворяют нашим условиям и $is_error = 1. При таком раскладе, вновь выводится поле для ввода логина.

<input style="width:500px; height:25px; border: solid 1px RGB(208,215,226);
font-family:Verdana,Arial; font-size:15px;
background:RGB(250,250,250);"
type="text" maxlength="20"
name="login" value="<?php echo stripslashes($_POST['login']); ?>" \>


Вот тут самое интересное. В поле логина остается значение log, все после двойной кавычки удаляется. dry.gif



Спустя 27 минут, 16 секунд (26.08.2010 - 09:45) Romms написал(а):
IamSmorodin, всё просто...
введи вместо логина:
log" onload="alert('XSS!!!');"


Цитата
<?php echo stripslashes($_POST['login']); ?>

убери функцию stripslashes()

Спустя 12 минут, 55 секунд (26.08.2010 - 09:58) IamSmorodin написал(а):
Цитата (Romms @ 26.08.2010 - 09:45)
IamSmorodin, всё просто...
введи вместо логина:
log" onload="alert('XSS!!!');"

У меня ограничение на количество символов. Не помещается.
А как мне убрать экранирование кавыяек, если убрать stripslashes?

P.S. Вот ТУТ можно поэксперементировать


Спустя 12 минут, 29 секунд (26.08.2010 - 10:10) Romms написал(а):
Цитата
У меня ограничение на количество символов. Не помещается.

ну тогда
" onclick="alert(1)

*то что у вас стоит maxlength="20" легко обойти!!! Даже простым нажатиям клавиш Ctrl+U в Опере(только за эту стандартную фичу уважаю Оперу...)))
и тогда можно вставить, и такое, и даже круче)
" onclick="alert(document.cookie)

Цитата
А как мне убрать экранирование кавыяек, если убрать stripslashes?

А зачем вам их убирать?!!

Спустя 6 минут, 34 секунды (26.08.2010 - 10:17) IamSmorodin написал(а):
Цитата
То что у вас стоит  maxlength="20" легко обойти!!! Даже простым нажатиям клавиш Ctrl+U в Опере(только за эту стандартную фичу уважаю Оперу...)))
и тогда можно вставить, и такое, и даже круче)


Тогда я обрежу все, что стоит за 20-м символом. laugh.gif

Цитата
А зачем вам их убирать?!!


Просто, если ввести login' -> то в поле появится login\'

Спустя 24 минуты, 42 секунды (26.08.2010 - 10:42) Romms написал(а):
Вот эта строка
	$user_login = htmlspecialchars($user_login);

делает так:
Цитата
\n - &nbsp;
" - &quote;
& - &amp;


Понимаш?
Цитата
Тогда я обрежу все, что стоит за 20-м символом. laugh.gif

тогда я впихну тот самый код только в 20символов laugh.gif ,обрезка - это не метод!

Почитай http://php.net/manual/en/function.htmlspecialchars.php

Спустя 2 минуты, 30 секунд (26.08.2010 - 10:44) IamSmorodin написал(а):
Romms
Понял smile.gif Спасибо за литературу, почитаю...

Я так понял мне хватит регулярного выражения, чтобы проверить правильность ввода, так?

И все-так отчего исчезает все после двойных кавычек? dry.gif

Спустя 10 минут, 42 секунды (26.08.2010 - 10:55) Romms написал(а):
Цитата
И все-так отчего исчезает все после двойных кавычек? dry.gif

Блин... да потому что ты закрываишь этой лапкой параметр ВАЛУЕ!!! Посмотри исходный код, там будет всё что ты вписал!! только оно уже не значения поля а почти что параметры тега!

если ты вписал log" onclick="alert(1)
то в исходном коде будет написано
Цитата
<input style="width:500px; height:25px; border: solid 1px RGB(208,215,226);
        font-family:Verdana,Arial; font-size:15px; background:RGB(250,250,250);" type="text" maxlength="20" name="login" value="log" onclick="alert(1)" \>

Спустя 6 минут, 50 секунд (26.08.2010 - 11:02) Romms написал(а):
Цитата
Я так понял мне хватит регулярного выражения, чтобы проверить правильность ввода, так?

Для проверки, да(ну кроме проверки длины)

Но не забывай экранировать все спец символы MySQL функцией mysql_real_escape_string() и при выводе из базы "прогонять" через htmlspecialchars()

Спустя 40 минут, 3 секунды (26.08.2010 - 11:42) IamSmorodin написал(а):
Цитата (Romms @ 26.08.2010 - 11:02)
Цитата
Я так понял мне хватит регулярного выражения, чтобы проверить правильность ввода, так?

Для проверки, да(ну кроме проверки длины)

Но не забывай экранировать все спец символы MySQL функцией mysql_real_escape_string() и при выводе из базы "прогонять" через htmlspecialchars()

Понял наконец-то. То, что я в value хочу подставить превращается в теги biggrin.gif

При записи базы экранирую. Пока еще ничего не вывожу smile.gif То есть, если я буду проверять длину, как у себя в коде, то мне не страшны твои напасти с подстановкой кода? tongue.gif

Спустя 52 минуты, 4 секунды (26.08.2010 - 12:34) Romms написал(а):
Цитата
То есть, если я буду проверять длину, как у себя в коде, то мне не страшны твои напасти с подстановкой кода?

Риск уменшается, но самые хитрые хацкеры и в 20символов впихнуть вредоносный код!
По этому и пользуйся htmlspecialchars() при выводе данных с таблицы

Спустя 19 минут, 36 секунд (26.08.2010 - 12:54) DedMorozzz написал(а):
Ненадо писать ХСС атака после кавычек. Большая часть буржуйско-вражеских имён идут с кавычкой. И на укр. Моё отчество с кавычкой(апострофом) пишется.
Юзай ХТМЛСПЕШ.. и собсно всё.

Спустя 8 минут, 38 секунд (26.08.2010 - 13:02) IamSmorodin написал(а):
А как мне все это дело нормально передать в value, когда я подставляю эти значения в форму ввода... а то бьюсь, а ничего sad.gif

Спустя 3 минуты, 1 секунда (26.08.2010 - 13:05) DedMorozzz написал(а):
Да господи, выводи через htmlspesialcharts. И не будут срабатывать. Все эти "хаки" расчитаны на то, что код будет работать. А ты его обезапасивай. Передавая инструкцию, что это не спец символы, а просто набор букавок.


_____________
Мой Twitter
Подписывайтесь :)
Быстрый ответ:

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