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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как писать неуязвимо?

Сообщения:  [1-10]   [11-16] 

 
 автор: Eugene77   (06.12.2009 в 12:27)   письмо автору
 
   для: neadekvat   (05.12.2009 в 22:13)
 

Инициализация переменных в некоторых частных случаях, действительно, как бы, ненужна. Но это создаёт очень уж скользкое место. Поэтому для сколько-нибудь большого проекта можно считать инициализацию (или проверку на инициализированность) переменных обязательной.
Да и с позиций экономии времени и мышления значительно проще всё сразу иницилизировать.

  Ответить  
 
 автор: neadekvat   (05.12.2009 в 22:13)   письмо автору
 
   для: Trianon   (05.12.2009 в 21:37)
 

За case null спасибо, даже не задумывался о таком варианте.

  Ответить  
 
 автор: Trianon   (05.12.2009 в 21:37)   письмо автору
 
   для: neadekvat   (05.12.2009 в 19:52)
 

Если Вы заранее в курсе, что переменная GET['act'] может быть не задана, то самое разумное - обработать это явно :

<?php
switch (@$_GET['act']) 
{
 case 
'files': include ('files.php'); break;
 case 
'news':  include ('news.php');  break;
 case   
null:  include ('main.php');  break;
 default:      exit(
'incorrect act value');

  Ответить  
 
 автор: DEM   (05.12.2009 в 21:18)   письмо автору
 
   для: neadekvat   (05.12.2009 в 19:52)
 

Но зато, если надо добаивть еще один модуль, то придётся что-то изменять в коде... У меня все модули хранятся в БД и я проверяю с этой переменной их существование, так что лучше проверять :)

ЗЫ. Fractured#, я пнимаю, что вы супер-мега программист, но вы ИМХО уже достали порядком людей своей "крутостью". Если вы такой крутой, что вы тут делаете?

  Ответить  
 
 автор: neadekvat   (05.12.2009 в 19:52)   письмо автору
 
   для: Eugene77   (04.12.2009 в 12:52)
 

> 3) Инициализировать переменные
Это разве так страшно? В чем тут уязвимость?
Вот, к примеру, код:
<?php
switch ($_GET['act']) {
 case 
'files': include ('files.php'); break;
 case 
'news': include ('news.php'); break;
 default: include (
'main.php');
}


Согласитесь, $_GET['act'] может отсутствовать в принципе, интерпретатор при определенном уровне ошибок выведет предупреждение о несуществующей переменной, однако скрипт удачно продолжит работу и сделает то, что предписывает делать switch по дефолту.
Или вы предложите это?
<?php
if (isset ( $_GET{'act'] ) ) {
 switch (
$_GET['act']) {
  case 
'files': include ('files.php'); break;
  case 
'news': include ('news.php'); break;
 }
} else {
 include (
'main.php');
}

Предупреждение исчезнет, и только. Читабельность, имхо, резко падает.

  Ответить  
 
 автор: sim5   (05.12.2009 в 14:57)   письмо автору
 
   для: Eugene77   (05.12.2009 в 14:45)
 

Почитайте сайты посвященные хакингу, много полезного узнаете.

  Ответить  
 
 автор: Eugene77   (05.12.2009 в 14:45)   письмо автору
 
   для: Trianon   (05.12.2009 в 13:24)
 

На всякий случай я везде ставлю такую проверку. (И считаю её обязательной)
Если даже библиотека с открытым кодом, то я её частенько немного подправляю.
Но дело не в этом.
В библиотеке могут оказаться функции, через которые можно будет что-то наковырять про мой сайт.
Я могу это не осознавать. И даже не хочу анализировать с этих позиций их текст максимально внимательно.
Достаточно того, что .inc файлы
1) Нельзя запустить через Апачи
2) Нельзя проинклудить чужим скриптом
3) Мои .php скрипты используют их аккуратно, следя за тем, чтобы не вызывать их с без проверки аргументов (если такая проверка не предусмотрена в самих функциях библиотек)

  Ответить  
 
 автор: Trianon   (05.12.2009 в 13:24)   письмо автору
 
   для: Eugene77   (05.12.2009 в 12:25)
 

>>немного не понял. для чего пункт 6? (поподробнее)
>6) При подключении файлов библиотек проверять наличие секретной константы в основном скрипте.
<? 
>if(defined(SECRET_CODE_DEFINED_IN_ALL_MY_PHP_SCRIPTS))

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

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

  Ответить  
 
 автор: Eugene77   (05.12.2009 в 12:25)   письмо автору
 
   для: psychomc   (04.12.2009 в 20:30)
 

>немного не понял. для чего пункт 6? (поподробнее)
Лучше обсуждения в отдельные темы отделять.
Попросим об этом модератора!
Но смысл у
6) При подключении файлов библиотек проверять наличие секретной константы в основном скрипте.
<? 
if(defined(SECRET_CODE_DEFINED_IN_ALL_MY_PHP_SCRIPTS))

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

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

  Ответить  
 
 автор: psychomc   (04.12.2009 в 20:30)   письмо автору
 
   для: Eugene77   (04.12.2009 в 12:52)
 

немного не понял. для чего пункт 6? (поподробнее)

  Ответить  

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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