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

Форум PHP

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

 

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

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

тема: Функции для защиты приложений при размещении информации в базе данных
 
 автор: denser   (09.03.2011 в 14:49)   письмо автору
 
 

В одной книге я встретил следующий код:

<?php
foreach ($_POST as $inx => $val) {
 
$_POST[$inx] = htmlspecialchars($_POST[$inx]);
 
$_POST[$inx] = ini_get(magic_quotes_gpc)?$_POST[$inx]:addslashes($_POST[$inx]); 
}

foreach (
$_GET as $inx => $val) {
 
$_GET[$inx] = htmlspecialchars($_GET[$inx]);
 
$_GET[$inx] = ini_get(magic_quotes_gpc)?$_GET[$inx]:addslashes($_GET[$inx]); 
}

foreach (
$_COOKIE as $inx => $val) {
 
$_COOKIE[$inx] = htmlspecialchars($_COOKIE[$inx]);
 
$_COOKIE[$inx] = ini_get(magic_quotes_gpc)?$_COOKIE[$inx]:addslashes($_COOKIE[$inx]); 
}
?>


Автор советует разместить его в отдельном файле и просто подключать инклюдом.

Такой код сгодится для защиты приложения от SQL-инъекции XSS и прочих атак? Или лучше проверять каждый передаваемый параметр самостоятельно, не надеясь на этот код?

  Ответить  
 
 автор: psychomc   (09.03.2011 в 14:56)   письмо автору
 
   для: denser   (09.03.2011 в 14:49)
 

не сгодится. используются не те функции, фильтровать массивы с вложенностью более 2 уровней вообще не будет

  Ответить  
 
 автор: denser   (09.03.2011 в 15:42)   письмо автору
 
   для: psychomc   (09.03.2011 в 14:56)
 

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

  Ответить  
 
 автор: cheops   (09.03.2011 в 18:33)   письмо автору
 
   для: denser   (09.03.2011 в 15:42)
 

Обязательно поможем, но нужно больше подробностей о том, куда потом идут данные. Речь идет о помещении их в базу данных?

  Ответить  
 
 автор: denser   (10.03.2011 в 14:47)   письмо автору
 
   для: cheops   (09.03.2011 в 18:33)
 

Да, о помещении их в базу данных, а также если я вывожу в браузер текст из базы данных.

  Ответить  
 
 автор: cheops   (10.03.2011 в 14:58)   письмо автору
 
   для: denser   (10.03.2011 в 14:47)
 

Тогда перед помещением информации в базу данных, необходимо обработать параметры для предотвращаения SQL-инъекций, а перед выводом из базы данных для предотвращения XSS-инъекций.
1) Перед помещением в базу данных. Если речь идет о целочисленных данных, достаточно прогнать их через функцию intval().
<?php
  $_POST
['id'] = intval($_POST['id']);
?>

Если речь идет о строковых данных, то необходимо экранировать спец-символы (в том, случае, если отключен режим магических кавычек).
<?php
  
// Если режим магических кавычек отключен - экранируем спец-символы
  
if (!get_magic_quotes_gpc())
  {
     
$_POST['text'] = mysql_escape_string($_POST['text']);
  }
?>

2) Перед выводом из базы данных. Текст, особенно если его вводит не доверенный человек, желательно прогнать через функцию htmlspecialchar().
<?php
  
echo htmlspecialchars(stripslashes($textENT_QUOTES);
?>

  Ответить  
 
 автор: denser   (10.03.2011 в 18:22)   письмо автору
 
   для: cheops   (10.03.2011 в 14:58)
 

А как быть со страницей авторизации? То есть, есть запись в таблице (пароль и логин), нужно сверить вводимые данные с данными в таблице?

  Ответить  
 
 автор: cheops   (10.03.2011 в 18:32)   письмо автору
 
   для: denser   (10.03.2011 в 18:22)
 

Следует поступить, точно так же как с обычной строкой, т.е. подвергнув их следующей проверке
<?php 
  
// Если режим магических кавычек отключен - экранируем спец-символы 
  
if (!get_magic_quotes_gpc()) 
  { 
     
$_POST['login'] = mysql_escape_string($_POST['login']); 
     
$_POST['pass'] = mysql_escape_string($_POST['pass']); 
  } 
?>

  Ответить  
 
 автор: denser   (10.03.2011 в 19:23)   письмо автору
 
   для: cheops   (10.03.2011 в 18:32)
 

Теперь понятно. Спасибо за помощь.

  Ответить  
 
 автор: hxt   (10.03.2011 в 19:26)   письмо автору
 
   для: denser   (10.03.2011 в 18:22)
 

Пароль можно не проверять. Его обычно сначала хешируют, а потом сравнивают полученное значение с записью в таблице.
Поправьте меня, если я ошибаюсь.

  Ответить  
 
 автор: cheops   (10.03.2011 в 19:32)   письмо автору
 
   для: hxt   (10.03.2011 в 19:26)
 

Иногда для этого используются SQL-функции, т.е. пароль становится частью запроса, в этом случае его обязательно нужно проверять.

  Ответить  
 
 автор: psychomc   (10.03.2011 в 10:20)   письмо автору
 
   для: denser   (09.03.2011 в 15:42)
 

непосредственно перед занесением в бд mysql_real_escape_string
непосредственно перед выводом в браузер htmlspecialchars
но есть нюансы. если данные от доверенного источника (например администратора), то тогда htmlspecialchars применять естественно не нужно. и т.п. в общем-то я имею ввиду как раз то, что написал Valick

  Ответить  
 
 автор: Косорылый   (09.03.2011 в 14:58)   письмо автору
 
   для: denser   (09.03.2011 в 14:49)
 

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

  Ответить  
 
 автор: kvins   (09.03.2011 в 15:00)   письмо автору
 
   для: Косорылый   (09.03.2011 в 14:58)
 

магические кавычки их вроде отключили в новой php ?

  Ответить  
 
 автор: cheops   (09.03.2011 в 18:33)   письмо автору
 
   для: kvins   (09.03.2011 в 15:00)
 

В любом случае еще полно серверов, которые их поддерживают, поэтому учитывать их в коде приходится.

  Ответить  
 
 автор: Valick   (10.03.2011 в 09:28)   письмо автору
 
   для: denser   (09.03.2011 в 14:49)
 

универсальных решений нет, защищать нужно конкретное приложение с набором конкретных входных данных.

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

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