Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Защита и полезные функции.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Вопрос с экранированием
spaceair
Отправлено: 07 Июля, 2011 - 21:31:18
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




ситуация такая при
запросе на сайт
http://.com/?id='2
вылазит ошибка mysql_fetch_array() expects parameter 1.....

я как знаю что это все можно экранировать. Но как это правильно сделать, что бы при вводе в строке браузера http://.com/?id='2 ни чего не происходило.

я использую вот такой способ(регулярные выражения) для борьбы с ошибкой(дыркой)

PHP:
скопировать код в буфер обмена
  1.  
  2. {
  3. if (isset($_GET[id]))
  4.                                                 {
  5.                                                 $id=$_GET[id];
  6.                                                 if (!preg_match("|^[\d]+$|", $id)) {
  7.                                                 echo "<html><head><meta http-equiv='Refresh' content='0; URL=interest.php'/></head></html>";}
  8.                                                 } else {die("<html><head><meta http-equiv='Refresh' content='0; URL=interest.php'/></head></html>");}
  9. }
  10. }
  11.  


но как видно происходит редирект на другую страницу а скрипт выполняется!!
В этом случае на мой взгляд просто выводить текст без редиректа. Ниндзя
 
 Top
OrmaJever Модератор
Отправлено: 07 Июля, 2011 - 21:34:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




если только число может быть то можно так

а если могут быть строки то так


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
spaceair
Отправлено: 07 Июля, 2011 - 23:15:52
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




хорошо а как защитить форму от
_______
|'name
|______
_______
|"name"
|______
_______
|[name]
|______
В этом случае использовать функцию регулярных выражений preg_match() можно еще функции для работы над строками str_replace() или strtr() Улыбка
 
 Top
DlTA
Отправлено: 07 Июля, 2011 - 23:20:29
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




spaceair пишет:
хорошо а как защитить форму от
_______
|'name
|______
_______
|"name"
|______
_______
|[name]
от чего? другое написание другое имя.
 
 Top
Саныч Модератор
Отправлено: 07 Июля, 2011 - 23:22:24
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




spaceair пишет:
орошо а как защитить форму от
делать проверку на то, что приходит из формы... Да и вобще, что в вашем понятии "защитить"?


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
spaceair
Отправлено: 07 Июля, 2011 - 23:31:12
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Саныч пишет:
spaceair пишет:
орошо а как защитить форму от
делать проверку на то, что приходит из формы... Да и вобще, что в вашем понятии "защитить"?

Защита от ненужных команд, через строку браузера или форму)
да делать проверку. Улыбка

Ладно разберусь сам буду все проверять preg_match() функцией

Хотел просто узнать какими способами проверяют люди)) метод отправки $_POST

(Отредактировано автором: 07 Июля, 2011 - 23:36:54)

 
 Top
DlTA
Отправлено: 07 Июля, 2011 - 23:34:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




isset, empty
(Добавление)
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['tra-lia-lia']) and isset($_POST['pam-param']))
  2. {
  3. ...
  4. }
 
 Top
Саныч Модератор
Отправлено: 07 Июля, 2011 - 23:55:18
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




spaceair пишет:
Хотел просто узнать какими способами проверяют люди
люди проверяют так: на существование - isset(), на пустоту - empty(), иногда требуется проверка на типы символов, привидение к опред. типу, иногда проверка по шаблону с помощью preg_match() (к примеру, e-mail, url), иногда проверка на длину строки... Ну вот вобщем-то и все...


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
spaceair
Отправлено: 08 Июля, 2011 - 00:35:29
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




DlTA пишет:
isset, empty
(Добавление)
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['tra-lia-lia']) and isset($_POST['pam-param']))
  2. {
  3. ...
  4. }


Это не выход с положения, функция isset проверяет наличие переменной а переменная может быть любой
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST["'tra-[lia]-lia''']) and isset($_POST["'][\'"]))
  2. {
  3. ...
  4. }
[/quote]
Функция которая удаляет все не желательные выражения([]'") со строки,
Правильней сделать
PHP:
скопировать код в буфер обмена
  1.  
  2. $name="[%$]'''''^^^; SLECT FROM*";
  3.  
  4. if (isset($_POST[name]) and isset($_POST[text]))
  5. {
  6. $name=$_POST[name]; $text=$_POST[text];
  7.                if (preg_match("/^[a-b0-9]+$/i",$name) //только буквы цмфры
  8.                                                       {
  9.                                  $name=preg_replace ("/['\^\%\$\]\[\"\;\*]/","",$name);
  10.                                   echo $name; // Выведет "SELECT FROM"                      
  11.                                                        }
  12. }
[/quote]
Может есть еще какие нибудь способы отчисти нежелательных символов? предлагайте. Закатив глазки
(Добавление)
Саныч пишет:
spaceair пишет:
Хотел просто узнать какими способами проверяют люди
люди проверяют так: на существование - isset(), на пустоту - empty(), иногда требуется проверка на типы символов, привидение к опред. типу, иногда проверка по шаблону с помощью preg_match() (к примеру, e-mail, url), иногда проверка на длину строки... Ну вот вобщем-то и все...

Спасибо за инфу.
 
 Top
maragon
Отправлено: 08 Июля, 2011 - 00:47:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




[a-b0-9] - не забывайте про верхний регистра [a-zA-z0-9] Радость

Цитата:
Но как это правильно сделать, что бы при вводе в строке браузера http://.com/?id='2 ни чего не происходило.


CODE (htmlphp):
скопировать код в буфер обмена
  1. $id = $_GET ....
  2. $id = intval($id);


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
spaceair
Отправлено: 08 Июля, 2011 - 00:58:26
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




maragon пишет:
[a-b0-9] - не забывайте про верхний регистра [a-zA-z0-9] Радость

Цитата:
Но как это правильно сделать, что бы при вводе в строке браузера http://.com/?id='2 ни чего не происходило.


CODE (htmlphp):
скопировать код в буфер обмена
  1. $id = $_GET ....
  2. $id = intval($id);



/i-модификатор отвечает, что реестр не имеет значение, то есть учитывается и верхний.

регулярные выражения учим тут http://tigra60[dot]kiev[dot]ua/server/index.php?id=14
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Июля, 2011 - 01:17:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




DlTA пишет:
if (isset($_POST['tra-lia-lia']) and isset($_POST['pam-param']))

Немного не в тему, но все же...
Мало кто знает, а ведь можно записать и так:
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['a'],$_POST['b'],$_POST['c'],$_POST['d'])) ...

Что гораздо аккуратнее.
Если хоть одного из перечисленных не будет - ф-ция вернет false...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB