Существуют счетчики производительности для большого количества этого материала и если Вы не можете использовать Perfmon, можно получить доступ к счетчикам через API Диагностики.
Это вполне разумный подход. Для типичных приложений этого будет вполне достаточно.
Самая сложная часть белого списка необработанного HTML - это атрибут стиля
и объект embed
/
. Существуют законные причины, по которым кто-то может захотеть поместить стили CSS в ненадежный блок форматированного текста или, скажем, во встроенное видео YouTube. Эта проблема чаще всего возникает с фидами. Вы не можете доверять произвольному блоку текста, содержащемуся в записи фида, но вы не хотите вырезать, например, выделение синтаксиса CSS или флэш-видео, потому что это коренным образом изменит контент и потенциально запутает любого, кто его читает. Поскольку CSS может содержать опасные вещи, такие как поведение в IE, вам, возможно, придется проанализировать CSS, если вы решите оставить атрибут стиля
. А с embed
/ объект
вам может потребоваться занести имена хостов в белый список .
Дополнение:
В худшем случае HTML-экранирование всего, что находится на виду, может привести к очень плохому взаимодействию с пользователем. Намного лучше использовать что-то вроде одного из парсеров HTML5, чтобы пройти через DOM с вашим белым списком. Это гораздо более гибко с точки зрения того, как вы представляете очищенный вывод своим пользователям. Вы даже можете делать такие вещи, как:
<div class="sanitized">
<div class="notice">
This was sanitized for security reasons.
</div>
<div class="raw"><pre>
<script>alert("XSS!");</script>
</pre></div>
</div>
Затем скройте материал .raw
с помощью CSS и используйте jQuery для привязки обработчика кликов к .sanitized
div
, который переключает между .raw
и .notice
:
CSS:
.raw {
display: none;
}
jQuery:
Сначала вы должны убедиться, что ваша камера действительно имеет датчик вращения. Большинство моделей камер без сенсора просто устанавливают тег ориентации на 1 (по горизонтали) для ВСЕХ изображений.
Тогда я рекомендую использовать pyexiv2 и pyjpegtran в вашем случае. PIL не поддерживает вращение без потерь, которое является областью pyjpegtran. pyexiv2 - это библиотека, которая позволяет копировать метаданные из одного изображения в другое (я думаю, что имя метода - copyMetadata).
Вы уверены, что не делаете? не хотите изменять размер фотографий перед их отображением в браузере? 8-мегапиксельный JPEG-файл слишком велик для окна браузера и приведет к бесконечному времени загрузки.
Although PIL can read EXIF metadata, it doesn't have the ability to change it and write it back to an image file.
A better choice is the pyexiv2 library. With this library it's quite simple flip the photo's orientation. Here's an example:
import sys
import pyexiv2
image = pyexiv2.Image(sys.argv[1])
image.readMetadata()
image['Exif.Image.Orientation'] = 6
image.writeMetadata()
This sets the orientation to 6, corresponding to "Rotated 90 CW".