Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Защита от sql injection и XSS
 
 автор: xxxLEOxxx   (18.07.2009 в 13:29)   письмо автору
 
 

Здравствуйте. Решил вот написать функцию раз и навсегда избавляющую от sql инъекций. Оцените скрипт, может, кто подскажет, что еще нужно добавить, а что излишне.


 /****************************************************************************************************
 *****************************************************************************************************
 **                                                                                                 **
 **                    Скрипт проверки переменной на SQL injection и XSS                            **
 **                                           Версия: 1.0                                           **
 **                                                                                                 **
 **                                     Автор: Kirill_petrovi4                                      **
 **                                    E-mail: info@admiralart.ru                                   **
 **                                         ICQ:400056336                                           **
 **                                        Дата: 17.07.2009                                         **
 **                                                                                                 **
 *****************************************************************************************************
 ****************************************************************************************************/

function del_sql_inj($sql_request, $type_request)
{
    mysql_real_escape_string($sql_request);
    stripslashes($sql_request);
    htmlspecialchars($sql_request);


    if($type_request == 'text')//Проверяем текстовые параметры
    {

          $text = strtolower($sql_request); // Приравниваем текст параметра к нижнему регистру
          if (
                substr_count($text, "select") ||
                substr_count($text, "union") ||
                substr_count($text, "order") ||         // Ищем вхождение слов в параметре
                substr_count($text, "where") ||
                substr_count($text, "char") ||
                substr_count($text, "insert") ||
                substr_count($text, "like") ||
                substr_count($text, "or") ||
                substr_count($text, "adn") ||
                substr_count($text, "update") ||
                substr_count($text, "include") ||
                substr_count($text, ";") ||
                substr_count($text, "from")
              ){
                if (is_writeable('error_site.log'))//Заносим запись в log файл при обнаружени иньекции
                {
                    $err_data = date("m.d.y H:i:s")." ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: обнаружена sql иньекция. Текст запроса: $sql_request \r\n";
                    $fh = fopen('error_site.log', "a+");
                    fwrite($fh, $err_data);
                    fclose($fh);
                }
                else echo "ошибка записи";

                  exit('Обнаружена SQL иньекция!');
              }

    }

    if($type_request == 'int')
    {
        $sql_request = intval($sql_request);
    }

    if($type_request == 'float')
    {
        floatval($sql_request);
    }

    return $sql_request;
}

  Ответить  
 
 автор: Trianon   (18.07.2009 в 14:36)   письмо автору
 
   для: xxxLEOxxx   (18.07.2009 в 13:29)
 

>Здравствуйте. Решил вот написать функцию раз и навсегда избавляющую от sql инъекций.

Порочен сам подход.
Оценивать скрипт не имеет смысла.

Попробуйте подумать и ответить на вопрос, смогли бы Вы на этом форуме опубликовать этот скрипт, если бы на нем стояла в качестве защиты Ваша функция?

  Ответить  
 
 автор: xxxleoxxx   (18.07.2009 в 15:37)   письмо автору
 
   для: Trianon   (18.07.2009 в 14:36)
 

Ну согласитесь на большинстве сайтов, никогда не будет передаваться код и запросы к БД в качестве сообщения. Здесь свою ошибку понял,скрипт уже не универсален.

Какой подход предложите вы?

  Ответить  
 
 автор: Trianon   (18.07.2009 в 16:01)   письмо автору
 
   для: xxxleoxxx   (18.07.2009 в 15:37)
 

С чем соглашаться-то?
С тем что Вы слово select считаете матерным или слово or?
А почему собственно нельзя написать тескт запроса, он что сам по себе кусучий?
И что это за манера судить о том, что хорошо большинству, а что нет?

Мой подход прост. Первородных SQL инъекций не быват. Бывают ошибки обработки данных, к ним приводящие.
Не надо воевать с инъекцией. Надо не делать ошибок - инъекции сами пропадут.
Более подробно можете посмотреть в задаче 21 из соответствующего раздела.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования