Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по безопасности
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Вопрос по безопасности

Страниц (1): [1]
 

1. Synov_son - 10 Августа, 2013 - 01:54:06 - перейти к сообщению
Вот прочитал, но может неправильно понял статью специалиста по безопасности.
http://www[dot]onlamp[dot]com/pub/a/php/[dot][dot][dot]hp_security[dot]html
Он начинает статью с того, что в функциях readfile,fopen,file,include,require нельзя использовать переменные. Он делает акцент на тех, которые определяются действиями пользователя.
PHP:
скопировать код в буфер обмена
  1. // $lib_dir is an optional configuration variable
  2. include($lib_dir . "functions.inc");

PHP:
скопировать код в буфер обмена
  1. // $page is a variable from the URL
  2. include($page);

Автор ссылается на то, что переменная может быть заданна умышленно Ниндзя такая, что бы навредить. Это я понимаю. Но ведь если переменная не зависит от действий пользователя она не может стать брешью в безопасности сайта ? Например, если код для упрощения записывается в переменную, а потом я использую его
2. lastdays - 10 Августа, 2013 - 02:16:33 - перейти к сообщению
Читая мануалы 03/20/2003, вы не защитите свой проект, а наоборот.
Конечно, при рег глобал он, это навредит.

Читайте актуальную документацию.
3. Synov_son - 19 Августа, 2013 - 00:33:28 - перейти к сообщению
lastdays пишет:
Читая мануалы 03/20/2003, вы не защитите свой проект, а наоборот.
Конечно, при рег глобал он, это навредит.

Читайте актуальную документацию.

В смысле ?

При этом ?
4. DelphinPRO - 19 Августа, 2013 - 01:13:15 - перейти к сообщению
Synov_son пишет:
В смысле ?
global $page;
При этом ?


Предыдущий оратор имел ввиду включенную директиву register_globals в настройках php.
(Добавление)
Synov_son пишет:
Он начинает статью с того, что в функциях readfile,fopen,file,include,require нельзя использовать переменные.

переменные использовать можно, а иногда необходимо, НО нужно обязательно проверять их содержимое на допустимость значений.
5. lastdays - 19 Августа, 2013 - 08:45:05 - перейти к сообщению
Synov_son пишет:
lastdays пишет:
Читая мануалы 03/20/2003, вы не защитите свой проект, а наоборот.
Конечно, при рег глобал он, это навредит.

Читайте актуальную документацию.

В смысле ?


В прямом.

Переменные использовать можно, если аккуратно.
В некоторых случаях это даже удобно.
Но "пихать" их в include не стоит без предварительной "обработки".
Лучше за ранее подготовить доступные.

Возьмем пример с переходом по страницам на сайте и вывод модулей:


PHP:
скопировать код в буфер обмена
  1.  
  2. echo '
  3. <table><tr>
  4. <td> <a href="?navigation=index"> Main </a></td>
  5. <td> <a href="?navigation=news"> News </a></td>
  6. <td> <a href="?navigation=user"> Account </a></td>
  7. </tr></table>
  8. ';
  9.  
  10. ## № 1
  11. // проверяем установлена ли переменная
  12. if (isset($_GET["navigation"])) {
  13. // доступные действия
  14. switch($_GET["navigation"]){
  15. case 'index': include('modules/index.php'); break; // главная страница
  16. case 'news': include('modules/news.php'); break;  //  новости
  17. case 'user': include('modules/user.php'); break;    // данные о юзере
  18. default: include('modules/index.php');                  // если из доступного ничего не выбрано
  19. }
  20. }
  21. ## № 2
  22. if (isset($_GET["navigation"])) {
  23. switch($_GET["navigation"]){
  24. case 'index': $patch = 'index'; break;
  25. case 'news': $patch = 'news'; break;
  26. case 'user': $patch = 'user'; break;
  27. default: $patch = 'index';
  28. }
  29. include('modules/'.$patch.'.php');
  30. }
  31.  
  32.  
6. Zuldek - 19 Августа, 2013 - 08:53:10 - перейти к сообщению
Цитата:
в функциях readfile,fopen,file,include,require нельзя использовать переменные

Бред сивой кобылы.
Нужно просто знать что в этих переменных.
7. DelphinPRO - 19 Августа, 2013 - 09:50:23 - перейти к сообщению
Сори за фтопик
lastdays пишет:
if (isset($_GET["navigation"])) {// доступные действия
switch($_GET["navigation"]){
case 'index': include('modules/index.php'); break; // главная страница
case 'news': include('modules/news.php'); break;  //  новости
case 'user': include('modules/user.php'); break;    // данные о юзере
default: include('modules/index.php');                  // если из доступного ничего не выбрано
}
}


Улыбка
я (угадаю мелодию...) перепишу этот код в три строки....
PHP:
скопировать код в буфер обмена
  1. $allowed = array('index','news','user');
  2. if (isset($_GET["navigation"]) && in_array($_GET["navigation"], $allowed))
  3.     include('modules/'.$_GET["navigation"].'.php');
8. EuGen - 19 Августа, 2013 - 10:11:21 - перейти к сообщению
Oneliner:
PHP:
скопировать код в буфер обмена
  1. $bResult = isset($_GET['navigation'])&&in_array($_GET['navigation'], ['index', 'news', 'user'])?include($_GET['navigation']):0;
9. Synov_son - 19 Августа, 2013 - 14:24:33 - перейти к сообщению
То есть нужно прописать исключение для вариантов, которых нет в моем коде ? Что бы никто в Get не передал что то "злое". А обработку на спец символы нужно делать ? Для переменных из get ?

 

Powered by ExBB FM 1.0 RC1