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

Форум PHP

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

 

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

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

тема: Достаточно эта функция безопасна?
 
 автор: DEM   (15.05.2007 в 18:24)   письмо автору
 
 

Собственно САБЖ по этой функции (если применять ко всем переменным, кроме числовых, для них есть просто intval(); )

function bez($str)
{
  $str = htmlspecialchars($str, ENT_QUOTES);
  $str = trim($str);
  $str = stripcslashes($str);
  $str = stripslashes($str);
  $str = str_replace("'", """, $str);
  $str = str_replace('"', """, $str);
  $str = str_replace("\n", "", $str);
  $str = str_replace("/", "", $str);
  $str = str_replace("//", "", $str);
    if (!get_magic_quotes_gpc())
    {
      $str =  mysql_escape_string($str);
    }
  return $str;
}

   
 
 автор: Trianon   (15.05.2007 в 18:30)   письмо автору
 
   для: DEM   (15.05.2007 в 18:24)
 

нет

[поправлено модератором]

   
 
 автор: DEM   (15.05.2007 в 18:37)   письмо автору
 
   для: Trianon   (15.05.2007 в 18:30)
 

А на что её лучше замнеить?

   
 
 автор: Trianon   (15.05.2007 в 18:41)   письмо автору
 
   для: DEM   (15.05.2007 в 18:37)
 

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

   
 
 автор: DEM   (15.05.2007 в 18:44)   письмо автору
 
   для: Trianon   (15.05.2007 в 18:41)
 

Ну вот у меня например есть ГЕТ-переменная, я её так защищал и когда попытался использовать SQL-иньекцию, она не прошла и всё было норм...
Так же проверял и ПОСТ-переменные, тоже всё норм... Я конечно пнимаю, что для некоторых случаев она не подойдёт, но в общем, нормально ли?

   
 
 автор: Mirage   (15.05.2007 в 18:48)   письмо автору
 
   для: DEM   (15.05.2007 в 18:44)
 

самому проверять свою прогу(скрипт) это както не логично
лучше дай ее хорошему знакомому программеру пусть он тогда юзает
будь уверен, что утебя такие ошибки выплавят наружу, что ты даже оних и не предпологал )))

   
 
 автор: Trianon   (15.05.2007 в 19:08)   письмо автору
 
   для: Mirage   (15.05.2007 в 18:48)
 

Для многих это довольно дорогой способ.
Потому что, глядючи на отнюдь не некоторые исходники, блевать тянет так, что это не скомпенсирует никакой гонорар.

   
 
 автор: Trianon   (15.05.2007 в 19:10)   письмо автору
 
   для: DEM   (15.05.2007 в 18:44)
 

>Ну вот у меня например есть ГЕТ-переменная, я её так защищал и когда попытался использовать SQL-иньекцию, она не прошла и всё было норм...

А потом оказалось, что безобидную строку без искажения ввести невозможно.

   
 
 автор: cheops   (15.05.2007 в 21:59)   письмо автору
 
   для: DEM   (15.05.2007 в 18:44)
 

GET-переменная содержит строку или число?

   
 
 автор: ZAHTET   (15.05.2007 в 18:47)   письмо автору
 
   для: Trianon   (15.05.2007 в 18:41)
 

[quote]Вы пытаетесь бороться с тенью. Вы полагаете, что безопасным может быть содержимое строки. [/quote]
То есть нужно на каждый случай прописывать замену?

   
 
 автор: bronenos   (15.05.2007 в 18:52)   письмо автору
 
   для: ZAHTET   (15.05.2007 в 18:47)
 

когда надо получить число пользуйся intval()
когда надо сохранить имя и выводить его на странице то лучше применить htmlspecialchars()
когда надо записать в базу то addslashes() в зависимости от настройки ини

каждая из этих функций полезна только в одной области применения... или несколько функции... все вместе их применять это бесполезно

   
 
 автор: XPraptor   (15.05.2007 в 19:01)   письмо автору
 
   для: bronenos   (15.05.2007 в 18:52)
 

Это точно :)
Если Вы пытаетесь предотвратить атаку от юзера - проверьте строки на наличие символов скриптов >< и их кодовых представлений/ Если боитесь получить в get строке подставу - проверьте на соответствие полученный параметр. Но не использкйте универсальных функций везде.
К примеру: htmlspecialchars при попытке вставить html код в страницу - выведет его как текст, а если вы ее примените дважды перед выводом в текстовое поле, а потом при заносе в БД, то вообще получите искаженную строку при наличии спецсимволов.

Поэтому просто думайте когда пишете.

   
 
 автор: Trianon   (15.05.2007 в 22:32)   письмо автору
 
   для: ZAHTET   (15.05.2007 в 18:47)
 

Нужно разделять, как минимум
1.случай исправления входного аргумента, ошибочно нарушенного механизмом магических кавычек (stripslashes)
2.случай экранирования слэшей и кавычек при формировании C-подобных литеральных констант например в контексте SQL-запроса. (addslashes или mysql_escape_string)
3. случай вывода plain-текста в html-поток. (htmlspecialchars)

Потому что это независимые случаи.
1 - случай ввода, 3 - это вообще случай вывода. 2 - случай внутренней обработки.
И хотя 1 и 2 пункты в некоторых ситуациях аннигилируют друг друга, никто не гарантировал, что так будет всегда.
Что Вас не попросят провести поиск по последним 20 символам (или чему-то подобному), и кое-чья замечательная схема компенсации мускульных эскейпов магическими кавычками не развалится, как карточный домик.

   
Rambler's Top100
вверх

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