Проблема PHP – обращение к системе


5 0

У PHP есть одна очень серьезная проблема. Возможности этого языка не безграничны. Когда возможностей не хватает, то PHP может обращаться к системе и использовать его функции. Это вообще является торговой маркой всего подхода Linux, где каждое приложение пишется так, чтобы оно выполняло одну небольшую функцию, но делало это очень хорошо. С одной стороны, эта функция выполняется отлично, с другой стороны, требования к безопасности повышается.

Каждый вызов системной функции из PHP – это переход из одной доверительной системы в другую со своими приколами и обломами. Получая параметры от пользователя, мы должны их проверить на безопасность. Любое обращение к системе является небезопасным и проверка параметров должна повторяться.

В случае с .NET и Windows вообще, то тут подход немного другой. Тут предпочитают строить все целыми платформами и переходы меж уровнями и доверительными зонами сводится к минимуму. Например, сама платформа .NET на столько мощная, что необходимость в обращении к системе минимальна. Если в PHP для выполнения операции ping нужно вызвать system, то в .NET можно использовать классы.

Если в PHP вызывать system для пинга, то скорей всего придутся передавать адрес пингуемого хоста, который скорей всего приходит от пользователя. Просто так передать параметр пользователя в system – смертоубийство. А вот передать параметр с адресом в качестве адреса классу ping намного безопаснее.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Alexo

16 Ноября 2009

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


Михаил Фленов

16 Ноября 2009

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


ZeroXor

16 Ноября 2009

Это просто неудобство, которое заставляет программиста быть постоянно на стреме и не зевать.

А разве это плохо? Лично мне в этом видится достоинство, а отнюдь не недостаток. Как говорится "это не баг, это фича".


olegmaster

17 Ноября 2009

можно отказаться от вызова системных функций напрямую и использовать что-то типа

<?php
require_once "Net/Ping.php";
$ping = Net_Ping::factory();
if (PEAR::isError($ping)) {
    echo $ping->getMessage();
} else {
    $ping->setArgs(array("count" => 5,
                     "size"  => 32,
                     "ttl"   => 512
                    )
              );      
    var_dump($ping->ping('example.com'));
}
?>

то есть классы.
но для этого нужны всякие PEAR и PECL.

а когда возможностей PHP не хватает, пора задуматься о Perl/Ruby on Rails/Python


elza

17 Ноября 2009

а собственно часто ли нужно в РНР обращение к системным функциям(если конечно это не сайт правительства,или блог президента)???
IMHO: РНР и без этого предоставляет кучу возможностей для вэб-программиста


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне