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
Форумы портала PHP.SU :: Версия для печати :: Защита и полезные функции.
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Защита и полезные функции.

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

1. spaceair - 07 Июля, 2011 - 21:31:18 - перейти к сообщению
ситуация такая при
запросе на сайт
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.  


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

а если могут быть строки то так
3. spaceair - 07 Июля, 2011 - 23:15:52 - перейти к сообщению
хорошо а как защитить форму от
_______
|'name
|______
_______
|"name"
|______
_______
|[name]
|______
В этом случае использовать функцию регулярных выражений preg_match() можно еще функции для работы над строками str_replace() или strtr() Улыбка
4. DlTA - 07 Июля, 2011 - 23:20:29 - перейти к сообщению
spaceair пишет:
хорошо а как защитить форму от
_______
|'name
|______
_______
|"name"
|______
_______
|[name]
от чего? другое написание другое имя.
5. Саныч - 07 Июля, 2011 - 23:22:24 - перейти к сообщению
spaceair пишет:
орошо а как защитить форму от
делать проверку на то, что приходит из формы... Да и вобще, что в вашем понятии "защитить"?
6. spaceair - 07 Июля, 2011 - 23:31:12 - перейти к сообщению
Саныч пишет:
spaceair пишет:
орошо а как защитить форму от
делать проверку на то, что приходит из формы... Да и вобще, что в вашем понятии "защитить"?

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

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

Хотел просто узнать какими способами проверяют люди)) метод отправки $_POST
7. DlTA - 07 Июля, 2011 - 23:34:56 - перейти к сообщению
isset, empty
(Добавление)
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['tra-lia-lia']) and isset($_POST['pam-param']))
  2. {
  3. ...
  4. }
8. Саныч - 07 Июля, 2011 - 23:55:18 - перейти к сообщению
spaceair пишет:
Хотел просто узнать какими способами проверяют люди
люди проверяют так: на существование - isset(), на пустоту - empty(), иногда требуется проверка на типы символов, привидение к опред. типу, иногда проверка по шаблону с помощью preg_match() (к примеру, e-mail, url), иногда проверка на длину строки... Ну вот вобщем-то и все...
9. spaceair - 08 Июля, 2011 - 00:35:29 - перейти к сообщению
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), иногда проверка на длину строки... Ну вот вобщем-то и все...

Спасибо за инфу.
10. maragon - 08 Июля, 2011 - 00:47:31 - перейти к сообщению
[a-b0-9] - не забывайте про верхний регистра [a-zA-z0-9] Радость

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


CODE (htmlphp):
скопировать код в буфер обмена
  1. $id = $_GET ....
  2. $id = intval($id);
11. spaceair - 08 Июля, 2011 - 00:58:26 - перейти к сообщению
maragon пишет:
[a-b0-9] - не забывайте про верхний регистра [a-zA-z0-9] Радость

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


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


PHP:
скопировать код в буфер обмена
  1.  if (preg_match("/^[a-b0-9]+$/i",$name)

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

регулярные выражения учим тут http://tigra60[dot]kiev[dot]ua/server/index.php?id=14
12. DeepVarvar - 08 Июля, 2011 - 01:17:30 - перейти к сообщению
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...

 

Powered by ExBB FM 1.0 RC1