Хочу рассказать о простых приемах, которые помогут обезопасить ваш скрипт.
Всегда проверяйте полученные данные от пользователя
Представьте себя на месте хакера, подумайте чтобы вы сделали с сайтом.
Инъекция SQL (англ. SQL injection — «SQL-вторжение») — один из распространённых способов взлома сайтов и программ, работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода. Читать дальше на wikipedia
Чтобы от нее защиться, достаточно использовать:
Примеры:
XSS (англ. Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости компьютерной системы, используется при хакерской атаке. Специфика подобных атак заключается в том, что вместо непосредственной атаки сервера, они используют уязвимый сервер в качестве средства атаки на клиента. XSS-атака обычно проводится путём конструирования специального URL, который атакующий предъявляет своей жертве.Читать дальше на wikipedia
От него достаточно просто защититься с помощью двух функций:
PHP-инъекция (англ. PHP injection) — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне. Читать дальше на wikipedia
Это способ взлома, когда можно исполнить любой php-код на стороне сервера, Очень наспространен благодаря функции include(), в которую новички передают перерменную, полученную от пользователя. Ошибочно думают, что код
От него существует простой способ защиты:
Здесь я описал общие принципы, которыми пользуюсь я. Буду рад, если вы поможите дополнить эту статью.
Общие положения
Всегда проверяйте полученные данные от пользователя
($_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
От него достаточно просто защититься с помощью двух функций:
- htmlspecialchars() — превращает спецсимволы в их html-сущности
- strip_tags() — удаляет все теги(нужно быть осторожнее с ней)
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;
}
Заключение
Здесь я описал общие принципы, которыми пользуюсь я. Буду рад, если вы поможите дополнить эту статью.