j0k3r Опубликовано 10 Января 2007 Жалоба Поделиться Опубликовано 10 Января 2007 Всем доброго дня! Что-то я совсем запутался. У меня на форуме есть вставка ника в форму быстрого ответа, всегда она работала. Когда обнаружил, что в 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; - только без пробела.. а то форум скушал Ссылка на комментарий Поделиться на других сайтах Прочее
xRay Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 возьми вствляемый ник не в одниарные а в двойные кавычки Ссылка на комментарий Поделиться на других сайтах Прочее
j0k3r Опубликовано 11 Января 2007 Автор Жалоба Поделиться Опубликовано 11 Января 2007 И тогда получится<a href="java script:ins("nick'nick")">и href закроется после открывающей скобки Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 Я их удаляю при регистрации.Это избавляет от всех проблем в т.ч. проблем безопасности. Что касается твоей ситуации,Вот это:$poster['name']="<a href=\"java script:ins('".str_replace( array(" ", "'"), array("& nbsp;", " 39;"), $poster['name'] )."')\">{$poster['name']}</a>";по идее должно работать.выводит ник'никда, выводить так оно и должно и работать должно. Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 Я их удаляю при регистрации.Тогда уж лучше запретить такие символы, а не удалять при регистрации. Кстати какие ещё символы лучше запретить?Мне например кажутся подозрительными @ " и '. Что ещё?Собака потому что её у меня парсит мод в картинку=), а оба вида кавычек по причине указанной выше.Глючит в php, когда что-то делается с переменной ника юзера. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 Тогда уж лучше запретить такие символы, а не удалять при регистрации.нифига не лучше. Доставлять лишнюю головную боль?Кстати какие ещё символы лучше запретить?Надо понимать почему их запрещать.Вот имеем выражение:\"java script:ins('{$poster['name']}')\"Если мы будем пытаться сделать XSS аттаку (а нам доступен для изменения $poster['name']), то чтобы выйти за пределы тега, нам придётся встраивать ' и в IE иногда прокатывает `Соответственно больше ничего не надо запрещать.Можно ещё " Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 [ОФФТОП]нифига не лучше. Доставлять лишнюю головную боль?Я их удаляю при регистрацииЗарегался у тебя на форуме под ником "'""пасс 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='Эль'Гринго'" выдаст ошибку. Вывод - нефиг делать вобще такие запросы.[/ОФФТОП] Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 Какой-нибудь SELECT * FROM ibf_members WHERE name='Эль'Гринго'" выдаст ошибку.А такого запроса не будет.Только если ты его сам сделаешь. Назло себе и почему не "'"" тогда?ты думаешь я понимаю чего тут у тебя:"'""? Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 А такого запроса не будет. Только если ты его сам сделаешь. вот же сделал Буду править. ты думаешь я понимаю чего тут у тебя: 8) вот тоже самое с пробелами." ' " "Это вобще не так важно. Я не понял что именно удаляется при регистрации и чем такое удаление без уведомления будет лучше запрета на использование. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 вот же сделалесли у тебя такой запрос, то знай что у тебя в форуме sql injection Я не понял что именно удаляется при регистрацииУдаляется апостроф.Поэтому и получается 3 квота. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 а я тут покапал нуленый 2.2.1,там в настройках безопасности есть "разрешенные для регистрации символы"вот это была-бы тема, если перенести на 2.1.х Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 11 Января 2007 Жалоба Поделиться Опубликовано 11 Января 2007 если у тебя такой запрос, то знай что у тебя в форуме sql injectionЯсно Исправил. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 12 Января 2007 Жалоба Поделиться Опубликовано 12 Января 2007 Как ты исправил? Ссылка на комментарий Поделиться на других сайтах Прочее
j0k3r Опубликовано 13 Января 2007 Автор Жалоба Поделиться Опубликовано 13 Января 2007 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> Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 13 Января 2007 Жалоба Поделиться Опубликовано 13 Января 2007 ну потому что кавычка ins('закрывается здесь:ins('{$poster[' Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 13 Января 2007 Жалоба Поделиться Опубликовано 13 Января 2007 Song,/сессия. экзамены. время. хорошо что мой форум хацкерам малопригоден и наврятли кто про такой глюк знал =)/ это в моде мультиаккантов.Теперь там не $DB->query("SELECT * FROM ibf_members WHERE name='имя аккаунта'");а вот так$DB->query("SELECT * FROM ibf_members WHERE id='ай-ди'"); ай-ди передаётся из формы ответа. Сейчас ещё проверку нормальную добавлю чтобы ничего кроме дозволенного id (числа) нельзя было передать подделав запрос и видимо будет всё ok... Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Января 2007 Жалоба Поделиться Опубликовано 15 Января 2007 можно и имя.Только надо применять addslashes() чтобы вредные элементы засейфить. Ссылка на комментарий Поделиться на других сайтах Прочее
j0k3r Опубликовано 15 Января 2007 Автор Жалоба Поделиться Опубликовано 15 Января 2007 ArharНет, ведь {$poster['name']} заменяется на nick'nick (ну или на nick 39;nick).Проблема в том, что при выводе nick 39;nick и клике на нём - ничего не происходит Подскажите, как всё-таки решить эту проблему? Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Января 2007 Жалоба Поделиться Опубликовано 15 Января 2007 Продебажь.Телепатически трудно понять чего у тебя там. Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 15 Января 2007 Жалоба Поделиться Опубликовано 15 Января 2007 явно что-то где-то закрывается не так...а можно сделать$poster['name']="<a href=\"java script:ins('{$poster[\'name\']}')\">{$poster['name']}</a>";?? Ссылка на комментарий Поделиться на других сайтах Прочее
j0k3r Опубликовано 15 Января 2007 Автор Жалоба Поделиться Опубликовано 15 Января 2007 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); } } Как вам такое решение? У меня всё прекрасно заработало Решил добавить пояснение.Суть в том, что ник у меня уже в БД с 39;но при клике на таком нике - он не добавляется в форму быстрого ответа, а вот при клике на & amp;# 39; - всё отлично срабатывает.Поэтому меняю первую конструкцию на вторую и всё. Ява уже переделывает "обратно" просто для красивого отображения в формочке. И ещё добавлю, что лучше использовать не htmlentities, а обычную замену из первого случая - иначе русскоязычные ники "ломаются" Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 16 Января 2007 Жалоба Поделиться Опубликовано 16 Января 2007 Извини, не понимаю, что дебажить? И как?Я же показал свой код и результат, который выводится.дебажить - это проверять значение переменных на тех или иных этапах выполнения кода или ветвлениях. Делается например через echo.Таким образом мы можем узнать какой реплейс виновен в неправильной замене ковычки. Ссылка на комментарий Поделиться на других сайтах Прочее
j0k3r Опубликовано 16 Января 2007 Автор Жалоба Поделиться Опубликовано 16 Января 2007 М.. Да вроде всё верно выводится - как и есть в базе. Просто почему-то не кликается. Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения