Является ли скриптом?

fixxxer

К.О.
Партнер клуба
Эти "данные" могут прекрасно "нагадить", если в этих "данных" встречается <?php.
Собственно, на этом и основан include code injection.
 

WMix

герр M:)ller
Партнер клуба
Вурдалак
до ошибки может и не дойти, а нагадить успеет
fixxxer
поэтому я и сказал, что в душе мы четко понимаем разницу
PHP:
echo file_get_contents('file')
можно не читать
 

fixxxer

К.О.
Партнер клуба
Не надо подменять контекст. Рассматривается совершенно конкретный случай компиляции и выполнения определенного набора байт совершенно конкретным zend engine.

Вне контекста все что угодно может являться чем угодно. Вот это - что? Программа на C++? На Perl? На Python? Или просто данные?
 

Вурдалак

Продвинутый новичок
Контекст первичен. Мы определяем содержимое по контексту, а не наоборот. В контексте PHP-интеретатора любой файл, который php -l, является PHP-скриптом.
 

WMix

герр M:)ller
Партнер клуба
fixxxer
до тех пор пока явно не запущу, голый текст.
такого как <?php не наблюдаю, могу без страха написать $ php Вот это
Вурдалак
Код:
-l             Syntax check only (lint)
 

fixxxer

К.О.
Партнер клуба
Отлично.

Беру пишу php "вот это", оно компилируется, выполняется и выводит свой код.

Теперь беру пишу perl "вот это", оно компилируется, выполняется и выводит свой код.

В чем разница? :)
 

WMix

герр M:)ller
Партнер клуба
в одном случае я сделаю то чего я не боюсь, а в другом, что пошел на риск, не понимая как работает перл
 

fixxxer

К.О.
Партнер клуба
То есть то, является ли набор байт программой на каком-то языке, зависит от твоих знаний и страхов?

Это к доктору. :)
 

WMix

герр M:)ller
Партнер клуба
нет, то что нет смысла сейчас читать perl чтоб обьяснить как опасен скрипт, если не знаешь, что он делает и как безопасны данные, которые можно даже не понимать

до тех пор, пока нет активного запуска <?php все шелуха (при вызове php)!

мне надоело что-то обьяснять.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Разберем таки подробно.

теперь можно все файлы обозвать php скриптом
Разумеется, нет.

PHP:
Hello World
- это php-скрипт.

PHP:
Hello World<?php if bla;
- это не php-скрипт.

в одном случае я сделаю то чего я не боюсь, а в другом, что пошел на риск, не понимая как работает перл
Возьмем за аксиому, что ты знаешь php. Обработаем любой корректный php-скрипт, в котором не встречается "<?php", следующей программой:

PHP:
<?php
$inProgram = file_get_contents($inFile);
$outProgram = "<?php echo '" . addcslashes($inProgram, "'\\") . "';";
echo $outProgram;
Получаем идентичную программу, компилирующуюся ровно в те же опкоды. Просмотрев ее код и увидев, что она состоит из одного-единственного оператора echo, зная php, ты точно так же ее запустишь без опасений.
 

WMix

герр M:)ller
Партнер клуба
всетаки прочел прежде чем запустил, nicht war?
 

fixxxer

К.О.
Партнер клуба
Прекрасно. Тогда это еще и программа на C:

Код:
$ echo 'Hello World<?php if bla;' > 1.c
$ gcc 1.c
1.c:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘World’
Компилятор C активно прореагировал и сообщил об ошибке.
 

fixxxer

К.О.
Партнер клуба
это не скрипт, пхп выведет без изменений
Еще прекраснее. То есть квайн не является программой.

Код:
$ cat 1.py
_='_=%r;print _%%_';print _%_
$ python 1.py
_='_=%r;print _%%_';print _%_
Выведено без изменений.
 

WMix

герр M:)ller
Партнер клуба
легко, могу написать программу которая одновременно является и php и с и под разными "компилерами" будет вести себя по разному
но это мы опять крутимся на месте,
я пытаюсь обьяснить что данные это не скрипт, и их бояться не нужно, а скрипт в первую очередь это набор инструкций и прежде чем запускать, их нужно понимать.
имено этот момент - безопасности я вижу в вопросе
Является ли php-скриптом файл с расширением .php, если в нем нет <?php ?> и соответственно нет команд?
вы пытаетесь раздуть, непонятную демогогию, что если в результате интерпретации возникает команда "покажи содержимое" - это программа!
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
имено этот момент - безопасности
Ты так и не ответил, в чем же глубокая разница с точки зрения безопасности между
PHP:
Hello World
и
PHP:
<?php echo 'Hello World';
И то, и другое надо проверять, читая код. И то, и другое компилируется в одинаковые опкоды.

Разница только в том, что проще проверить - но это уж точно не признак того, что является программой.
 

WMix

герр M:)ller
Партнер клуба
а если этих файлов 10000 тоже будешь читать или уверено скажешь, что мне пофиг, что в них написанно, я их не запускаю
PHP:
echo file_get_contents('file')
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Если ты их не запускаешь, вопрос вообще не имеет никакого смысла. Не запускать можно все, что угодно.
 

WMix

герр M:)ller
Партнер клуба
fixxxer
имеет. ?> тут ничего не произойдет <? по крайней мере с точки зрения php
 
Сверху