ОБСУЖДЕНИЕ

Типы данных и защита вашего сайта

7 сообщений1 просмотровОткрыта
#1
Всем привет, многие ломают голову, пишут метровые коды для защиты сайта. В этой теме я попытаюсь популярно всем разъяснить как можно легко и просто перекрыть кислород злым хакерам. Речь пойдет о MySQL.

PHP

<?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    

}




Всем спасибо, не делайте дыр)
#2
инфа давно знакомая но все равно спасибо
#3
Простые примеры фильтрации, тему на бумасе нид было создать точней, но и там плюнули бы на это.
#4
да ну??.миньон7.
#5
Вместо этого можно использовать встроеные
filter_input()
filter_var()
Значительно уменьшают количество кода
#6
смысл? тип данных не легче прописать сразу?
#7
3KZO, Там сразу в аргументах функции указываешь тип даных,запроса и что фильтровать.