Pull to refresh

Безопасность в PHP (Обработка даных полученных от пользователей)

Reading time2 min
Views7.5K
Хочу рассказать о простых приемах, которые помогут обезопасить ваш скрипт.

Общие положения


Всегда проверяйте полученные данные от пользователя ($_POST, $_GET, $_REQUEST, $_COOKIE, $_FILES), причем не только от разных инъекций, XSS и прочего, но и на корректность вводимых данных, например, если у вас интернет магазин, то проверяйте, чтобы количество товаров было не отрицательным и целым.

Представьте себя на месте хакера, подумайте чтобы вы сделали с сайтом.

SQL-инъекции


Инъекция SQL (англ. SQL injection — «SQL-вторжение») — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода. Читать дальше на wikipedia
Чтобы от нее защиться, достаточно использовать:
  • mysql_escape_string() — для защиты строк и двоичных данных
  • mysql_real_escape_string() — для защиты строк и двоичных данных в соответствии с кодировкой, установленной на сервере (требуется соединение с сервером, иначе возвращает пустой результат)
  • intval() — для защиты целочисленных цифровых значений, intval() возвращает 0 в случае если строка не число.
  • floatval() — для защиты дробных значений, аналогичное поведение как и у intval()

Примеры:
$sql = "SELECT string FROM test WHERE string='".mysql_escape_string($_POST['str'])."'";

$sql = "SELECT string FROM test WHERE id='".intval($_POST['id'])."'";



XSS


XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости компьютерной системы, используется при хакерской атаке. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера, они используют уязвимый сервер в качестве средства атаки на клиента. XSS-атака обычно проводится путём конструирования специального URL, который атакующий предъявляет своей жертве.Читать дальше на wikipedia
От него достаточно просто защититься с помощью двух функций:


PHP-инъекция


PHP-инъекция (англ. PHP injection) — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне. Читать дальше на wikipedia

Это способ взлома, когда можно исполнить любой php-код на стороне сервера, Очень наспространен благодаря функции include(), в которую новички передают перерменную, полученную от пользователя. Ошибочно думают, что код include($_GET['file'].".php"); спасает от такой инекции. НО ЭТО ОШИБКА!!! Потому что злоумышленник может передать в переменную file «ya.ru/%00»(без ковычек) что отбросит расширение .php

От него существует простой способ защиты:
  • addslashes() — она экранирует NULL-символ(в html он обозначется как %00), слеш и ковычки, что позволяет избавиться от нежелательных инъекций, но лучше пользоваться оператором switch, например:

switch ($_GET['file']) {
case '1':
include("hello.php");
break;
case '2':
include("bye.php");
break;
default:
break;
}

Заключение


Здесь я описал общие принципы, которыми пользуюсь я. Буду рад, если вы поможите дополнить эту статью.
Tags:
Hubs:
Total votes 16: ↑7 and ↓9-2
Comments29

Articles