Всем привет, многие ломают голову, пишут метровые коды для защиты сайта. В этой теме я попытаюсь популярно всем разъяснить как можно легко и просто перекрыть кислород злым хакерам. Речь пойдет о MySQL.
Всем спасибо, не делайте дыр)
<?php
// Digit (цифровые данные)
// Обязательная проверка на использование ключа
if (isset ($_GET['id'])) {
// проверка на тип данных
if (is_numeric ($_GET['id'])) {
// т.е здесь будет запрос
}
// или
// сразу установка типа данных
$_GET['id'] = (int) $_GET['id'];
// напомню, что функция intval работает точно также, не изобретайте велосипедов
// если вам нужны только положительные числа, то используйте функцию abs, которая приводит числа к их модулю
$_GET['id'] = abs ($_GET['id']);
mysql_query ("SELECT * FROM `table` WHERE (`id`='" . $_GET['id'] . "')");
}
// String
// Обязательная проверка на использование ключа
if (isset ($_POST['message'])) {
// удаление всех пробелов с начала и конца строки
$_POST['message'] = trim ($_POST['message']);
if (!empty ($_POST['message'])) {
// удаление всех html тегов (по выбору) (так безопасней)
$_POST['message'] = strip_tags ($_POST['message']);
// но если у вас вм проект или в роде того, то
// можно их оставить, перекодировав в спецсимволы
$_POST['message'] = htmlspecialchars ($_POST['message']);
// для лучшего эффекта, можно использовать добавление слэшей
$_POST['message'] = addslashes ($_POST['message']);
// или можно удалять к х.ям все кавычки и не писать уже mysql_escape_string
$_POST['message'] = str_replace (array ('\\'', '"'), NULL, $_POST['message']);
// здесь используется функция mysql_escape_string, она нас защитит от хакеров, не воспринимаю ковычки за иньекцию
mysql_query ("INSERT INTO `table` VALUES (`message`) VALUES ('" . mysql_escape_string ($_POST['message']) . "')");
}
}
// Bool
// Обязательная проверка на использование ключа
if (isset ($_GET['type'])) {
// проверка на тип данных
if (is_boolean ($_GET['type'])) {
// т.е здесь будет запрос
}
// или
// сразу установка типа данных
$_GET['type'] = (bool) $_GET['type'];
// напомню, что типы данных типа boolean, при выводе выдают такие данные
// если false, то NULL
// если true, то 1
}
Всем спасибо, не делайте дыр)