Warning: session_start() [function.session-start]: open(/tmp/sess_da6e8c394dfe0c49e6b09157fa400c9c, O_RDWR) failed: Disc quota exceeded (69) in /home/b/bestcatalog.hut4.ru/WWW/php.php on line 1

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/b/bestcatalog.hut4.ru/WWW/php.php:1) in /home/b/bestcatalog.hut4.ru/WWW/php.php on line 1

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/b/bestcatalog.hut4.ru/WWW/php.php:1) in /home/b/bestcatalog.hut4.ru/WWW/php.php on line 1

Warning: fopen(count/data/pages/php.2017-06-24) [function.fopen]: failed to open stream: Disc quota exceeded in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 37

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 38

Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 39

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 40

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 41

Warning: fopen(count/data/broz/2017-06-24) [function.fopen]: failed to open stream: Disc quota exceeded in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 81

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 82

Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 83

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 84

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 85

Warning: fopen(count/data/os/2017-06-24) [function.fopen]: failed to open stream: Disc quota exceeded in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 132

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 133

Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 134

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 135

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 136

Warning: fopen(count/data/total/2017-06-24) [function.fopen]: failed to open stream: Disc quota exceeded in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 259

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 260

Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 261

Warning: flock() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 262

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/b/bestcatalog.hut4.ru/WWW/count/count.php on line 263
Пример фильтрации данных полученных от пользователя на PHP

Хлеб - имя существительное, памперс - собирательное.

Пример программирования на ActionScript и JavaScript

        Пример безопасного сценария на PHP    ...или... фильтруем [базар] ВСЕ!    


script с использованием preg_replace на PHP

Мастер Итэ: И что на этот раз мы будем фильтровать?

Master-It: Тебя щаз отфильтруем!

a.k.a Дмитрий Иванов: Ну, а если серьезно:

По прошествии полу-года мой каталог сайтов был успешно взломан. Естественно я, как программист(оптимист) увидел в этом[кучу] положительных моментов. И понял для себя, что не=достаточно просто написать рабочий скрипт, он еще и должен в первую очередь, отвечать всем условиям безопасности) Естественно идеального кода не бывает, но при разработке веб приложения, основной акцент должен быть именно на безопасность, ведь это в свою очередь максимально усложнит задачу зло=умышленникам.

Для достижения максимального эффекта необходимо использовать много уровневую защиту, а именно:


Первый уровень: Заключается в использовании JavaScript кода, который необходимо реализовать на стороне клиента;
Второй уровень: Включает в себя все необходимые проверки[и фильтрацию] вводимых пользователем данных с использованием РНР, на стороне веб-сервера.
Третий уровень: Использует защиту сценариев средствами самого web сервера, а именно с помощью .htaccess (но это уже, если хостер позволит:)
Ну, а так, как эта страница посвящена веб программированию на PHP, то здесь я опишу простой пример проверки вводимых пользователем данных на предмет корректности:) с использованием языка сценариев ПХП. Пример безопасного сценария на PHPНачинающий осваивать веб программирование может задать вполне справедливый вопрос: А зачем вообще, что-то фильтровать?
Когда пользователь заполняет форму ввода данных, например пишет сообщение или заполняет например поле имя, ничто не мешает ему проверить насколько корректно наше приложение обрабатывает полученные данные. Происходит ли фильтрация HTML-тегов, или можно спокойно:) передавать команды JavaScript? А опасно это в первую очередь тем, что хакер может спокойно изменить=испортить внешний вид сайта, или осознавая собственную безнаказанность просто его взламать, и разместить на нем вредоностный код. Именно по этому опытные программисты обычно придерживаются следующего правила: Запрещено все, что явно не разрешено!  Почему так? А не на оборот?   Почему не разрешено все, что явно не запрешено? Ведь можно указать в регулярном выражении оределенные теги и символы, которые будут заменяться на (" ") пустую строку)
А все не так просто. И запретить абсолютно все очень сложно, обязательно, что-то да упустишь. Дело в том, что Web технологии не стоят на месте, и регулярно появляются теги, которые попросту могут стать опасными. А Ваши функции их не предусматривают) И если для WordPress или Joomla может появиться патч, то для движка собственно=ручно разработанного это нужно предусмотреть еще на начальном этапе разработки. Причем ничто не помешает Вам залезть в движок CMS и что-то там поправить под свои нужды. Но это уже теория) Поэтому переходим к практике.
Для начала создадим форму для ввода пользователем данных, с последующим отображением их(данных:) на странице:

//Ну и собственно сама форма 
 <form name="product" action="formz.php" method="post">
  <tr>
   <td > <p><font color=#D70000> * </font> Имя Пользователя:</p> </td>
   <td><input name="username" value="<?php print($username); ?>" maxlength="22"></td>
  </tr>
  <tr><br />
   <td ><p><font color=#D70000> * </font> Текст сообщения:</p> </td>
   <td><textarea cols="56" name="coxt" rows="10" wrap="virtual">
   <?php  $_POST[coxt]=''; ?></textarea></td>
  </tr>
 <p><input type="submit" value="Отправить" style="width:110px;" id="submit"/></p>
 </form>

Здесь форма принимает от пользователя два параметра, а именно username  и  coxt  вот их то мы и будем фильтровать)
Поэтому пишем функция с использованием регулярного выражения Perl   preg_replace:

<?php
//Функция фильтрации вводимых пользователем данных
function check($var)
 {
  $var=preg_replace("/[^a-zа-я0-9\., _\n]/i", "", $var);
  return $var;
 }
?>

В этой функции регулярное выражение  preg_replace  заменяет все символы кроме " a-zа-я0-9\., _\n " на пустую строку " "
А теперь объясню зачем это делать:
Если данные вводимые пользователем, не фильтруются на предмет наличия запрещенных тегов, например <script> или <VBSCRIPT> или <javascript> то ничто не мешает пользователю провести XSS инъекцию. Проверить это можно, если в вводимое поле вставить:

<script> alert('А вот и XSSinJectIoN') </script>

В результате в место полученных данных, у Вас появится [мессага] сообщение с текстом: А вот и XSSinJectIoN
А это согласитесь совершенно не есть ХОРОШО! И ЭТО далеко не самое страшное, из того, что может ввести юзер! По этому идем дальше:

<?php
//Обрезаем пробелы в начале и конце строки
$tex = trim($_POST['coxt']);
//Проверяем присвоено ли значение переменной
 if (isset($_POST[coxt]))
 {
//Функция empty проверяет: не забыл ли пользователь заполнить поле комментария
   if (empty($tex))
      {
        ?><h3><font color=red>Вы не ввели сообщение</h3></font><?php
      }
       elseif ($_POST[username]=='')
      {
         ?><h3><font color=red>Вы забыли представиться</h3></font><?php
      }

   else
    {?><h3>Спасибо за коммент!!!</h3><?php
      $comment=$_POST[coxt];
//Второй и третий параметр функции substr определяет сколько символов в поле коммент обработать:)
//Это на случай, если нерадивый юзер захочет вставить в коммент войну и мир:)
      $sub = substr($comment, 0, 20);
      $user=$_POST[username];
      $_POST[coxt]='';
//фильтруем переменную $user и $sub, разрешая только эти символы: a-zа-я0-9\., _ 
      $user=check($user);
      $sub=check($sub);
      print ("$user <br /> $sub");
    }
 }

?>

 

В общем, как вы поняли, PHP достаточно функциональный язык программирования, и если вам интересно, то вы можете продожить с ним знакомство в статье: отправка почты на PHP, функция mail(); Приятного кодинга! :)

Комменты:

1.  Мастер Итэ пишет:
31.10.2012 в 22:15
Прикольный получился велик [на квадратных колесах]?!!

2.  Надежда Пинчук пишет:
04.11.2012 в 16:55
Программирование интересная штука. Чем дальше, тем интересней. Аж дух захватывает, когда получается. Успехов Вам!

3.  Дмитрий пишет:
05.11.2012 в 16:37
Дмитрий, а подскажите куда вставить это пхп фрагмент для того чтобы все работало. Например если это вордпресс и есть отделно пхп файл комменты.

4.  Master-It пишет:
04.11.2012 в 17:05
Ну у WordPress вроде все нормально с фильтрацией) Можете просто создать PHP документ formz.php, вставить в него вышеописанный код и открыть в браузере)) Ну, а вообще конечно можно, добавить в PHP скрипт который обрабатывает комменты функцию function check($var) { $var=preg_replace("/[^a-zа-я0-9\., _\n]/i", "", $var); return $var; } И уже потом использовать именно ее для фильтрации переменных, которые обрабатываю инфу полученную от пользователя)

5.  Геннадий Карпинский пишет:
05.11.2012 в 19:10
Дмитрий, не перестаю поражаться Вашему оптимизму и профессиональному подходу к фильтрации базара. Вор должен сидеть в тюрьме, кричал Луценко. Вот и сидит. Что касается программирования, задаю себе вопрос, чего я не программист? Сейчас бы Вам тоже такие же гексограммы написал. Общались бы, как гуманоиды. Никто бы нас не понял. Хотя это интересная штука, когда понимаешь. Ведь правда.

6.  Master-It пишет:
06.11.2012 в 04:10
Да Геннадий --Правда! Эта штука действительно очень интересная) Особен=но когда понимаешь:)) Понимаете?

7.  Andrey пишет:
07.11.2012 в 18:33
Спасибо за скрипты, но я все же хочу сам разобраться в языке программирования PHP и попробовать что-то набрать самостоятельно.

8.  Master-It пишет:
07.11.2012 в 00:33
Пожалуйста=пожалуйстА Andrey. Не(буду) Вам мешать:)

9.  Emer Whoa пишет:
11.11.2012 в 00:33
things just got a whole lot easier

10.  Master-It пишет:
11.11.2012 в 22:22
The concept is simple, but you can not lose vigilance!

11.  pandor пишет:
13.11.2012 в 11:22
А есть возможность вставки формы комментов для статей по выбору, например как на вордпресс. А также есть ли возможность использование формы комментов в других сайтах. Например, как disqus. А можно мне протестировать работы движка на моем локальном компе?

12.  Master-It пишет:
13.11.2012 в 15:55
Ты знаешь pandor, если хорошо разобраться в коде PHP, то можно вставить, что угодно и куда угодно. А протестить мою CMS блога с комментами пока возможности нет, т. к. она на данный момент находится в активной разработке.

13.  Георгий пишет:
13.11.2012 в 17:25
Вот вы пишите: Ну у WordPress вроде все нормально с фильтрацией, а как у Joomla?

13.  Master-It пишет:
14.11.2012 в 21:17
У Joomla, с фильтрацией параметров полученных от пользователя, тоже порядок. Да это и не удивительно:) Данная страница посвящена программированию на PHP и регулярным выражениям. И в основном для тех, кто практикует веб программирование на начальном этапе. Поэтому я и решил сделать акцент именно на фильтрации параметров получаемых от пользователя. А XSS уязвимость профессиональные разработчики CMS просто не могут допустить. Но есть же еще и SQL инъекции, CSRF, XPath-injections, Include-атаки, взлом админок и уязвимость Web серверов;)

* Капча:
    

* Представьтесь:

Сайт:(без http://)

* Мыло:

      

* Текст сообщения:

 

 

Warning: Unknown: open(/tmp/sess_da6e8c394dfe0c49e6b09157fa400c9c, O_RDWR) failed: Disc quota exceeded (69) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
X