Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите продумать все возможности. Нужен совет 
:(
    Опции темы
t77
Дата 5.1.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Доброе время суток.
Нужен совет опытных программистов...
Имеется аппликация с бегущей строкой текста вверхней части.
Пользователь имеет возможность редактировать текст той самой бегущей строки.
Мной было обнаружено, что если ввести что то вроде:
Код

<script>alert('HI')</script>

То выскакивает алерт...
Или если ввести:
Код

<input></input>

То вместо текста появляется текстовое поле...
Короче говоря нельзя допускать, чтобы такое происходило. 
Тоесть, по большому счету я допускаю пользователю вводить только текст.
Теперь, что касается решения данной проблемки...
Думаю с помощью регулярного выражения, тупо удалять все ЧТМЛ теги вместе с их содержимым...
Вопрос 1 - Может, что забыл предусматреть ??
Вопрос2 - Как вообще принято в веб, правильно решать подобные проблемы ??
Заранее благодарю.

PM MAIL   Вверх
Wolf1994
Дата 5.1.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Код

text.replace(/\>/g, "|-");
text.replace(/\</g, "-|");
//вместо -||- лучше использовать HTML коды символов <>

PM MAIL WWW   Вверх
bars80080
Дата 5.1.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



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

это надо решать средствами сервера, на javascript при желании всё можно подделать
PM MAIL WWW   Вверх
brother79
Дата 5.1.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



http://php.net/manual/en/function.strip-tags.php

Там и сама ф-я и куча примеров с регулярками.

Добавлено через 47 секунд
Только не понятно почему пишешь в форум по js если вопрос по пхп


--------------------
PM MAIL WWW   Вверх
bars80080
Дата 5.1.2010, 15:21 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(brother79 @  5.1.2010,  13:42 Найти цитируемый пост)
если вопрос по пхп

почему по пхп? может он на .NET пишет
PM MAIL WWW   Вверх
t77
Дата 5.1.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Причем тут ПЧП ??? 
Я хочу сделать это на клиенте - JavaScript.
PM MAIL   Вверх
bars80080
Дата 5.1.2010, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



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

Добавлено через 58 секунд
t77, поменяй клавиатуру с чёрными буковками на клавиатуру с чёрными и красными
PM MAIL WWW   Вверх
segrey
Дата 6.1.2010, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 26.12.2006

Репутация: нет
Всего: нет



Eсли жабаскрипт, то пиши в текст ноду вместо innerHTML.
Код
marquee.appendChild(document.createTextNode("jkdfjdsf<script>alert('HI');</script>jfkd"));

типа того


Это сообщение отредактировал(а) segrey - 6.1.2010, 07:00
PM MAIL   Вверх
t77
Дата 6.1.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



bars80080, привет...
Не совсем понял чем тебе не нравиться текст и причем тут клавиатура...
Но, что касается вопроса:
Цитата

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

Да. Именно это то, что происходит.
PM MAIL   Вверх
brother79
Дата 6.1.2010, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



Цитата(t77 @  5.1.2010,  16:31 Найти цитируемый пост)
Причем тут ПЧП ??? 
Я хочу сделать это на клиенте - JavaScript. 


Я подумал, что поэтому:

Цитата(bars80080 @  5.1.2010,  14:13 Найти цитируемый пост)
это надо решать средствами сервера, на javascript при желании всё можно подделать 


Но всёравно не понятно, если 

Цитата(t77 @  6.1.2010,  11:28 Найти цитируемый пост)
Но, что касается вопроса:
Цитата

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

Да. Именно это то, что происходит. 


То смысл вообще в js? Это всё гораздо проще, удобней, а главное безопасней сделать на сервере, на том языке, на котором пишешь

Но если всётаки js то, тут:


Цитата(brother79 @  5.1.2010,  14:42 Найти цитируемый пост)
http://php.net/manual/en/function.strip-tags.php

Там и сама ф-я и куча примеров с регулярками.


Есть примеры регулярок как сделать через регулярки


--------------------
PM MAIL WWW   Вверх
bars80080
Дата 6.1.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(brother79 @  6.1.2010,  10:43 Найти цитируемый пост)
Это всё гораздо проще, удобней, а главное безопасней сделать на сервере

не совсем корректно. никакая javascript проверка не сможет заменить серверной. какой бы скрипт на js не был написан, он всё равно может быть обойдён.

я помнится так рекламу обходил. на некоторых сайтах, где можно выкладывать свои картинки, прежде чем не просмотришь тонны рекламы, сама картинка не покажется. а они всё сделали на javascript, мне осталось только дербанилку написать, которая выуживала ссылку и всё

js - пустое, его надо использовать для красоты и не более


Цитата(t77 @  6.1.2010,  10:28 Найти цитируемый пост)
Не совсем понял чем тебе не нравиться текст и причем тут клавиатура...

ну, не угадал, думал у тебя только чёрные буковки на клаве

PM MAIL WWW   Вверх
t77
Дата 6.1.2010, 14:45 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



Вот такая функция получилась:
Код

function isOnlyPlainText(strText)
{   
    var originalText = strText;
    var currTag = "";
    var re = null;

    //an array of tags, which are to remove...         
    var clearTagArr = new Array("table", "tr", "td", "tbody", "thead", "span", "a", "div", "textarea", "frame", "input", "script", "select", "button");
                    
    //remove tags from array without context
    for(i=0; i<clearTagArr.length; i++) 
    {
       currTag = clearTagArr[i];
       
       //remove open <tag>
       re = new RegExp("<" + currTag + "[^>]*>", "gi");          
       strText = strText.replace(re, "");
       
       //remove close </tag>
       re = new RegExp("<\/" + currTag + ">", "gi");
       strText = strText.replace(re, "");
    }
    
    //remove script tag <script>
    re = new RegExp("<script[^<]*<\/script>", "gi");
    strText = strText.replace(re, " ");
    
    //remove input tag <INPUT>
    re = new RegExp("<input[^<]*<\/input>", "gi");
    strText = strText.replace(re, " ");

    //remove select tag <SELECT>
    re = new RegExp("<select[^<]*<\/select>", "gi");
    strText = strText.replace(re, " ");
    
    //remove button tag <BUTTON>
    re = new RegExp("<button[^<]*<\/button>", "gi");
    strText = strText.replace(re, " ");

    //remove img tag <IMG/>
    re = new RegExp("<img[^>]*>", "gi");
    strText = strText.replace(re, " ");
    
    if(originalText != strText)
        return false;
    else
        return true;
            
}     


Принимаются замечания...

PM MAIL   Вверх
segrey
Дата 6.1.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 26.12.2006

Репутация: нет
Всего: нет



ужс какой
PM MAIL   Вверх
t77
Дата 6.1.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 27.7.2008

Репутация: нет
Всего: нет



segrey,  что такого ужасного ты увидел??
Понятно, что не идеально но это работает!
Я как ты заметил не ограничиваюсь тем, что оно работает а напротив обращаюсь сюда на форум.
Ибо хочется узнать мнение более опытных и профи и если есть ошибки то не повторять их в будущем.
Так, что если можешь предложить что то лучше, буду признателен. Если не имеешь лучшего решения, то не нужно писать ерунду, лучше помолчи smile 
Все когда то начинали с чего то. На ошибках учишься!

PM MAIL   Вверх
segrey
Дата 7.1.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 26.12.2006

Репутация: нет
Всего: нет



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

Если всё же горит теги вырезать, то можно было пройти по ссылке, которую дал товарищ brother79 и почитать там комменты с примерами реализаций.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2352 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.