Перейти к контенту

Вставка ника с кавычкой


Рекомендуемые сообщения

Всем доброго дня!

 

Что-то я совсем запутался. У меня на форуме есть вставка ника в форму быстрого ответа, всегда она работала. Когда обнаружил, что в 6ом ие форум весь передёргивает, если в нике пользователя присутствует символ равенства (если ничего не путаю), поправил ссылочку - всё ок.

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

 

Изначально было так:

$poster['name']=str_replace(" ", " ", $poster['name']);
$poster['name']="<a href=\"java script:ins('{$poster['name']}')\">{$poster['name']}</a>";

 

Пробовал добавлять :

$poster['name']=str_replace("'", "'", $poster['name']);

 

Пробовал красиво писать:

$poster['name']="<a href=\"java script:ins('".str_replace( array(" ", "'"), array(" ", "'"), $poster['name'] )."')\">{$poster['name']}</a>";

 

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

<a href="java script:ins('nick'nick')">

^^ тоже не работает, т.к. кавычка мешается.

 

Помогите, пожалуйста ;)

 

Уххх... То, что я пробовал добавлять и как выводится - это & #39; - только без пробела.. а то форум скушал :D

Ссылка на комментарий
Поделиться на других сайтах

Я их удаляю при регистрации.

Это избавляет от всех проблем в т.ч. проблем безопасности.

 

Что касается твоей ситуации,

Вот это:

$poster['name']="<a href=\"java script:ins('".str_replace( array(" ", "'"), array("& nbsp;", " 39;"), $poster['name'] )."')\">{$poster['name']}</a>";

по идее должно работать.

выводит ник'ник

да, выводить так оно и должно и работать должно.

Ссылка на комментарий
Поделиться на других сайтах

Я их удаляю при регистрации.

Тогда уж лучше запретить такие символы, а не удалять при регистрации.

 

Кстати какие ещё символы лучше запретить?

Мне например кажутся подозрительными @ " и '. Что ещё?

Собака потому что её у меня парсит мод в картинку=), а оба вида кавычек по причине указанной выше.

Глючит в php, когда что-то делается с переменной ника юзера.

Ссылка на комментарий
Поделиться на других сайтах

Тогда уж лучше запретить такие символы, а не удалять при регистрации.

нифига не лучше. Доставлять лишнюю головную боль?

Кстати какие ещё символы лучше запретить?

Надо понимать почему их запрещать.

Вот имеем выражение:

\"java script:ins('{$poster['name']}')\"

Если мы будем пытаться сделать XSS аттаку (а нам доступен для изменения $poster['name']), то чтобы выйти за пределы тега, нам придётся встраивать ' и в IE иногда прокатывает `

Соответственно больше ничего не надо запрещать.

Можно ещё "

Ссылка на комментарий
Поделиться на других сайтах

[ОФФТОП]

нифига не лучше. Доставлять лишнюю головную боль?
Я их удаляю при регистрации

Зарегался у тебя на форуме под ником "'""

пасс 123123

Приветсвовали меня уже под именем """

Каким образом юзер должен будет догадаться что его логин станет таким извращённым?

и почему не "'"" тогда?

 

Надо понимать почему их запрещать

Я то понимаю. Но это только мои проблемы. Врят-ли ещё у кого в коде встречается

<select name='UserName'>
<option value='Ник1'>ник1</option>
<option value='Ник2'>ник2</option>
</select>

и потом

$DB->query("SELECT * FROM ibf_members WHERE name='{$ibforums->input['UserName']}'");

Имя передаётся из менюшки формы ответа.

Какой-нибудь SELECT * FROM ibf_members WHERE name='Эль'Гринго'" выдаст ошибку.

Вывод - нефиг делать вобще такие запросы.

[/ОФФТОП]

Ссылка на комментарий
Поделиться на других сайтах

Какой-нибудь SELECT * FROM ibf_members WHERE name='Эль'Гринго'" выдаст ошибку.

А такого запроса не будет.

Только если ты его сам сделаешь. Назло себе :D

 

 

и почему не "'"" тогда?

ты думаешь я понимаю чего тут у тебя:

"'""
?
Ссылка на комментарий
Поделиться на других сайтах

А такого запроса не будет.
Только если ты его сам сделаешь.

вот же сделал :D Буду править.

 

ты думаешь я понимаю чего тут у тебя:
8)

вот тоже самое с пробелами.

" ' " "

Это вобще не так важно. Я не понял что именно удаляется при регистрации и чем такое удаление без уведомления будет лучше запрета на использование.

Ссылка на комментарий
Поделиться на других сайтах

вот же сделал

если у тебя такой запрос, то знай что у тебя в форуме sql injection

 

 

 

Я не понял что именно удаляется при регистрации

Удаляется апостроф.

Поэтому и получается 3 квота.

Ссылка на комментарий
Поделиться на других сайтах

а я тут покапал нуленый 2.2.1,там в настройках безопасности есть "разрешенные для регистрации символы"

вот это была-бы тема, если перенести на 2.1.х

Ссылка на комментарий
Поделиться на других сайтах

если у тебя такой запрос, то знай что у тебя в форуме sql injection

Ясно :D Исправил.

Ссылка на комментарий
Поделиться на других сайтах

Song

Попробовал твой вариант - не работает, при клике на нике ничего не происходит ;)

А раньше точно работало.

 

Кстати, что с твоим кодом, что с

$poster['name']="<a href=\"java script:ins('{$poster['name']}')\">{$poster['name']}</a>";

 

На выходе получаю

<a href="java script:ins('nick 39;nick')">nick 39;nick</a>

 

:D

Ссылка на комментарий
Поделиться на других сайтах

Song,

/сессия. экзамены. время. хорошо что мой форум хацкерам малопригоден и наврятли кто про такой глюк знал =)/ это в моде мультиаккантов.

Теперь там не $DB->query("SELECT * FROM ibf_members WHERE name='имя аккаунта'");

а вот так

$DB->query("SELECT * FROM ibf_members WHERE id='ай-ди'");

 

ай-ди передаётся из формы ответа. Сейчас ещё проверку нормальную добавлю чтобы ничего кроме дозволенного id (числа) нельзя было передать подделав запрос и видимо будет всё ok...

Ссылка на комментарий
Поделиться на других сайтах

можно и имя.

Только надо применять addslashes() чтобы вредные элементы засейфить.

Ссылка на комментарий
Поделиться на других сайтах

Arhar

Нет, ведь {$poster['name']} заменяется на nick'nick (ну или на nick 39;nick).

Проблема в том, что при выводе nick 39;nick и клике на нём - ничего не происходит :D

 

Подскажите, как всё-таки решить эту проблему?

Ссылка на комментарий
Поделиться на других сайтах

Song

Извини, не понимаю, что дебажить? И как?

Я же показал свой код и результат, который выводится.

 

Arhar

Мы вернулись к самому началу.

Так сделать не получается: если оставить в нике одинарную кавычку, то она закрывает раньше времени, а 39; при клике почему-то не вставляется...

 

Я тут ещё подумал...

 

А что если:

$poster['name']=str_replace(" ", "& nbsp;", $poster['name']);
$name=str_replace(" 39;", "& amp;# 39;", $poster['name']);
$poster['name']="<a href=\"java script:ins('$name')\">{$poster['name']}</a>";

 

Или даже

$poster['name']=str_replace(" ", " ", $poster['name']);
$name=htmlentities($poster['name']);
$poster['name']="<a href=\"java script:ins('$name')\">{$poster['name']}</a>";

 

А на яве сделать вот так:

function ins(name){
if (name != "") {
	name = name.replace(/ 39;/g,"'");
	paste("[b]"+name+"[/b]"+"\n",1);
}
}

 

Как вам такое решение? У меня всё прекрасно заработало :D

 

Решил добавить пояснение.

Суть в том, что ник у меня уже в БД с 39;

но при клике на таком нике - он не добавляется в форму быстрого ответа, а вот при клике на & amp;# 39; - всё отлично срабатывает.

Поэтому меняю первую конструкцию на вторую и всё.

 

Ява уже переделывает "обратно" просто для красивого отображения в формочке.

 

И ещё добавлю, что лучше использовать не htmlentities, а обычную замену из первого случая - иначе русскоязычные ники "ломаются"

Ссылка на комментарий
Поделиться на других сайтах

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

дебажить - это проверять значение переменных на тех или иных этапах выполнения кода или ветвлениях. Делается например через echo.

Таким образом мы можем узнать какой реплейс виновен в неправильной замене ковычки.

Ссылка на комментарий
Поделиться на других сайтах

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.