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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите построить регулярное выражение. Очищаем текст от лишнего. 
:(
    Опции темы
t77
  Дата 21.11.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток.
В очередной раз обращаюсь на форум за помощью в построении регулярного выражения.
Уж очень тяжело они мне даются... Особенно "Метасимволы".
Имеется "textarea", куда пользователь может вводить все что угодно.
Необходимо построить регулярку, которая очищает введеный пользователем, текст от всех ненужных символов.
Под ненужными символами, подразумевается все, что не является текстом.
Можно только "Plain Text".
Нужна помощь.
PM MAIL   Вверх
bars80080
Дата 21.11.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Код

<html>
<head>
<script>
function qw(th) {
    var t = th.value;
    t = t.replace(/[^a-zA-Z0-9А-Яа-яЁё, \-\.]/g, '');
    th.value = t;
}
</script>
</head>
<body>
<textarea onkeyup="qw(this);"></textarea>
</body>
</html>

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


Опытный
**


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

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



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

<script></script>

или html код, регулярка должна обнаруживать это дело и удалять. 
Тоесть удаляем все что начинается с открытия скобки 
Код

"<"

и до закрытия скобки
Код

">"


Оставляем только обычный текст со знаками припинания...
Разрешаем пользователю вводить:
1. обыный текст
2. цифры
3. фопросительный и восклицательный знак
4. запятые, точка, двоеточие, точка с запятой.

Может я что то упустил из виду...
Что еще может быть небезопасным для БД и сервера...??

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


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



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

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



Цитата(t77 @  21.11.2010,  14:49 Найти цитируемый пост)
Что еще может быть небезопасным для БД и сервера...??

буквы и цифры, к примеру такие:

Код

a" OR 1=1


и не смотри что там кавычка, в ФФ даже не надо устанавливать специальных плагинов. лезешь в инспектор, меняешь введённое выражение и отсылаешь на сервер. оп-па, SQL-injection!

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

к примеру, чтобы обезопасить пользователя от XSS-атак на php весь пользовательский выводной текст пропускают через htmlspecialchars()
всё

чтобы защитить базу от sql-инъекции, для php-mysql весь вставляемый текст пропускают через mysql_real_escape_string()
всё

ни в одном случае ни один символ не вырезается. что пользователь ввёл, то ему и вернётся. но в защищённом для системы виде





какова вообще изначальная задача?
PM MAIL WWW   Вверх
t77
  Дата 21.11.2010, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Оппа-ана smile 
Согласен, что такое правильнее делать на сервере, но тем не менее
хотелось на первой стадии, при вводе пользователем текста, проверить контекст и сообщить ему о том, что введеный текст не проходит валидацию...
А дальше, на сервере прежде чем сохранять в БД, профильтровать той же регуляркой и выполнить соответствующие действия.

Объясните пожалуйста, что означает строка:
Код

a" OR 1=1

Как она может навредить ? Что она делает ?



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


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



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

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



Цитата(t77 @  21.11.2010,  18:26 Найти цитируемый пост)
хотелось на первой стадии, при вводе пользователем текста, проверить контекст и сообщить ему о том, что введеный текст не проходит валидацию...

ну, регулярка вот, чем не устраивает?
осталось просто сравнить старый текст с полученным после replace. если не равен, то алерт


Цитата(t77 @  21.11.2010,  18:26 Найти цитируемый пост)
Объясните пожалуйста, что означает строка:
Выделить всёкод Javascript
1:
    
a" OR 1=1

Как она может навредить ? Что она делает ?


обычный запрос в наипопулярнейшей базе mysql:

Код

$sql = 'SELECT `id` FROM `users` WHERE `login`="'.$login.'" AND `password`="'.$password.'"';

если на сервере нет никакой обработки входящих данных, хотя бы такой:

$login = mysql_real_escape_string($login);
$password = mysql_real_escape_string($password);

то злодей введя в поле пароля a" OR "1"="1 получит следующий запрос:

Код

SELECT `id` FROM `users` WHERE `login`="" AND `password`="a" OR "1"="1"


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





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

зачем, к примеру, вообще обрезать какие-то символы? почему логин или пароль не может состоять из #$%*" ? их вполне можно безопасно хранить в базе. их также можно безопасно показывать пользователю, в том числе и <script>. ведь вы же сейчас видите этот тег <script>, а он не встроился в страницу как кусок кода, здесь это обычный текст. вводимые мной данные не были отфильтрованы, их просто обезопасили, в данном случае обезопасили вывод функцией htmlspecialchars()
я понимаю, если требуется ввести имя. но всё равно надо понимать, что мы делаем и зачем
PM MAIL WWW   Вверх
t77
  Дата 21.11.2010, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Имеется Ли альтернатива , приведенных вами функций на JAVA ?
PM MAIL   Вверх
t77
Дата 22.11.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Гугль выдал Приличное количество самых разных ответов на мой вопрос. Так что спасибо вам за правильную мысль и подход. Интересно очень.
PM MAIL   Вверх
bars80080
Дата 22.11.2010, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



это не java, это php и mysql, что написано в заголовках кода
PM MAIL WWW   Вверх
t77
Дата 23.11.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Функция, написанная на JavaScript, алтернатива htmlspecialchars() -PHP.
Код

function htmlspecialchars()
    {
          
       var divObj = document.getElementById('myTextarea');
       var htmlText = divObj.value;    
       var chars = Array("&", "<", ">", "\"", "'");
       var replacements = Array("&amp;", "&lt;", "&gt;", "&quot;", "'");
       
       for (var i=0; i<chars.length; i++)
       {
           var re = new RegExp(chars[i], "gi");
           if(re.test(htmlText))
           {
               htmlText = htmlText.replace(re, replacements[i]);
           }
       }
       
       divObj.value = htmlText;
    }



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


Шустрый
*


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

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



t77, зачем тебе геморрой с проверкой на стороне клиента? Всё равно НЕОБХОДИМА защита на стороне сервера. Пусть сервер обрабатывает данные, а результат проверки отправляет клиенту. Типа"сообщение добавлено" или "Пшёл вон отсюда, взломщик!" Ибо кому надо, тот легко напишет своего клиента, в котором не будет этой проверки на скрипты и тут уже всё звисит от грамотно построеного сервера.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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