Да, Вы можете, и в зависимости от Вашего распределения, оно должно работать из поля. По крайней мере, с драйверами с открытым исходным кодом. Я, которого знают dón't, будут ли драйверы с закрытым исходным кодом вести себя странно, но они не были должны.
Все же Xinerama не то, что Вы хотите сделать больше. Расширение Randr заботится о расположении мониторов. Можно использовать инструменты как arandr
выровнять Ваши экраны с помощью GUI.
Я думаю, вы должны быть очень осторожны при использовании файла
в обстоятельствах, когда вы вводите его совершенно ненадежно. Например, RHEL 5 файл
идентифицирует это:
GIF87a
<?php
echo "Hello from PHP!\n";
?>
как «Данные изображения GIF, версия 87a, 15370 x 28735». У интерпретатора PHP нет проблем с выполнением этого ввода. Это отсутствие проблем является основой для проблем « включение локального файла » (LFI).
Во-вторых, файл
(и даже строки
) фактически анализируют входные файлы, чтобы сообщить вам то, что вы хотите знать. Эти парсеры сложны и имеют проблемы .
Я собираюсь предложить команду identify
из набора ImageMagick . Его не обманывает мой простой пример, приведенный выше, и он только правильно анализирует файлы изображений, поэтому он должен быть менее подвержен уязвимостям безопасности, чем файл
.
В качестве быстрого первого прохода команда file
может быстро обнаружить заголовки изображений:
if file "$FILE" |grep -qE 'image|bitmap'; then
echo "File '$FILE' has the headers of an image"
fi
(Второе изменение для bitmap
необходимо, если вы хотите распознать Windows BMP файлы, так как libmagic не использует слово "изображение" для описания растровых изображений. )
Однако, мы можем обмануть файл
с поддельным изображением на основе PHP из ответа Bruce Ediger:
$ echo 'GIF87a<?php echo "Hello from PHP!"; ?>' > fake.gif
$ file fake.gif && echo image detected || echo no image detected
fake.gif: GIF image data, version 87a, 16188 x 26736
image detected
Набор ImageMagick имеет скрипт identify с фронтендом CLI, который возвращает некоторые метаданные по данному изображению. Он терпит неудачу, когда ожидаемых метаданных нет, поэтому идеально подходит для этой цели:
$ identify fake.gif && echo image detected || echo no image detected
identify-im6.q16: negative or zero image size `fake.gif' @ error/gif.c/ReadGIFImage/1402.
no image detected
Для более быстрого сканирования большой коллекции файлов я рекомендую сложить оба:
if file "$FILE" |grep -qE 'image|bitmap' \
&& ! identify "$FILE" >/dev/null 2>&1; then
echo "File '$FILE' is a fake image!"
fi
(Это перенаправляет вывод identify
в небытие, так как нас волнует только то, смог ли он успешно завершить работу, что захватывается его кодом выхода)
В следующем примере используется простой белый GIF размером 1x1 с тем же самым PHP-кодом, добавленным в конец. Я не знаю PHP и не уверен, что он на самом деле будет запущен, но так как PHP - это язык шаблонов, который печатает буквальный "текст" на все, что находится за пределами его тега , я предполагаю, что это запустит данный код как есть, с некоторым мусором перед полезной нагрузкой.
$ { echo 'R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBAD'
echo 's8P3BocCBlY2hvICJIZWxsbyBmcm9tIFBIUCEiOyA/Pgo='
} | base64 -d > fake2.gif
$ strings fake2.gif
GIF87a
;<?php echo "Hello from PHP!"; ?>
$ file fake2.gif
fake2.gif: GIF image data, version 87a, 1 x 1
$ identify fake2.gif
fake2.gif GIF 1x1 1x1+0+0 8-bit sRGB 2c 68B 0.000u 0:00.000
Это также может быть сделано с комментарием GIF, чтобы быть полностью действительным в качестве изображения:
$ hd fake3.gif
00000000 47 49 46 38 39 61 01 00 01 00 80 00 00 ff ff ff |GIF89a..........|
00000010 ff ff ff 21 fe 20 3c 3f 70 68 70 20 65 63 68 6f |...!. <?php echo|
00000020 20 22 48 65 6c 6c 6f 20 66 72 6f 6d 20 50 48 50 | "Hello from PHP|
00000030 21 22 3b 20 3f 3e 00 2c 00 00 00 00 01 00 01 00 |!"; ?>.,........|
00000040 00 02 02 44 01 00 3b |...D..;|
00000047
Я выбрал GIF и воспользовался его системой комментариев, но просто конкатенирование полезного груза после любого изображения также должно работать, чтобы обойти эту технику детектирования. Это просто сложнее, чем обмануть файл
и (в зависимости от реализации) он может оставить некоторые улики (мусор от изображения).