Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разрешённые символы
 
 автор: victoor   (31.08.2006 в 02:16)   письмо автору
 
 

Я понимаю, что я наверное уже надоел нубовскими вопросами, также понимаю, что лучше бы вначале прочитать весь учебник про php, но не терпится что-то написать, поэтому я задам еще 1 вопрос:
Пользователь ввел некую строку, она отправилась в теле запроса и попала в переменную $stroka. Как проверить, что там содержатся только разрешенные символы?

P.S. разрешенные символы это a-z A-Z а-я А-Я 0-9 - _ . ~ ! @ ^ ( ) и все, другие нельзя. И наскока безопасно разрешать вводить эти символы, если строчка с ними идет в тебо MySQL-запроса?

   
 
 автор: DIM@   (31.08.2006 в 02:28)   письмо автору
 
   для: victoor   (31.08.2006 в 02:16)
 

http://www.softtime.ru/info/articlephp.php?id_article=35
http://www.softtime.ru/dic/id_dic=12&id_group=1
http://www.softtime.ru/dic/id_dic=96&id_group=2

и еще по теме

http://www.securitylab.ru/contest/212083.php

   
 
 автор: HASHCODE   (31.08.2006 в 02:31)   письмо автору
 
   для: victoor   (31.08.2006 в 02:16)
 

Проверка осуществляется с помощью регулярных выражений.
Напокататься регулярка вот: /[a-Zа-Я0-9\-_\.~!@^()]+/i
Надо только посмотреть, нужно ли экранировать точку.

По безопасности. В наше время нигде нельзя чувствовать себя в безопасности.

   
 
 автор: Саня   (31.08.2006 в 03:36)   письмо автору
 
   для: HASHCODE   (31.08.2006 в 02:31)
 

Круглые скобки, крышечку и восклицательный знак тоже экранировать надо. Перед тем как делать запрос к БД лучше обработать входные данные функцией mysql_escape_string().
<?php
if ( preg_match("/[a-zа-я-_~@\!\^\(\)\.\d]+/i"$string ) {
  
$string mysql_escape_string($string);
  
$q "INSERT INTO table VALUES '$string';";
  
$query mysql_query($q);
  if ( 
$query ) {
    print 
"Данные записаны в базу";
  }
}
?>

   
 
 автор: victoor   (02.09.2006 в 00:53)   письмо автору
 
   для: Саня   (31.08.2006 в 03:36)
 

попробывал скрипт
<?
  $string
="ё";
  if(
preg_match("/[^a-zа-я0-9-_~@\!\^\(\)\.\d]+/i"$string))
  {
     echo(
'запрещенные символы Есть!<br>'.$string.'|<br>'.mysql_escape_string($string).'|');
  }
  else
  {
     echo(
'запрещенных символов НЕТ!<br>'.$string.'|<br>'.mysql_escape_string($string).'|');
  }
?>


почему-то все русские буквы идут по ветке else, и только буква ё заставляет идти по ветке true

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

   
 
 автор: cheops   (02.09.2006 в 12:13)   письмо автору
 
   для: victoor   (02.09.2006 в 00:53)
 

Нужно отрицание перед preg_match() и добавьте ё - эта буква не входит в диапазон а-я
<? 
  $string
="ё"
  if(!
preg_match("/[^a-zа-яё0-9-_~@\!\^\(\)\.\d]+/i"$string)) 
  { 
     echo(
'запрещенные символы Есть!<br>'.$string.'|<br>'.mysql_escape_string($string).'|'); 
  } 
  else 
  { 
     echo(
'запрещенных символов НЕТ!<br>'.$string.'|<br>'.mysql_escape_string($string).'|'); 
  } 
?>

   
 
 автор: victoor   (03.09.2006 в 00:10)   письмо автору
 
   для: cheops   (02.09.2006 в 12:13)
 

спасибо, заработало.

P.S. при таких подписях все же ненадо отрицание перед preg_match()
(в самом рег выражении есть отрицание ^)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования