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

Форум PHP

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

 

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

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

тема: Авторизация от SOFTTIME Симдянова И.В.
 
 автор: provodnik   (20.01.2007 в 16:29)   письмо автору
 
 

День добрый. У меня, как у начинающего, есть вопрос Симдянову И.В. и людям, которые используют этот скрипт непосредственно по назначению:

Как этот скрипт защищает от SQL инъекций, и ввода всяких нехороших символов, если использует только данный проверочны код:

if (!get_magic_quotes_gpc())
    {
      $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
      $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
    }
    $_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']);
    $_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
  


А почему же другие люди используют немалый набор всяких ф-ий для проверки, таких как:

function var_db ($text) {
     return preg_replace ('/[^а-яa-z0-9_ ,".-@]|insert|delete|update|char|union|--/i', '', $text);
}


$login = htmlspecialchars($login, ENT_QUOTES);


$login = addslashes($login);


$login = stripslashes($login);

и т.д.
Прошу прощения, если это очередной глупый вопрос...

   
 
 автор: Sergey89   (20.01.2007 в 17:43)   письмо автору
 
   для: provodnik   (20.01.2007 в 16:29)
 

Для безопасности запроса, как правило достаточно обойтись функцией mysql_escape_string.

   
 
 автор: cheops   (20.01.2007 в 21:11)   письмо автору
 
   для: provodnik   (20.01.2007 в 16:29)
 

>А почему же другие люди используют немалый набор всяких ф-ий для проверки, таких как:
1) Одни по привычке
2) Другие просматривая старый код и код первых, тоже пишут.
Понимаете, использование addslashes() и stripslashes() не имеет смысла без использования функции get_magic_quotes_gpc(), которая проверяет включён ли на сервере режим магических кавычек. Функция mysql_escape_string() является практически полным аналогом addslashes(). htmlspecialchars() не удобно использовать перед занесением информации в базу данных (потом информацию не удобно редактировать), её удобнее использовать перед выводом информации в браузер.
Используя регулярное выражение '/[^а-яa-z0-9_ ,".-@]|insert|delete|update|char|union|--/i' разработчики скорее всего хотят одним зайцем исключить SQL-инъекцию по строке и по числовому параметру. Регулярные выражения достаточно ресурсоёмки, поэтому везде их использовать не следует - в авторизации числа не используются, поэтому можно защищаться только от SQL-инъекции по строке.

В представленной систем достаточно защиты, чтобы злоумышленик не смог провести SQL-инъекцию. Разумеется перед выводом в браузер имени пользователя необходимо обработать его при помощи функции htmlspecialchars().

Последовательность
<?php
    $_SERVER
['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']); 
    
$_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
?>

можно убрать - она лишняя.

>Прошу прощения, если это очередной глупый вопрос...
Глупым вопрос является толко в том случае, если человек, спрашивающий его знает на него ответ... если вам что-то не понятно - обязательно спрашивайте, что знаем - расскажем.

   
 
 автор: Trianon   (21.01.2007 в 00:14)   письмо автору
 
   для: cheops   (20.01.2007 в 21:11)
 

Добавил бы следующее соображение.
Применять вышеозначенное регулярное выражение - значит запретить ввод перечисленных в нем английских слов независимо от того, используются они в SQL-инъекции, в отрывке цитируемого исходника программы, или даже просто в фрагменте обычного человеческого предложения. Об этом моменте, почему-то, эти "другие люди" думать не хотят.

   
 
 автор: provodnik   (21.01.2007 в 01:17)   письмо автору
 
   для: Trianon   (21.01.2007 в 00:14)
 

>Добавил бы следующее соображение.
>Применять вышеозначенное регулярное выражение - значит запретить ввод перечисленных в нем английских слов независимо от того, используются они в SQL-инъекции, в отрывке цитируемого исходника программы, или даже просто в фрагменте обычного человеческого предложения. Об этом моменте, почему-то, эти "другие люди" думать не хотят.

Эта ф-ия с рег. выражением у меня стоит на проверке логина и пароля. Не думаю, что у Вас, Trianon, пароль или логин содержит перечисленные английские слова...
С уважением...

   
 
 автор: Trianon   (21.01.2007 в 09:49)   письмо автору
 
   для: provodnik   (21.01.2007 в 01:17)
 

Поскольку я в Ваш круг пользователей не вхожу, то для меня проблемы, как таковой это не предствляет.
А вот Вам придется делать указанное допущение для каждого своего пользователя.
Опять же каждому свое....

   
Rambler's Top100
вверх

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