Модераторы: 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   Вверх
t77
Дата 7.1.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я ходил туда и ничего нового там не увидел. 
И вообще не нужно давать примеры на PHP. Я его не знаю! 
Приведенный мной код удаляет определенные...Это хорошо но не совсем то, что нужно.
Вообщем на данный момент могу точно сформировать задачу.
Во первых это нужно сделать на клиенте однозначно. Я предпочитаю JavaScript.
Во вторых мне необходимо проверить вводимый пользователем текст на наличие каких-либо тегов. В случае если в тексте имеются тег или скобка тега то:
1. поднимаем флаг. 
2.Соответственно данному флагу сообщаем пользователю, что введеный текст не корректный.
3. Удаляем введеный пользователем текст.
4. возвращаем курсор на текстовое поле и ждем пока пользователь введет новый текст.

Так вот теперь возникает вопрос, как проверить стринг на наличие каких либо тегов ?? 
Просто проверить(тоесть функция проверяет стринг и возвращает true или false). 
Как это сделать??
PM MAIL   Вверх
t77
Дата 7.1.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Получилось решить данную задачу в пару строк...
Код

function isNotValidText(strText)
{       
    var hasHtmlTags = false;
    
    debugger;
    var OpenBracketPattern=/</i;
    hasHtmlTags = OpenBracketPattern.test(strText);
    
    if(!hasHtmlTags)
    {
         var ClosedBracketPattern = />/i;
         hasHtmlTags = ClosedBracketPattern.test(strText);
    }
    
    return hasHtmlTags;            
}   

Скажите пожалуйста можно ли обойти данную валидацию ??
Принимаются замечания.
PM MAIL   Вверх
Amphiluke
Дата 7.1.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Какой смысл в использовании флага i в регулярных выражениях />/ и /</ ?
И мильон ложных срабатываний. 

В этой строке есть теги?
«ваоыоыоышо<<<><<<drgegieijeoi»


Это сообщение отредактировал(а) Amphiluke - 7.1.2010, 12:09
PM   Вверх
Wolf1994
Дата 7.1.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

if(str.indexOf("<")!=-1)
 //true

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


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



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

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



Цитата(t77 @  7.1.2010,  09:54 Найти цитируемый пост)
Во первых это нужно сделать на клиенте однозначно

это заблуждение
PM MAIL WWW   Вверх
t77
Дата 7.1.2010, 14:41 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

это заблуждение 

bars80080 , спасибо за ваше мнение конечно...
Но дело в том, что прежде чем введенный пользователем текст пошлется на сервер необходимо сделать валидацию ввода на клиенте. Почему нет ?
Каким образом можно обойти данную проверку на клиенте ?

Amphiluke , вы имеете ввиду, что нет смысла включения флага учёта регистра, так как на скобки(< и >) это никак не влияет...??
Я правильно вас понял ??

Wolf1994, прикольно, спасибо.
Но, в чем преимущество вашего варианта ответа ??
Ведь если текст будет большим, то использование регулярных выражений предпотчительней, 
так как регурярки работают быстрее.
PM MAIL   Вверх
Wolf1994
Дата 7.1.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Преимущества нет. Просто чуть короче условие.

По предмету спора: валидация на клиенте не защитит от хакера, но немного сэкономит ресурсы сервера на обычных посетителях.
PM MAIL WWW   Вверх
bars80080
Дата 7.1.2010, 18:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(t77 @  7.1.2010,  13:41 Найти цитируемый пост)
аким образом можно обойти данную проверку на клиенте ?

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

найти нужный запрос, заменить где надо параметры или даже переписать функции, и всё, понеслись на сервер те данные, которые нужны кулхацкеру


Цитата(t77 @  7.1.2010,  13:41 Найти цитируемый пост)
Но дело в том, что прежде чем введенный пользователем текст пошлется на сервер необходимо сделать валидацию ввода на клиенте. Почему нет ?

валидацию на клиенте можно сделать, и обычно это полезно экономией ресурсов сервера и трафика. но никакая проверка на js не сможет заменить проверку на сервере

Добавлено через 3 минуты и 12 секунд
да простой пример, тут есть звёздочки над каждым постом для оценки. в них есть механизм запрета повторного голосования и запрет от голосования за свой пост. всё на js. но это всего лишь внешняя атрибутика. на сервере есть при этом обязательная проверка, которая и служит единственным верным ограничителем.
даже если ты поломаешь механизм нажимания этих звёздочек, всё равно проголосовать дважды ты не сможешь. твой голос просто не учтётся
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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